feat: reorganized logic + camera

This commit is contained in:
2025-11-12 15:39:40 +01:00
parent bee8cdeeef
commit fa6e5d9582
12 changed files with 124 additions and 100 deletions

41
langtons-ant/camera.gd Normal file
View File

@@ -0,0 +1,41 @@
extends Camera2D
@export var minZoom := 0.1
@export var maxZoom := 2.0
@export var zoomFactor := 0.1
@export var zoomDuration := 0.2
var zoomLevel: float = 1
var dragging: bool = false
func _ready():
pass
func _input(event):
if event.is_action_pressed("zoomIn"):
setZoomLevel(zoomLevel + zoomFactor)
elif event.is_action_pressed("zoomOut"):
setZoomLevel(zoomLevel - zoomFactor)
elif event.is_action_pressed("resetCamera"):
reset()
func _unhandled_input(event):
if event is InputEventMouseButton:
if event.get_button_index() == 1:
dragging = event.is_pressed()
elif event is InputEventMouseMotion:
if dragging:
self.global_position -= event.get_relative() * 1/zoomLevel
func setZoomLevel(level: float, mouse_world_position = self.get_global_mouse_position()):
var old_zoomLevel = zoomLevel
zoomLevel = clampf(level, minZoom, maxZoom)
var direction = (mouse_world_position - global_position)
var new_position = self.global_position + direction - ((direction) / (zoomLevel/old_zoomLevel))
zoom = Vector2(zoomLevel, zoomLevel)
self.global_position = new_position
func reset():
self.global_position = Vector2(0, 0)