cirnogodot/Scripts/Actors/Elevator3D.cs
2025-06-12 16:26:11 +02:00

48 lines
No EOL
951 B
C#

using Godot;
namespace Cirno.Scripts.Actors;
public partial class Elevator3D : PathFollow3D, IActivable
{
[Export] public float Speed { get; set; }
private bool _isMoving = false;
private float _multiplier = 1f;
public override void _Process(double delta)
{
if (!_isMoving) return;
ProgressRatio += (Speed * (float)delta) * _multiplier;
if (ProgressRatio is >= 1 or <= 0)
{
_isMoving = false;
}
}
public bool Activate(ActivationType activationType = ActivationType.Toggle)
{
if (_isMoving) return false;
StartMoving();
return true;
}
public void StartMoving()
{
if (_isMoving) return;
_isMoving = true;
if (ProgressRatio <= 0)
{
_multiplier = 1f;
}
else if (ProgressRatio >= 1)
{
_multiplier = -1f;
}
}
}