extends StaticBody2D
@export var horizontal: bool = true
@export var distance: int = 0
@export var move_time: float = 1.5
@export var wait_time: float = 0.15
@onready var sprite: AnimatedSprite2D = $Sprite
var is_reversed: bool = false
var start_position: Vector2
var end_position: Vector2
var tween: Tween
func stop_movement():
tween.kill()
func start_movement():
position = start_position
_move_spikeball()
func _move_spikeball():
tween = get_tree().create_tween()
tween.bind_node(self)
tween.connect("step_finished", _on_step_finished)
tween.set_trans(Tween.TRANS_LINEAR)
tween.tween_property(self, "position", end_position, move_time)
tween.tween_property(self, "position", end_position, wait_time)
tween.tween_property(self, "position", start_position, move_time)
tween.tween_property(self, "position", start_position, wait_time)
tween.set_loops()
func _on_step_finished(step: int):
if horizontal:
sprite.flip_h = (step == 0) != is_reversed if step in [0, 2] else sprite.flip_h
else:
sprite.flip_v = (step == 0) == is_reversed if step in [0, 2] else sprite.flip_v
func _ready() -> void:
start_position = position
if horizontal:
sprite.play("horizontal")
else:
sprite.play("vertical")
start_position = position
end_position = position
if horizontal:
end_position.x += distance
if end_position.x < start_position.x:
is_reversed = true
else:
end_position.y += distance
if end_position.y < start_position.y:
is_reversed = true