diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2024-09-08 22:35:06 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2024-09-08 22:35:06 +0200 |
commit | 4597189f157834c80f56b12b701fd2b2a15c2798 (patch) | |
tree | f522e9a58ec756dc27306781da99e828b195c549 /UI/Camera.gd | |
parent | 7d7d845e76f78a87cf87c9464d700e52cd88ce6f (diff) |
next commit
Diffstat (limited to 'UI/Camera.gd')
-rw-r--r-- | UI/Camera.gd | 46 |
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) + ) |