extends Node signal direction_changed @export_node_path("CharacterBody2D") var entityPath: NodePath @onready var entity: CharacterBody2D = get_node(entityPath) @export_node_path("AnimatedSprite2D") var spritePath: NodePath @onready var sprite: AnimatedSprite2D = get_node(spritePath) @export var SPEED: int const DIRECTIONS = [Vector2.UP, Vector2.RIGHT, Vector2.DOWN, Vector2.LEFT] var CURRENT_DIRECTION = Vector2.UP @onready var MovementTimer: Timer = Timer.new() func _ready(): MovementTimer.wait_time = 3.0 MovementTimer.autostart = true MovementTimer.connect("timeout", Callable(_on_movement_timer_timeout)) add_child(MovementTimer) func physics_process(delta): if CURRENT_DIRECTION == Vector2.UP: entity.velocity.y -= SPEED sprite.play("up") elif CURRENT_DIRECTION == Vector2.DOWN: entity.velocity.y += SPEED sprite.play("down") elif CURRENT_DIRECTION == Vector2.LEFT: entity.velocity.x -= SPEED sprite.play("left") elif CURRENT_DIRECTION == Vector2.RIGHT: entity.velocity.x += SPEED sprite.play("right") var collision = entity.move_and_collide(entity.velocity * delta) entity.velocity = entity.velocity.lerp(Vector2(0, 0), 1) return collision func _on_movement_timer_timeout(): var directions = DIRECTIONS.duplicate() directions.remove_at(directions.find(CURRENT_DIRECTION)) directions.shuffle() CURRENT_DIRECTION = directions[0] emit_signal("direction_changed", CURRENT_DIRECTION) MovementTimer.start()