Esempio n. 1
0
 public void AttachProcess(Cv_Process process)
 {
     lock (m_ProcessLists[m_iCurrentProcessList])
     {
         m_ProcessLists[m_iCurrentProcessList].Add(process);
     }
 }
Esempio n. 2
0
        public Cv_Process RemoveChild()
        {
            if (Child != null)
            {
                Cv_Process child = Child;
                Child = null;
                return(child);
            }

            return(null);
        }
Esempio n. 3
0
 public void AttachChild(Cv_Process child)
 {
     if (Child != null)
     {
         Child.AttachChild(child);
     }
     else
     {
         Child = child;
     }
 }
Esempio n. 4
0
        internal Tuple <int, int> OnUpdate(float time, float elapsedTime)
        {
            int successCount = 0;
            int failCount    = 0;

            var currUpdatingList = m_iCurrentProcessList;

            m_iCurrentProcessList = ++m_iCurrentProcessList % NUM_LISTS;

            lock (m_ProcessLists[currUpdatingList])
            {
                for (var i = 0; i < m_ProcessLists[currUpdatingList].Count;)
                {
                    Cv_Process currProcess = m_ProcessLists[currUpdatingList][i];

                    if (currProcess.State == Cv_ProcessState.Uninitialized)
                    {
                        currProcess.VOnInitialize();
                    }

                    if (currProcess.State == Cv_ProcessState.Running)
                    {
                        currProcess.VOnUpdate(elapsedTime);
                    }

                    if (currProcess.IsDead)
                    {
                        switch (currProcess.State)
                        {
                        case Cv_ProcessState.Succeeded:
                            currProcess.VOnSuccess();
                            Cv_Process child = currProcess.RemoveChild();
                            if (child != null)
                            {
                                AttachProcess(child);
                            }
                            else
                            {
                                ++successCount;      // only counts if the whole chain completed
                            }
                            break;

                        case Cv_ProcessState.Failed:
                            currProcess.VOnFail();
                            ++failCount;
                            break;

                        case Cv_ProcessState.Aborted:
                            currProcess.VOnAbort();
                            ++failCount;
                            break;
                        }

                        m_ProcessLists[currUpdatingList].Remove(currProcess);
                    }
                    else
                    {
                        i++;
                    }
                }
            }

            return(new Tuple <int, int>(successCount, failCount));
        }
Esempio n. 5
0
 public Cv_Process()
 {
     State = Cv_ProcessState.Uninitialized;
     Child = null;
 }