/// <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;
    }