Exemple #1
0
        public static void Exec(Node root, IAgent agent, BlackboardMemory workingMemory)
        {
            ERunningStatus runningStatus = root.Update(agent, workingMemory);

            if (runningStatus != ERunningStatus.Executing)
            {
                root.Reset(agent, workingMemory);
            }
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 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);
 }
Exemple #6
0
        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);
        }
Exemple #7
0
 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);
 }