Skip to content

Commit

Permalink
Add support for panning the level freely in-game
Browse files Browse the repository at this point in the history
  • Loading branch information
bojidar-bg committed Sep 19, 2016
1 parent fd22afc commit 818aa22
Show file tree
Hide file tree
Showing 13 changed files with 241 additions and 76 deletions.
3 changes: 2 additions & 1 deletion engine.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ boot_splash="res://KOBUGE_Splash.png"

[application.config]

debug_load_level_id=5
debug_load_level_id=3

This comment has been minimized.

Copy link
@bojidar-bg

bojidar-bg Sep 19, 2016

Author Contributor

That's why you should never trust automerge to do it right...

debug_enable_step=false
debug_load_level=false
debug_load_level_pack="tutorial"
Expand All @@ -28,6 +28,7 @@ FileManager="*res://shared/file_manager.gd"

[display]

emulate_touchscreen=true
width=1024
height=768
stretch_mode="2d"
Expand Down
4 changes: 1 addition & 3 deletions entities/player.gd
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,11 @@ func level_load(level_node):

tilemap = level_node.get_node("tilemap") # Get the tilemap

# Set the limis for the camera
# Set the limits for the camera
var top_left_pos = level_node.get_node("camera_start").get_pos()
var bottom_right_pos = level_node.get_node("camera_end").get_pos()
camera.set_limit(MARGIN_TOP, top_left_pos.y)
camera.set_limit(MARGIN_LEFT, min(top_left_pos.x,-9999))
camera.set_limit(MARGIN_BOTTOM, bottom_right_pos.y)
camera.set_limit(MARGIN_RIGHT, max(bottom_right_pos.x,9999))

# Reset variables
bombs = 0
Expand Down
Binary file added gfx/larger.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gfx/smaller.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gfx/top_left_gui_cover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion levels/tutorial/level_10.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ transform/scale = Vector2( 3.2, 3.2 )

[node name="camera_end" type="Position2D" parent="."]

transform/pos = Vector2( 960, 768 )
transform/pos = Vector2( 640, 768 )
transform/scale = Vector2( 3.2, 3.2 )

[node name="Label" type="Label" parent="."]
Expand Down
4 changes: 4 additions & 0 deletions main/gui.gd
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ var popup_running = false

onready var timer = get_node("timer")
onready var popup = get_node("popup")
onready var lookaround = get_node("lookaround")
onready var level_holder = get_node("../level_holder")
onready var player = get_node("../player_holder/player")

Expand Down Expand Up @@ -109,6 +110,9 @@ func _show_popup(title, text): # Show a popup with title and text
popup.show()

func popup_button_pressed(name): # Actions for different popup buttons
if name == "look":
var toggled = get_node("top_left_buttons/look").is_pressed()
lookaround.set_enabled(toggled)
if name == "retry":
level_holder.retry_level()
elif name == "next":
Expand Down
8 changes: 7 additions & 1 deletion main/level_holder.gd
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ extends Node2D

signal counters_changed()

const TILE_SIZE = Vector2(64, 64)

export var acid_animation_time = 1.0 # The speed of the acid animation

var level_scene # The scene containing the level
Expand Down Expand Up @@ -91,13 +93,17 @@ func window_resize():
if !level_node:
return
var tilemap = level_node.get_node("tilemap")
for i in range(ceil(new_size.x/2/64)):
for i in range(ceil(new_size.x/2/TILE_SIZE.x)):
tilemap.set_cell(tile_map_acid_x_start - i, tile_map_acid_y, 2)
tilemap.set_cell(tile_map_acid_x_end + i, tile_map_acid_y, 2)

var scale = new_size.x/1024
if(scale > 1):
level_node.get_node("CanvasLayer").set_scale(Vector2(scale,scale))
level_node.get_node("CanvasLayer").set_offset(Vector2(32*scale,32-(scale - 1)*768/2))

player.camera.set_limit(MARGIN_LEFT, -new_size.x/2 - tile_map_acid_x_start * TILE_SIZE.x)
player.camera.set_limit(MARGIN_RIGHT, new_size.x/2 + tile_map_acid_x_end * TILE_SIZE.x)
player.camera.force_update_scroll()

func goal_add(type = ""): # Add one more goal
Expand Down
50 changes: 50 additions & 0 deletions main/lookaround.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@

extends Control

var mouse_down = false
var last_mouse_pos = Vector2()
var preenable_top_margin = 0

onready var player_camera = get_node("../../player_holder/player/camera")

func _ready():
set_enabled(false)

func set_enabled(enabled):
get_tree().call_deferred("set_pause", enabled)
set_hidden(!enabled)
player_camera.set_offset(Vector2(0, 0))
var z = 0.24
var scale_factor = Vector2(enabled*z + 1, enabled*z + 1)
player_camera.set_zoom(scale_factor)

if enabled:
preenable_top_margin = player_camera.get_limit(MARGIN_TOP)
var distance = player_camera.get_limit(MARGIN_BOTTOM) - player_camera.get_limit(MARGIN_TOP)
var space = get_node("/root/ScreenManager").initial_size.y
if distance / scale_factor.y < space:
player_camera.set_limit(MARGIN_TOP, player_camera.get_limit(MARGIN_BOTTOM) - space * scale_factor.y)
player_camera.force_update_scroll()

player_camera.set_limit(MARGIN_TOP, player_camera.get_limit(MARGIN_TOP) - 60) # Makes things feel less rigid
else:
player_camera.set_limit(MARGIN_TOP, preenable_top_margin)

func _input_event(event):

if event.type == InputEvent.MOUSE_BUTTON and event.button_index == BUTTON_LEFT:
mouse_down = event.is_pressed()
last_mouse_pos = event.global_pos

if mouse_down and event.type == InputEvent.MOUSE_MOTION:
var delta = last_mouse_pos - event.global_pos
var old_offset = player_camera.get_offset()

var old_center_offset = player_camera.get_camera_screen_center() - player_camera.get_camera_pos()
player_camera.set_offset(old_offset + delta)

var new_center_offset = player_camera.get_camera_screen_center() - player_camera.get_camera_pos()
player_camera.set_offset(old_offset + new_center_offset - old_center_offset)

last_mouse_pos = event.global_pos

Loading

0 comments on commit 818aa22

Please sign in to comment.