extends CharacterBody2D @export var speed: float = 40 @onready var raycast: RayCast2D = $RayCast2D const TILE_SIZE = 8 var is_moving = false var input_dir: Vector2 var prev_input: Vector2 func _ready(): pass func _process(delta): _try_interact() pass func _physics_process(delta): _try_move() func _try_move(): input_dir = Vector2.ZERO if Input.is_action_pressed("move_up"): input_dir = Vector2.UP elif Input.is_action_pressed("move_right"): input_dir = Vector2.RIGHT elif Input.is_action_pressed("move_down"): input_dir = Vector2.DOWN elif Input.is_action_pressed("move_left"): input_dir = Vector2.LEFT if input_dir and !is_moving: raycast.target_position = input_dir * 8 if input_dir != prev_input: prev_input = input_dir return var collision = raycast.get_collider() if raycast.is_colliding(): return is_moving = true prev_input = input_dir var tween = create_tween() tween.tween_property(self, "position", position + input_dir * TILE_SIZE, 0.25) tween.tween_callback(func(): is_moving = false ) func _try_interact(): if Input.is_action_just_pressed("attack") and raycast.is_colliding(): var collision = raycast.get_collider() if collision is PuzzleElement: (collision as PuzzleElement).interact() pass pass