/// <summary> /// Add a new state /// </summary> /// <param name='cache'> /// If true, state is stored in the StateCache for serialization /// </param> public void AddState(FiniteState state, bool cache) { if(!state){ //Debug.Log("Couldn't add state, null"); return; } if(!TransitionMap.ContainsKey(state)){ TransitionMap.Add(state,new List<ITransitionCommand>()); //Debug.Log("Adding state: " + state.UniqueID); if(cache) { StateTransitionState sts = new StateTransitionState();//ScriptableObject.CreateInstance<StateTransitionState>() as StateTransitionState; sts.StartState = state; StateCache.Add(sts); } } }
/// <summary> /// Map the transitiom from 'fromState' to 'toState'. /// </summary> /// <returns> /// false if there is a transition from 'fromState' matching 'transition', else true; /// </returns> bool MapTransition(FiniteState fromState, ITransitionCommand transition,FiniteState toState,bool cache) { StateTransition st = new StateTransition(fromState,transition); if(StateTransitions.ContainsKey(st)){ return false; } AddState(fromState,cache); AddState(toState,cache); StateTransitions.Add(st,toState); TransitionMap[fromState].Add(transition); if(cache){ StateTransitionState sts = new StateTransitionState();//ScriptableObject.CreateInstance<StateTransitionState>() as StateTransitionState; sts.StartState = fromState; sts.EndState = toState; sts.Transition = transition; StateCache.Add(sts); } return true; }