cirnogodot/Scripts/Actors/Elevator3D.cs

56 lines
1.1 KiB
C#
Raw Normal View History

2025-06-12 16:26:11 +02:00
using Godot;
namespace Cirno.Scripts.Actors;
2025-06-18 11:33:27 +02:00
[Tool]
2025-06-12 16:26:11 +02:00
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)
{
2025-06-18 11:33:27 +02:00
if (Engine.IsEditorHint()) return;
2025-06-12 16:26:11 +02:00
if (!_isMoving) return;
ProgressRatio += (Speed * (float)delta) * _multiplier;
if (ProgressRatio is >= 1 or <= 0)
{
_isMoving = false;
}
}
public bool Activate(ActivationType activationType = ActivationType.Toggle)
{
2025-06-18 11:33:27 +02:00
if (Engine.IsEditorHint()) return false;
2025-06-12 16:26:11 +02:00
if (_isMoving) return false;
StartMoving();
return true;
}
2025-06-18 11:33:27 +02:00
public void Toggle()
{
this.Activate();
}
2025-06-12 16:26:11 +02:00
public void StartMoving()
{
if (_isMoving) return;
_isMoving = true;
if (ProgressRatio <= 0)
{
_multiplier = 1f;
}
else if (ProgressRatio >= 1)
{
_multiplier = -1f;
}
}
}