clamp camera to map
This commit is contained in:
parent
63ea78592a
commit
0f6343b44f
5 changed files with 61 additions and 22 deletions
|
@ -5,23 +5,32 @@ extends Camera2D
|
|||
var is_panning_camera = false
|
||||
var tween
|
||||
|
||||
var camera_bounds:Array = [Vector2(0,0), Vector2(256*16, 256*16)]
|
||||
var chunk_in_px:Vector2i = Vector2i(Globals.CHUNK_SIZE.x*Globals.TILE_SIZE_X, Globals.CHUNK_SIZE.y*Globals.TILE_SIZE_Y)
|
||||
var game_res = DisplayServer.window_get_size(0)
|
||||
var x_min_limit = self.game_res.x/2 - chunk_in_px.x
|
||||
|
||||
func camera_zoom_in() -> void:
|
||||
_set_camera_zoom_level(Globals.CAMERA_ZOOM_LEVEL - Globals.CAMERA_ZOOM_FACTOR)
|
||||
|
||||
func _on_main_worldgen_ready() -> void:
|
||||
# set camera bounds to map size, with chunk_in_px room to go over
|
||||
self.set_limit(SIDE_LEFT, -chunk_in_px.x)
|
||||
self.set_limit(SIDE_RIGHT, Globals.map_size*Globals.TILE_SIZE_X + chunk_in_px.x)
|
||||
self.set_limit(SIDE_TOP, -chunk_in_px.y)
|
||||
self.set_limit(SIDE_BOTTOM, Globals.map_size*Globals.TILE_SIZE_Y + chunk_in_px.y)
|
||||
|
||||
|
||||
func _on_set_camera_position(pos: Vector2) -> void:
|
||||
self.position = pos
|
||||
|
||||
|
||||
func camera_zoom_out() -> void:
|
||||
_set_camera_zoom_level(Globals.CAMERA_ZOOM_LEVEL + Globals.CAMERA_ZOOM_DURATION)
|
||||
|
||||
|
||||
func get_camera_position():
|
||||
return self.position
|
||||
|
||||
|
||||
func _process(_delta) -> void:
|
||||
func _process(_delta) -> void:
|
||||
Globals.CAMERA_POSITION = self.position
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
||||
|
||||
func _set_camera_zoom_level(value: float) -> void:
|
||||
Globals.CAMERA_ZOOM_LEVEL = clamp(value, Globals.CAMERA_MIN_ZOOM_LEVEL, Globals.CAMERA_MAX_ZOOM_LEVEL)
|
||||
|
||||
|
@ -35,10 +44,6 @@ func _set_camera_zoom_level(value: float) -> void:
|
|||
)
|
||||
|
||||
|
||||
func _on_set_camera_position(pos: Vector2) -> void:
|
||||
self.position = pos
|
||||
|
||||
|
||||
func _unhandled_input(event):
|
||||
if event.is_action_pressed("camera_zoom_in"):
|
||||
camera_zoom_in()
|
||||
|
@ -53,5 +58,30 @@ func _unhandled_input(event):
|
|||
|
||||
if event is InputEventMouseMotion and is_panning_camera:
|
||||
self.position -= event.relative * Globals.CAMERA_PAN_MULTI
|
||||
# prevent camera from going overboard
|
||||
self.position.x = clamp(
|
||||
self.position.x,
|
||||
x_min_limit,
|
||||
Globals.map_size*Globals.TILE_SIZE_X - chunk_in_px.x
|
||||
);
|
||||
self.position.y = clamp(
|
||||
self.position.y,
|
||||
0,
|
||||
Globals.map_size*Globals.TILE_SIZE_Y
|
||||
);
|
||||
|
||||
|
||||
func camera_zoom_in() -> void:
|
||||
_set_camera_zoom_level(Globals.CAMERA_ZOOM_LEVEL - Globals.CAMERA_ZOOM_FACTOR)
|
||||
|
||||
|
||||
func camera_zoom_out() -> void:
|
||||
_set_camera_zoom_level(Globals.CAMERA_ZOOM_LEVEL + Globals.CAMERA_ZOOM_DURATION)
|
||||
|
||||
|
||||
func get_camera_position():
|
||||
return self.position
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue