godot-walkabout/addons/walkabout/events/move_character_event.gd
2025-08-06 10:54:13 -06:00

37 lines
1.4 KiB
GDScript

@icon("move_character_event.svg")
class_name WBMoveCharacterEvent
extends WBEvent
## Event that moves a character to the specified tile.
## Charcter to move.
@export var character: WBCharacter
## Tile position to move the target to.
@export var target_tile: Vector2i
## Whether the character should be running.
@export var run: bool = false
## Whether the character should move vertically or horizontally first.
@export var prefer_vertical: bool = false
func _perform() -> void:
while character.tile_position != target_tile:
if prefer_vertical:
if character.tile_position.y < target_tile.y:
character.start_move(WBCharacter.Dir.DOWN, true)
elif character.tile_position.y > target_tile.y:
character.start_move(WBCharacter.Dir.UP, true)
elif character.tile_position.x < target_tile.x:
character.start_move(WBCharacter.Dir.RIGHT, true)
elif character.tile_position.x > target_tile.x:
character.start_move(WBCharacter.Dir.LEFT, true)
else:
if character.tile_position.x < target_tile.x:
character.start_move(WBCharacter.Dir.RIGHT, true)
elif character.tile_position.x > target_tile.x:
character.start_move(WBCharacter.Dir.LEFT, true)
elif character.tile_position.y < target_tile.y:
character.start_move(WBCharacter.Dir.DOWN, true)
elif character.tile_position.y > target_tile.y:
character.start_move(WBCharacter.Dir.UP, true)
await character.move_finished