Skip to content

Transition

GMIKE edited this page Mar 13, 2020 · 30 revisions

Сontent

Create

You can add transition set states object or states name

//Throw exeption if transition already exist
Transition transition1 = stateMachine.AddTransition("Transition1", state1, state2);
Transition transition1 = stateMachine.AddTransition("Transition1", "state1", state2);
Transition transition1 = stateMachine.AddTransition("Transition1", state1, "state2");
Transition transition1 = stateMachine.AddTransition("Transition1", "state1", "state2");

//Return null if transition already exist
Transition transition1 = stateMachine.TryAddTransition(out bool result, "Transition1", state1, state2);
Transition transition1 = stateMachine.TryAddTransition(out bool result, "Transition1", "state1", state2);
Transition transition1 = stateMachine.TryAddTransition(out bool result, "Transition1", state1, "state2");
Transition transition1 = stateMachine.TryAddTransition(out bool result, "Transition1", "state1", "state2");

You can add transition from this state

//Throw exeption if transition already exist
Transition transition1 = state1.AddTransitionFromThis("Transition1", state2);
Transition transition1 = state1.AddTransitionFromThis("Transition1", "state2");

//Return null if transition already exist
Transition transition1 = state1.TryAddTransitionFromThis(out bool result, "Transition1", state2);
Transition transition1 = state1.TryAddTransitionFromThis(out bool result, "Transition1", "state2");

You can add transition to this state

//Throw exeption if transition already exist
Transition transition1 = state2.AddTransitionToThis("Transition1", state1);
Transition transition1 = state2.AddTransitionToThis("Transition1", "state1");

//Return null if transition already exist
Transition transition1 = state2.TryAddTransitionToThis(out bool result, "Transition1", state1);
Transition transition1 = state2.TryAddTransitionToThis(out bool result, "Transition1", "state1");

Get

//Throw exeption if transition not found
Transition transition1 = stateMachine.GetTransition("Transition1");

//Return null if transition not found
Transition transition1 = stateMachine.TryGetTransition("Transition1", out bool result);

You can get all transitions from this state

//From state machine

//Throw exeption if transitions not found
Dictionary<string, Transition> transitions = stateMachine.GetTransitionsFromState(state1);
Dictionary<string, Transition> transitions = stateMachine.GetTransitionsFromState("State1");

//Return empty dictionary if transitions not found
Dictionary<string, Transition> transitions = stateMachine.TryGetTransitionsFromState(state1, out bool result);
Dictionary<string, Transition> transitions = stateMachine.TryGetTransitionsFromState("State1", out bool result);

//From state

//Throw exeption if transitions not found
Dictionary<string, Transition> transitions = state1.GetTransitionsFromThis();

//Return empty dictionary if transitions not found
Dictionary<string, Transition> transitions = state1.TryGetTransitionsFromThis(out bool result);

You can get all transitions to this state

//From state machine

//Throw exeption if transitions not found
Dictionary<string, Transition> transitions = stateMachine.GetTransitionsToState(state2);
Dictionary<string, Transition> transitions = stateMachine.GetTransitionsToState("State2");

//Return empty dictionary if transitions not found
Dictionary<string, Transition> transitions = stateMachine.GetTransitionsToState(state2, out bool result);
Dictionary<string, Transition> transitions = stateMachine.GetTransitionsToState("State2", out bool result);

//From state

//Throw exeption if transitions not found
Dictionary<string, Transition> transitions = state2.GetTransitionsToThis();

//Return empty dictionary if transitions not found
Dictionary<string, Transition> transitions = state2.TryGetTransitionsToThis(out bool result);

Delete

Delete with name

 //Throw exeption if transition not found
stateMachine.DeleteTransition("Transition1");

stateMachine.TryDeleteTransition("Transition1");

Delete with object

//Throw exeption if transition not found
stateMachine.DeleteTransition(transition1);

stateMachine.TryDeleteTransition(transition1);

//Throw exeption if transition already delete from state machine
transition1.Delete();

transition1.TryDelete(out bool result);

Entry

Triggered after invoke transition. You can set many action for one state, but transition will be invoke that was called last

Action Syntax

Read about action parameters

 void ActionOnEtnry(State state, Dictionary<string, object> parameters)
 {
  //you need invoke transition in entry or exit action, differently work state machine will be end
  state.StateMachine.InvokeTransition("Transition1");
 }

Add action

 //you can set action with add. Throw exeption if ActionOnEtnry is null
 State state1 = stateMachine.AddState("State1", actionOnEntry: ActionOnEtnry);

 //you can set action after add. Throw exeption if  ActionOnEtnry is null
 State state1 = stateMachine.AddState("State1").OnEntry(ActionOnEtnry);

 //Throw exeption ActionOnEtnry is null
 state1.OnEntry(ActionOnEtnry); 
  

Exit

Triggered after entry to state. You can set many action for one state, but transition will be invoke that was called last

Action Syntax

Read about action parameters

 void ActionOnExit(State state, Dictionary<string, object> parameters)
 {
  //you need invoke transition in entry or exit action, differently work state machine will be end
  state.StateMachine.InvokeTransition("Transition1");
 }

Add action

 //you can set action with add. Throw exeption if ActionOnExitis null
 State state1 = stateMachine.AddState("State1", actionOnExit: ActionOnExit);

 //you can set action after add. Throw exeption if  ActionOnExitis null
 State state1 = stateMachine.AddState("State1").OnExit(ActionOnExit);

 //Throw exeption ActionOnExitis null
 state1.OnExit(ActionOnExit); 
  
Clone this wiki locally