Files
2025-05-27 19:20:46 +02:00

43 lines
1.3 KiB
GDScript

## Camera control. We listen to GUIDE's actions to move and zoom the camera. Note how we can
## mix event-based and polling based input handling, depending on what works better for the
## use case.
extends Camera2D
@export var camera_movement:GUIDEAction
@export var camera_zoom:GUIDEAction
@export var camera_rotation:GUIDEAction
@export var camera_reset:GUIDEAction
@onready var _reference_zoom:Vector2 = zoom
@onready var _reference_rotation:float = rotation
func _ready():
camera_zoom.triggered.connect(_zoom_camera)
camera_rotation.triggered.connect(_rotate_camera)
camera_reset.triggered.connect(_reset_camera)
# whenever zooming completes, we store the new reference zoom
camera_zoom.completed.connect(func(): _reference_zoom = zoom)
# whenever rotation completes, we store the new reference rotation
camera_rotation.completed.connect(func(): _reference_rotation = rotation)
func _process(delta):
position += camera_movement.value_axis_2d
func _zoom_camera():
zoom = clamp( _reference_zoom * camera_zoom.value_axis_1d, Vector2(0.1, 0.1), Vector2(3, 3))
func _rotate_camera():
rotation = fmod(_reference_rotation + camera_rotation.value_axis_1d, TAU)
func _reset_camera():
zoom = Vector2.ONE
rotation = 0
_reference_zoom = zoom
_reference_rotation = rotation