Esempio n. 1
0
        public override EStatusBTRunning OnTick()
        {
            EStatusBTRunning status = EStatusBTRunning.Finish;

            if (m_Status == EStatusNodeTerminal.Ready)
            {
                OnEnter();
                m_needExit = true;
                m_Status   = EStatusNodeTerminal.Running;
                SetActiveNode(this);
            }

            if (m_Status == EStatusNodeTerminal.Running)
            {
                status = OnExecute();
                if (status == EStatusBTRunning.Finish || status == EStatusBTRunning.ErrorTransition)
                {
                    m_Status = EStatusNodeTerminal.Finish;
                }
            }

            if (m_Status == EStatusNodeTerminal.Finish)
            {
                if (m_needExit)
                {
                    OnExit();
                }
                m_needExit = false;
                m_Status   = EStatusNodeTerminal.Ready;
                SetActiveNode(null);
                return(status);
            }

            return(status);
        }
Esempio n. 2
0
        public override EStatusBTRunning OnTick()
        {
            EStatusBTRunning bIsFinish = EStatusBTRunning.Finish;

            if (checkIndex(0))
            {
                Node oBN = m_childNodeList[0];
                bIsFinish = oBN.Tick();

                if (bIsFinish == EStatusBTRunning.Finish)
                {
                    if (m_loopCount != kInfiniteLoop)
                    {
                        // 有限循环
                        ++m_currentCount;
                        if (m_currentCount < m_loopCount) // 作者原版是 ==
                        {
                            bIsFinish = EStatusBTRunning.Executing;
                        }
                    }
                    else
                    {
                        // 无限循环
                        bIsFinish = EStatusBTRunning.Executing;
                    }
                }
            }

            if (bIsFinish != EStatusBTRunning.Executing)
            {
                m_currentCount = 0;
            }

            return(bIsFinish);
        }
Esempio n. 3
0
        public override EStatusBTRunning OnTick()
        {
            EStatusBTRunning bIsFinish = EStatusBTRunning.Finish;

            //First Time
            if (m_currentNodeIndex == BT_InvalidChildNodeIndex)
            {
                m_currentNodeIndex = 0;
            }

            Node child = m_childNodeList[m_currentNodeIndex];

            if (child != null)
            {
                bIsFinish = child.Tick();
            }
            if (bIsFinish == EStatusBTRunning.Finish)
            {
                ++m_currentNodeIndex;
                //sequence is over
                if (m_currentNodeIndex == m_childNodeCount)
                {
                    m_currentNodeIndex = BT_InvalidChildNodeIndex;
                }
                else
                {
                    bIsFinish = EStatusBTRunning.Executing;
                }
            }
            if (bIsFinish == EStatusBTRunning.ErrorTransition)
            {
                m_currentNodeIndex = BT_InvalidChildNodeIndex;
            }
            return(bIsFinish);
        }
Esempio n. 4
0
        public override EStatusBTRunning OnTick()
        {
            EStatusBTRunning status = EStatusBTRunning.Finish;

            // 从cur_index和last_index中选出可用的,赋值给last_index
            if (checkIndex(m_currentSelectIndex))
            {
                if (m_lastSelectIndex != m_currentSelectIndex) //new select result
                {
                    if (checkIndex(m_lastSelectIndex))
                    {
                        Node child = m_childNodeList[m_lastSelectIndex];
                        child.Transition(); //we need transition
                    }

                    m_lastSelectIndex = m_currentSelectIndex;
                }
            }

            if (checkIndex(m_lastSelectIndex))
            {
                //Running node
                Node child = m_childNodeList[m_lastSelectIndex];
                status = child.Tick();
                //clear variable if finish
                if (status == EStatusBTRunning.Finish)
                {
                    m_lastSelectIndex = BT_InvalidChildNodeIndex;
                }
            }

            return(status);
        }
Esempio n. 5
0
        protected virtual EStatusBTRunning OnExecute()
        {
            EStatusBTRunning returnStatus = EStatusBTRunning.Finish;

            if (m_dynamicOnExecute != null)
            {
                returnStatus = m_dynamicOnExecute();
            }

            return(returnStatus);
        }
Esempio n. 6
0
        public override EStatusBTRunning OnTick()
        {
            EStatusBTRunning status = EStatusBTRunning.Finish;

            if (m_isRun)
            {
                status = base.OnTick();
            }

            return(status);
        }