public static void Exec(Node root, IAgent agent, BlackboardMemory workingMemory) { ERunningStatus runningStatus = root.Update(agent, workingMemory); if (runningStatus != ERunningStatus.Executing) { root.Reset(agent, workingMemory); } }
protected override ERunningStatus OnUpdate(IAgent agent, BlackboardMemory workingMemory) { if (OnEvaluate(agent, workingMemory) == false) { return(ERunningStatus.Failed); } ERunningStatus runningStatus = ERunningStatus.Finished; if (m_ActionStatus == ACTION_Ready) { OnEnter(agent, workingMemory); m_ActionStatus = ACTION_Running; } if (m_ActionStatus == ACTION_Running) { runningStatus = OnExecute(agent, workingMemory); } return(runningStatus); }
protected override ERunningStatus OnUpdate(IAgent agent, BlackboardMemory workingMemory) { float rate = workingMemory.GetValue <float>((int)rateType); // TODO Test the certainty rate Node c = rate > 50 || true ? m_Children[0] : m_Children[1]; ERunningStatus runningStatus = c.Update(agent, workingMemory); Node previousNode = m_LastRunningNode; m_LastRunningNode = null; if (runningStatus != ERunningStatus.Failed) { m_LastRunningNode = c; } if (previousNode != m_LastRunningNode && previousNode != null) { previousNode.Reset(agent, workingMemory); } return(runningStatus); }
protected override ERunningStatus OnUpdate(IAgent agent, BlackboardMemory workingMemory) { if (m_Children.Count == 0) { return(ERunningStatus.Finished); } m_RequestFinishedCount = Mathf.Clamp(m_RequestFinishedCount, 1, m_Children.Count); if (m_ChildrenRunning.Count != m_Children.Count) { m_ChildrenRunning.AddRange(Enumerable.Repeat(ERunningStatus.Executing, m_Children.Count)); } int failedCount = 0; int finishedCount = 0; for (int i = 0; i < m_Children.Count; ++i) { ERunningStatus status = m_ChildrenRunning[i]; if (status == ERunningStatus.Executing) { status = m_Children[i].Update(agent, workingMemory); } if (status == ERunningStatus.Finished) { finishedCount++; m_ChildrenRunning[i] = status; if (finishedCount == m_RequestFinishedCount) { return(ERunningStatus.Finished); } } else if (status == ERunningStatus.Failed) { failedCount++; if (failedCount > m_Children.Count - m_RequestFinishedCount) { return(ERunningStatus.Failed); } } } return(ERunningStatus.Executing); }
protected override ERunningStatus OnUpdate(IAgent agent, BlackboardMemory workingMemory) { if (m_Children.Count == 0) { return(ERunningStatus.Finished); } if (m_CurrentNodeIndex < 0) { m_CurrentNodeIndex = 0; } for (int i = m_CurrentNodeIndex; i < m_Children.Count; ++i) { ERunningStatus status = m_Children[i].Update(agent, workingMemory); if (status != ERunningStatus.Finished) { return(status); } m_CurrentNodeIndex++; } return(ERunningStatus.Finished); }
protected override ERunningStatus OnUpdate(IAgent agent, BlackboardMemory workingMemory) { ERunningStatus runningStatus = ERunningStatus.Finished; Node previousNode = m_LastRunningNode; //select running node m_LastRunningNode = null; foreach (Node c in m_Children) { runningStatus = c.Update(agent, workingMemory); if (runningStatus != ERunningStatus.Failed) { m_LastRunningNode = c; break; } } //clear last running node if (previousNode != m_LastRunningNode && previousNode != null) { previousNode.Reset(agent, workingMemory); } return(runningStatus); }
protected override ERunningStatus OnUpdate(IAgent agent, BlackboardMemory workingMemory) { while (true) { ERunningStatus status = Child.Update(agent, workingMemory); if (status == ERunningStatus.Failed) { return(ERunningStatus.Failed); } else if (status == ERunningStatus.Executing) { break; } else { if (++m_RepeatIndex == m_RepeatCount) { return(ERunningStatus.Finished); } Child.Reset(agent, workingMemory); } } return(ERunningStatus.Executing); }