The StateMachine<TState>.StateSelector
class provides an easy way to manage a prioritised list of potential states:
- Construct a
new StateMachine<TState>.StateSelector
by passing in the target state machine. - Add states to the selector by calling its
Add
method, which requires you to give them each a priority value. If multiple states have the same priority, the most recently added will be treated as a higher priority. - After you have added all the potential states you want it to choose from, call
TrySetState
,TryResetState
, orForceSetState
to have it try to enter each of the states using the correspondingStateMachine<TState>
method. - It attempts to enter each state you have added in order of priority (highest first).
- If it successfully enters a state, the selector is cleared.
If you want to define the priority of a state as part of the state class itself (rather than as a second parameter every time you call the Add
method), you can implement the IPrioritizable
interface. The IPrioritizable.Priority
is usually implemented as an abstract
or virtual
property in your base state class so that each state can override
it with their own priority.