namespace Syntriax.Engine.Core; public class ProgressionTracker : IProgressionTracker { public event IReadOnlyProgressionTracker.ProgressionUpdatedEventHandler? OnUpdated = null; public event IReadOnlyProgressionTracker.ProgressionEndedEventHandler? OnEnded = null; 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?.InvokeSafe(this, previousProgression, previousStatus); if (progression >= 1f) OnEnded?.InvokeSafe(this); } void IProgressionTracker.Reset() { Progression = 0f; Status = "Default"; OnUpdated = null; OnEnded = null; } }