Added SelfMovingPlatform
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
@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()
|
||||
Reference in New Issue
Block a user