public void AttachProcess(Cv_Process process) { lock (m_ProcessLists[m_iCurrentProcessList]) { m_ProcessLists[m_iCurrentProcessList].Add(process); } }
public Cv_Process RemoveChild() { if (Child != null) { Cv_Process child = Child; Child = null; return(child); } return(null); }
public void AttachChild(Cv_Process child) { if (Child != null) { Child.AttachChild(child); } else { Child = child; } }
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)); }
public Cv_Process() { State = Cv_ProcessState.Uninitialized; Child = null; }