Dì che stai costruendo un FSM per qualcosa come un gioco e hai stati come:
- MainMenu
- Opzioni
- SinglePlayer
- MultiPlayer
Il tuo diagramma di stato potrebbe essere simile a questo:
Ora dì che hai uno stato condiviso, DevConsole
, (mostra la console quando viene premuto tilde e riceve l'input KB ecc. Sono sicuro che l'hai visto prima) in modo tale che non importa in che stato ti trovi , questo stato si applica.
Come lo descrivi?
* Modifica **
Un esempio di come funzionerebbe sarebbe come questo:
public class StateMachine
{
protected State sharedState;
protected State previousState;
protected State currentState;
public void Update()
{
if(this.hasSharedState)
this.sharedState.Update();
if (this.previousState != null && this.previousState.IsExiting)
this.previousState.Update();
else
this.currentState.Update();
}
// called by individual states
public void ChangeState<StateType>()
{
// creates a new state adn sets its state machine owner to this machine
this.previousState = this.currentState;
this.previousState.Exit();
this.currentState = StateBuilder.Build<StateType>(this);
}
}