public void Update()
 {
     if (null != this.finiteStateEntity.state && false == this.finiteStateEntity.state.complete)
     {
         if (this.finiteStateEntity.isNewState)
         {
             if (null != this.paramter)
             {
                 this.finiteStateEntity.state.Create(this.paramter);
             }
             else
             {
                 this.finiteStateEntity.state.Create();
             }
             this.finiteStateEntity.isNewState = false;
         }
         if (null != this.finiteStateEntity.state && false == this.finiteStateEntity.state.complete && false == this.finiteStateEntity.state.wait)
         {
             this.finiteStateEntity.state.Update();
         }
     }
     foreach (string key in this.persistentStateList.Keys)
     {
         FiniteState <T> state = this.persistentStateList [key];
         if (false == state.complete)
         {
             state.Update();
         }
     }
 }
 public void Update(string nextStateName, FiniteState <T> nextState)
 {
     if (false == this.currentStateName.Equals(nextStateName))
     {
         this.previousStateName = this.currentStateName;
         this.currentStateName  = nextStateName;
     }
     this.state      = nextState;
     this.isNewState = true;
 }
 public void Play()
 {
     foreach (string key in this.stateList.Keys)
     {
         FiniteState <T> state = this.stateList [key];
         state.wait     = false;
         state.complete = false;
     }
     foreach (string key in this.persistentStateList.Keys)
     {
         FiniteState <T> state = this.persistentStateList [key];
         state.wait     = false;
         state.complete = false;
         state.Create();
     }
 }
        public void Change(string newStateName, Parameter paramter, bool update = false)
        {
            this.paramter = paramter;
            FiniteState <T> nextState = this.Get(newStateName);

            if (null == nextState)
            {
                return;
            }
            this.finiteStateEntity.Update(newStateName, nextState);
            if (false != update)
            {
                this.Update();
            }
            return;
        }
 public bool Add(string stateName, FiniteState <T> state, bool isFirstState = false)
 {
     if (false == state.persistent)
     {
         if (false == this.stateList.ContainsKey(stateName))
         {
             state.owner        = this.owner;
             state.stateMachine = this;
             this.stateList.Add(stateName, state);
             return(true);
         }
     }
     else
     {
         if (false == this.persistentStateList.ContainsKey(stateName))
         {
             state.owner        = this.owner;
             state.stateMachine = this;
             this.persistentStateList.Add(stateName, state);
             return(true);
         }
     }
     return(false);
 }