38 lines
1.1 KiB
C#

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();
}