private EWorkflowStatus UpdateCurrent(float deltaTime, out EWorkflowEndReason lastReason) { DebugUtility.AssertFormat(mLastStatus == EWorkflowStatus.Running, "The status is not [Running]."); DebugUtility.AssertFormat(mLastReason != EWorkflowEndReason.Failure, "The last reason is [Failure]."); EWorkflowStatus status = EWorkflowStatus.Running; lastReason = EWorkflowEndReason.Success; if (currentIndex >= 0 && currentIndex < count) { var current = mWorkflows[currentIndex]; status = current.GetStatus(); if (status == EWorkflowStatus.Running) { status = current.OnUpdate(deltaTime, out lastReason); if (status != EWorkflowStatus.Running) { current.End(lastReason); lastReason = current.GetLastReason(); } } } mLastReason = lastReason; return(status); }
private void DoNext() { // status is the the status of single flow while (mLastStatus != EWorkflowStatus.Running) { currentIndex++; if (currentIndex >= count) { mLastStatus = EWorkflowStatus.Done; mLastReason = EWorkflowEndReason.Success; // reset the index currentIndex = -1; break; } else { var current = mWorkflows[currentIndex]; if (!ToContinueWorkflow(mLastReason)) { break; } mLastStatus = current.Begin(ref mLastReason); if (mLastStatus != EWorkflowStatus.Running) { current.End(mLastReason); } } } }
public virtual EWorkflowStatus Begin(ref EWorkflowEndReason lastReason) { DebugUtility.AssertFormat(count > 0, "The flow queue in manager is empty."); mLastStatus = EWorkflowStatus.Running; mLastReason = EWorkflowEndReason.Success; Next(); lastReason = mLastReason; // return the status of flow manager return(mLastStatus); }
private EWorkflowEndReason EndCurrentFlow(EWorkflowEndReason assumeReason, EWorkflowEndReason contextReason) { EWorkflowEndReason result = assumeReason; if (currentIndex >= 0 && currentIndex < count) { var current = mWorkflows[currentIndex]; EWorkflowStatus status = current.GetStatus(); if (status == EWorkflowStatus.Running) { current.End(contextReason); } result = current.GetLastReason(); } mLastStatus = EWorkflowStatus.Done; mLastReason = result; return(result); }
public EWorkflowStatus OnUpdate(float deltaTime, out EWorkflowEndReason reason) { reason = EWorkflowEndReason.Success; EWorkflowStatus status = mStatus; if (status == EWorkflowStatus.Running) { passed += deltaTime; status = DoUpdate(deltaTime, out reason); if (status != EWorkflowStatus.Done) { if (duration > 0.0f && passed >= duration) { status = EWorkflowStatus.Done; reason = EWorkflowEndReason.Success; } } } return(status); }
public void End(EWorkflowEndReason reason) { mStatus = EWorkflowStatus.Done; mLastReason = reason; OnStop(reason); }