class_name MoveAction extends "res://cutscene/Action.gd" # Properties var character: Node2D # The character to move var target_position: Vector2 # Target position var speed: float = 100.0 # Movement speed (pixels/second) var threshold: float = 5.0 # Distance threshold for completion # Internal var start_position: Vector2 var distance: float var traveled: float = 0.0 func _init(character_node: Node2D, target: Vector2, move_speed: float = 100.0) -> void: character = character_node target_position = target speed = move_speed name = "MoveAction" func start() -> void: print("started", character) if character == null: self._set_failed("Character is null") return start_position = character.position distance = start_position.distance_to(target_position) traveled = 0.0 self._set_running() func update(delta: float) -> void: if state != State.RUNNING: return if character == null: self._set_failed("Character was destroyed during action") return # Calculate movement for this frame var frame_distance = speed * delta traveled += frame_distance # If we've reached or overshot the target if traveled >= distance: character.position = target_position self._set_completed() return # Move character along the path var direction = (target_position - start_position).normalized() character.position = start_position + direction * traveled func is_completed() -> bool: return state == State.COMPLETED