namespace DefaultNamespace.FSM { public interface IState { void Enter(IFiniteStateMachine ctx); // IState Update(); // option 1 next state as return value void Update(IFiniteStateMachine ctx); // option 2 we call setState when we want to change void Exit(IFiniteStateMachine ctx); } // alternative // public interface IStateEnter // { // void Enter(IFiniteStateMachine ctx); // } // // public interface IStateUpdate // { // void Update(IFiniteStateMachine ctx); // } // // public interface IStateExit // { // void Exit(IFiniteStateMachine ctx); // } }