Open1kJ/PanningCamera/PanningCamera2D.gd

42 lines
1.1 KiB
GDScript3
Raw Normal View History

2024-02-24 22:26:54 -06:00
extends Camera2D
@export var MIN_ZOOM: float = 0.5
@export var MAX_ZOOM: float = 3.0
@export var ZOOM_RATE: float = 8.0
@export var ZOOM_INCREMENT: float = 0.1
var target_zoom: float = 1.0
var reset_pos: Vector2 = Vector2(0.0, 0.0)
func _physics_process(delta: float) -> void:
zoom = lerp(zoom, target_zoom * Vector2.ONE, ZOOM_RATE * delta)
set_physics_process(not is_equal_approx(zoom.x, target_zoom))
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.is_pressed():
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
zoom_in()
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
zoom_out()
if event is InputEventMouseMotion:
if event.button_mask == MOUSE_BUTTON_MASK_LEFT:
position -= event.relative / zoom
if event is InputEventKey:
if event.keycode == KEY_SPACE:
target_zoom = 1.0
zoom = Vector2(1.0, 1.0)
position = reset_pos
func zoom_in() -> void:
target_zoom = max(target_zoom - ZOOM_INCREMENT, MIN_ZOOM)
set_physics_process(true)
func zoom_out() -> void:
target_zoom = min(target_zoom + ZOOM_INCREMENT, MAX_ZOOM)
set_physics_process(true)