public void AddState(StatementMachine.StatementMachineInitialize init, StatementMachine.StatementMachineUpdate update, object data)
 {
     StatementMachine.Statement statement = new StatementMachine.Statement();
     statement.isInitialize       = false;
     statement.isFinished         = false;
     statement.groupName          = null;
     statement.startDuration      = 0f;
     statement.data               = data;
     statement.initializeDelegate = init;
     statement.updateDelegate     = update;
     statement.terminateDelegate  = null;
     this._listStateNew.Add(statement);
 }
 public void AddState(StatementMachine.StatementMachineInitialize init, StatementMachine.StatementMachineUpdate update, StatementMachine.StatementMachineTerminate terminate, string groupName, object data, float startDuration)
 {
     StatementMachine.Statement statement = new StatementMachine.Statement();
     statement.isInitialize       = false;
     statement.isFinished         = false;
     statement.groupName          = groupName;
     statement.startDuration      = startDuration;
     statement.data               = data;
     statement.initializeDelegate = init;
     statement.updateDelegate     = update;
     statement.terminateDelegate  = terminate;
     this._listStateNew.Add(statement);
 }
 private void GarbageFinished()
 {
     while (this._stackState.get_Count() > 0)
     {
         StatementMachine.Statement statement = this._stackState.Peek();
         if (!statement.isFinished)
         {
             break;
         }
         if (statement.terminateDelegate != null)
         {
             statement.terminateDelegate(statement.data);
         }
         statement.Release();
         this._stackState.Pop();
     }
 }
 public void OnUpdate(float deltaTime)
 {
     if (this._stackState.get_Count() > 0)
     {
         StatementMachine.Statement statement = this._stackState.Peek();
         if (!statement.isInitialize)
         {
             statement.startDuration -= deltaTime;
             if (statement.startDuration > 0f)
             {
                 return;
             }
             if (statement.initializeDelegate != null)
             {
                 statement.isFinished = statement.initializeDelegate(statement.data);
             }
             statement.isInitialize = true;
         }
         if (statement.updateDelegate != null && !statement.isFinished)
         {
             statement.isFinished = statement.updateDelegate(statement.data);
         }
         else
         {
             statement.isFinished = true;
         }
         this.GarbageFinished();
     }
     if (this._listStateNew.get_Count() > 0)
     {
         StatementMachine.Statement[] array = this._listStateNew.ToArray();
         for (int i = 0; i < array.Length; i++)
         {
             this._stackState.Push(array[i]);
         }
         this._listStateNew.Clear();
     }
 }