Files
CultManor/game/platform/self_moving_platform.gd
T
2026-06-12 18:38:22 +03:00

51 lines
1.0 KiB
GDScript

@tool
class_name SelfMovingPlatform
extends AbstractPlatform
const SPEED_FACTOR = 0.025
const ANIMATION_ACTIVE = "active"
@export var is_loop := false
@export var path_follow : PathFollow2D
@export_range(0, 25, 0.1) var speed : float = 10.0
var is_reverse := false
var tween: Tween
func _ready() -> void:
super._ready()
icon_sprite.play(ANIMATION_ACTIVE)
if not Engine.is_editor_hint():
_start_movement()
func _start_movement() -> void:
if tween and tween.is_running():
tween.kill()
var target := 0.0 if is_reverse else 1.0
var distance := absf(target - path_follow.progress_ratio)
var duration := distance / (speed * SPEED_FACTOR)
tween = create_tween()
if not is_loop:
tween.set_trans(Tween.TRANS_SINE)
tween.set_ease(Tween.EASE_IN_OUT)
tween.finished.connect(_on_tween_finished)
tween.tween_property(path_follow, "progress_ratio", target, duration)
func _on_tween_finished() -> void:
if is_loop:
path_follow.progress_ratio = 0
else:
is_reverse = not is_reverse
_start_movement()