using Syntriax.Engine.Core; namespace Syntriax.Engine.StateMachine; public abstract class StateBehaviourBase : Behaviour, IState { public event IState.StateUpdateEventHandler? OnStateUpdate = null; public event IState.StateTransitionedFromEventHandler? OnStateTransitionedFrom = null; public event IState.StateTransitionedToEventHandler? OnStateTransitionedTo = null; public abstract event IState.StateTransitionReadyEventHandler? OnStateTransitionReady; public abstract string Name { get; } protected virtual void OnUpdateState() { } public void Update() { OnUpdateState(); OnStateUpdate?.Invoke(this); } protected virtual void OnTransitionedToState(IState from) { } public void TransitionTo(IState from) { OnTransitionedToState(from); OnStateTransitionedTo?.Invoke(this, from); } protected virtual void OnTransitionedFromState(IState to) { } public void TransitionFrom(IState to) { OnTransitionedFromState(to); OnStateTransitionedFrom?.Invoke(this, to); } public abstract IState? GetNextState(); }