using Syntriax.Engine.Core; namespace Syntriax.Engine.Systems.StateMachine; public interface IState : IEntity, INameable { Event OnStateUpdate { get; } Event OnStateTransitionedFrom { get; } Event OnStateTransitionedTo { get; } Event OnStateTransitionReady { get; } IState? GetNextState(); void Update(); void TransitionTo(IState from); void TransitionFrom(IState to); readonly record struct StateTransitionedFromArguments(IState ToState); readonly record struct StateTransitionedToArguments(IState FromState); readonly record struct StateTransitionReadyArguments(IState ToState); }