summaryrefslogtreecommitdiff
path: root/UI/Camera.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2024-09-08 22:35:06 +0200
committerDaniel Weipert <git@mail.dweipert.de>2024-09-08 22:35:06 +0200
commit4597189f157834c80f56b12b701fd2b2a15c2798 (patch)
treef522e9a58ec756dc27306781da99e828b195c549 /UI/Camera.gd
parent7d7d845e76f78a87cf87c9464d700e52cd88ce6f (diff)
next commit
Diffstat (limited to 'UI/Camera.gd')
-rw-r--r--UI/Camera.gd46
1 files changed, 46 insertions, 0 deletions
diff --git a/UI/Camera.gd b/UI/Camera.gd
new file mode 100644
index 0000000..4e02662
--- /dev/null
+++ b/UI/Camera.gd
@@ -0,0 +1,46 @@
+extends Camera2D
+
+
+var is_in_drag_mode = false
+var drag_anchor = Vector2.ZERO
+
+@export var speed = 5
+
+@export_group("Zoom", "zoom")
+@export var zoom_min: float = 0.5
+@export var zoom_max: float = 3
+@export var zoom_step: float = 0.01
+
+
+func _input(event):
+ if event.is_action("camera_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"):
+ var new_zoom = min(zoom.x + zoom_step, zoom_max)
+ zoom = Vector2(new_zoom, new_zoom)
+ #global_position -= (global_position + (get_viewport_rect().size/2) - get_global_mouse_position())
+
+ if event.is_action_pressed("camera_drag"):
+ is_in_drag_mode = true
+ drag_anchor = get_global_mouse_position()
+ elif event.is_action_released("camera_drag"):
+ is_in_drag_mode = false
+
+
+func _process(_delta):
+ if is_in_drag_mode:
+ global_position += drag_anchor - get_global_mouse_position()
+
+ var direction_h = Input.get_axis("ui_left", "ui_right")
+ var direction_v = Input.get_axis("ui_up", "ui_down")
+ global_position += Vector2(direction_h * speed, direction_v * speed)
+
+
+func get_rect():
+ var viewport = get_viewport_rect()
+
+ return Rect2(
+ global_position,
+ viewport.size * Vector2(1 / zoom.x, 1 / zoom.y)
+ )