private void ProcessWaitingTasks(float elapseSeconds, float realElapseSeconds) { LinkedListNode <T> current = m_WaitingTasks.First; while (current != null && m_Agent != null) { T task = current.Value; LinkedListNode <T> next = current.Next; StartTaskStatus status = m_Agent.Start(task); if (status == StartTaskStatus.Done || status == StartTaskStatus.HasToWait || status == StartTaskStatus.UnknownError) { m_Agent.Reset(); } if (status == StartTaskStatus.Done || status == StartTaskStatus.CanResume || status == StartTaskStatus.UnknownError) { m_WaitingTasks.Remove(current); } if (status == StartTaskStatus.Done || status == StartTaskStatus.UnknownError) { ReferencePool.Release(task); } current = next; } }
private void ProcessWaitingTasks(float elapseSeconds, float realElapseSeconds) { LinkedListNode <T> current = m_WaitingTasks.First; while (current != null && FreeAgentCount > 0) { ITaskAgent <T> agent = m_FreeAgents.Pop(); LinkedListNode <ITaskAgent <T> > agentNode = m_WorkingAgents.AddLast(agent); T task = current.Value; LinkedListNode <T> next = current.Next; StartTaskStatus status = agent.Start(task); if (status == StartTaskStatus.Done || status == StartTaskStatus.HasToWait || status == StartTaskStatus.UnknownError) { agent.Reset(); m_FreeAgents.Push(agent); m_WorkingAgents.Remove(agentNode); } if (status == StartTaskStatus.Done || status == StartTaskStatus.CanResume || status == StartTaskStatus.UnknownError) { m_WaitingTasks.Remove(current); } if (status == StartTaskStatus.Done || status == StartTaskStatus.UnknownError) { ReferencePool.Release(task); } current = next; } }
private void ProcessWaitingTasks(float deltaTime, float unscaledDeltaTime) { LinkedListNode <T> current = m_WaitingTasks.First; while (current != null && FreeAgentCount > 0) { ITaskAgent <T> agent = m_FreeAgents.Pop(); LinkedListNode <ITaskAgent <T> > agentNode = m_WorkingAgents.AddLast(agent); LinkedListNode <T> next = current.Next; StartTaskStatus status = agent.StartTask(current.Value); if (status == StartTaskStatus.Done || status == StartTaskStatus.HasToWait || status == StartTaskStatus.UnknownError) { agent.Reset(); m_FreeAgents.Push(agent); m_WorkingAgents.Remove(agentNode); } if (status == StartTaskStatus.Done || status == StartTaskStatus.CanResume || status == StartTaskStatus.UnknownError) { m_WaitingTasks.Remove(current); } current = next; } }