summaryrefslogtreecommitdiff
path: root/UI/Camera.gd
diff options
context:
space:
mode:
Diffstat (limited to 'UI/Camera.gd')
-rw-r--r--UI/Camera.gd44
1 files changed, 37 insertions, 7 deletions
diff --git a/UI/Camera.gd b/UI/Camera.gd
index 8f075cd..6c22d44 100644
--- a/UI/Camera.gd
+++ b/UI/Camera.gd
@@ -1,10 +1,11 @@
+class_name Camera
extends Camera2D
var is_in_drag_mode = false
var drag_anchor = Vector2.ZERO
-@export var speed = 5
+@export var speed = 25
@export_group("Zoom", "zoom")
@export var zoom_min: float = 0.5
@@ -12,10 +13,27 @@ var drag_anchor = Vector2.ZERO
@export var zoom_step: float = 0.01
+func _ready():
+ get_viewport().size_changed.connect(func():
+ set_new_position(global_position)
+ var new_zoom = Vector2(
+ get_rect().size.x / limit_right,
+ get_rect().size.y / limit_bottom
+ )
+ zoom = Vector2(
+ new_zoom[new_zoom.max_axis_index()],
+ new_zoom[new_zoom.max_axis_index()]
+ )
+ )
+
+
func _input(event):
if event.is_action("camera_zoom_out"):
- var min_zoom_min = limit_right / (get_viewport_rect().size.x / zoom.x)
- if min_zoom_min >= 1.0:
+ var can_zoom_out = (
+ limit_right / get_rect().end.x > 1.0 and
+ limit_bottom / get_rect().end.y > 1.0
+ )
+ if can_zoom_out:
var new_zoom = max(zoom.x - zoom_step, zoom_min)
zoom = Vector2(new_zoom, new_zoom)
if event.is_action("camera_zoom_in"):
@@ -29,7 +47,7 @@ func _input(event):
is_in_drag_mode = false
-func _process(_delta):
+func _process(delta):
if is_in_drag_mode:
set_new_position(global_position + drag_anchor - get_global_mouse_position())
@@ -37,25 +55,37 @@ func _process(_delta):
var direction_v = Input.get_axis("ui_up", "ui_down")
if direction_h != 0 or direction_v != 0:
- set_new_position(global_position + Vector2(direction_h * speed, direction_v * speed))
+ set_new_position(
+ lerp(
+ global_position,
+ global_position + Vector2(direction_h * speed, direction_v * speed),
+ speed * delta
+ )
+ )
func set_new_position(new_position: Vector2):
new_position.x = clamp(
new_position.x,
limit_left,
- limit_right - (get_viewport_rect().size.x / zoom.x)
+ limit_right - get_rect().size.x
)
new_position.y = clamp(
new_position.y,
limit_top,
- limit_bottom - (get_viewport_rect().size.y / zoom.y)
+ limit_bottom - get_rect().size.y
)
global_position = new_position
+func set_center(center_position: Vector2):
+ set_new_position(
+ center_position - (get_rect().size / 2)
+ )
+
+
func get_rect():
var viewport = get_viewport_rect()