refacto: moved systems from player controller physics process to their own signal based systems

This commit is contained in:
2025-06-02 17:58:40 +02:00
parent c3e2c974ca
commit 178553956d
13 changed files with 377 additions and 248 deletions

View File

@ -0,0 +1,52 @@
using Godot;
using System.Collections.Generic;
public partial class TweenQueueSystem : Node3D
{
public record TweenInputs(Vector3 Location, float Duration);
private Queue<TweenInputs> _tweenInputs = new Queue<TweenInputs>();
private Node3D _tweenObject;
private bool _isTweening = false;
public void Init(Node3D tweenObject)
{
_tweenObject = tweenObject;
}
public void EndTween()
{
_isTweening = false;
}
private void TweenToLocation(TweenInputs inputs)
{
var (location, duration) = inputs;
var tween = GetTree().CreateTween();
var callback = new Callable(this, MethodName.EndTween);
tween.TweenProperty(_tweenObject, "position", location, duration);
tween.TweenCallback(callback);
_isTweening = true;
tween.Play();
}
public void QueueTween(TweenInputs inputs)
{
_tweenInputs.Enqueue(inputs);
}
public void QueueTween(Vector3 location, float duration)
{
QueueTween(new TweenInputs(location, duration));
}
public void ProcessTweens()
{
if (_tweenInputs.Count > 0 && !_isTweening)
TweenToLocation(_tweenInputs.Dequeue());
}
}