extends Node2D var drag_anchor = Vector2(0,0) # todo: set camera base limit and adjust based on zoom func _input(event): if event.is_action_pressed("ui_cancel"): if %Tray.is_open: %Tray.close() else: %Tray.open() if event.is_action_pressed("drag_screen"): drag_anchor = get_global_mouse_position() if event is InputEventMouseButton: if event.is_pressed(): if event.button_index == MOUSE_BUTTON_WHEEL_UP: var zoom = min(%Viewport/Camera2D.zoom.x + 0.1, 2) %Viewport/Camera2D.zoom = Vector2(zoom, zoom) if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: var zoom = max(%Viewport/Camera2D.zoom.x - 0.1, 1) %Viewport/Camera2D.zoom = Vector2(zoom, zoom) func _process(_delta): if Input.is_action_pressed("drag_screen"): %Viewport.position += drag_anchor - get_global_mouse_position() %Viewport.position.x = min(%Viewport.position.x, %Viewport/Camera2D.limit_right - get_viewport_rect().size.x/2) %Viewport.position.x = max(%Viewport.position.x, %Viewport/Camera2D.limit_left + get_viewport_rect().size.x/2) %Viewport.position.y = min(%Viewport.position.y, %Viewport/Camera2D.limit_bottom - get_viewport_rect().size.y/2) %Viewport.position.y = max(%Viewport.position.y, %Viewport/Camera2D.limit_top + get_viewport_rect().size.y/2)