示例#1
0
        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);
        }
示例#2
0
        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);
                    }
                }
            }
        }
示例#3
0
        public EWorkflowStatus OnUpdate(float deltaTime, out EWorkflowEndReason lastReason)
        {
            DebugUtility.AssertFormat(mLastStatus == EWorkflowStatus.Running, "The status is not running.");

            UpdateCurrent(deltaTime, out lastReason);
            DoNext();
            return(mLastStatus);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        protected virtual EWorkflowStatus DoUpdate(float deltaTime, out EWorkflowEndReason reason)
        {
            reason = EWorkflowEndReason.Success;

            return(EWorkflowStatus.Done);
        }
示例#8
0
 protected virtual void OnStop(EWorkflowEndReason reason)
 {
 }
示例#9
0
 public void End(EWorkflowEndReason reason)
 {
     mStatus     = EWorkflowStatus.Done;
     mLastReason = reason;
     OnStop(reason);
 }
示例#10
0
 public virtual EWorkflowStatus Begin(ref EWorkflowEndReason lastFlowReason)
 {
     return(EWorkflowStatus.Running);
 }
示例#11
0
 public virtual bool ToContinueWorkflow(EWorkflowEndReason lastEndReason)
 {
     return(lastEndReason != EWorkflowEndReason.Failure);
 }
示例#12
0
 public void End(EWorkflowEndReason reason)
 {
 }