namespace Syntriax.Engine.Core; public class ProgressionTracker : IProgressionTracker { public Event OnUpdated { get; } = new(); public Event OnEnded { get; } = new(); public float Progression { get; private set; } = 0f; public string Status { get; private set; } = "Default"; void IProgressionTracker.Set(float progression, string status) { if (Progression >= 1f) return; float previousProgression = Progression; string previousStatus = Status; Progression = progression.Clamp(Progression, 1f); Status = status; OnUpdated?.Invoke(this, new(previousProgression, previousStatus)); if (progression >= 1f) OnEnded?.Invoke(this); } void IProgressionTracker.Reset() { Progression = 0f; Status = "Default"; OnUpdated.Clear(); OnEnded.Clear(); } }