private PlainStateMachine <TState, TTrigger> Build <TState, TTrigger>() { var stateMachine = new PlainStateMachine <TState, TTrigger>(); AddStates(stateMachine); AddTransitionsAndGuardConditions(stateMachine); return(stateMachine); }
private void AddStates <TState, TTrigger>(PlainStateMachine <TState, TTrigger> stateMachine) { if (_states.Count > 0) { for (int i = 0; i < _states.Count; i++) { var current = _states[i]; TState stateId = (TState)current.StateId; IState stateObject = (current.StateObject as IState) ?? new EmptyState(); stateMachine.AddState(stateId, stateObject); if (stateObject is IStateEventHandler eventHandler) { stateMachine.SubscribeEventHandlerTo(stateId, eventHandler); } } stateMachine.InitialState = (TState)InitialStateId; } }
private void AddTransitionsAndGuardConditions <TState, TTrigger>(PlainStateMachine <TState, TTrigger> stateMachine) { if (_transitions.Count > 0) { for (int i = 0; i < _transitions.Count; i++) { var current = _transitions[i]; TState stateFrom = (TState)current.StateFrom; TState stateTo = (TState)current.StateTo; TTrigger trigger = (TTrigger)current.Trigger; var transition = new Transition <TState, TTrigger>(stateFrom, trigger, stateTo); stateMachine.AddTransition(transition); for (int j = 0; j < current.GuardConditions.Length; j++) { stateMachine.AddGuardConditionTo(transition, ScriptableObject.Instantiate(current.GuardConditions[j])); } } } }