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(); } }