37 lines
1.4 KiB
GDScript
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
|