protected override int onUpdate(TBTWorkingData wData)
        {
            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);
            int runningState = TBTRunningStatus.FINISHED;

            // 如果切换节点index了,那么执行转换
            // 那么现在就是上次选择节点和当前节点一致了
            if (thisContext.currentSelectedIndex != thisContext.lastSelectedIndex)
            {
                if (IsIndexValid(thisContext.lastSelectedIndex))
                {
                    TBTAction node = GetChild <TBTAction>(thisContext.lastSelectedIndex);
                    node.Transition(wData);
                }
                thisContext.lastSelectedIndex = thisContext.currentSelectedIndex;
            }
            // 更新当前节点,如果当前节点状态结束,那么设置当前节点为非法
            if (IsIndexValid(thisContext.lastSelectedIndex))
            {
                TBTAction node = GetChild <TBTAction>(thisContext.lastSelectedIndex);
                runningState = node.Update(wData);
                if (TBTRunningStatus.IsFinished(runningState))
                {
                    // 这里应该用Transition
                    thisContext.lastSelectedIndex = -1;
                }
            }
            return(runningState);
        }
Exemplo n.º 2
0
        protected override int onUpdate(BehaviourTreeData wData)
        {
            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);
            int runningState = BehaviourTreeRunningStatus.FINISHED;

            if (thisContext.currentSelectedIndex != thisContext.lastSelectedIndex)
            {
                if (IsIndexValid(thisContext.lastSelectedIndex))
                {
                    BehaviourAction node = GetChild <BehaviourAction>(thisContext.lastSelectedIndex);
                    node.Transition(wData);
                }
                thisContext.lastSelectedIndex = thisContext.currentSelectedIndex;
            }
            if (IsIndexValid(thisContext.lastSelectedIndex))
            {
                BehaviourAction node = GetChild <BehaviourAction>(thisContext.lastSelectedIndex);
                runningState = node.Update(wData);
                if (BehaviourTreeRunningStatus.IsFinished(runningState))
                {
                    thisContext.lastSelectedIndex = -1;
                }
            }
            return(runningState);
        }
        protected override void onTransition(TBTWorkingData wData)
        {
            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);
            TBTAction node = GetChild <TBTAction>(thisContext.lastSelectedIndex);

            if (node != null)
            {
                node.Transition(wData);
            }
            thisContext.lastSelectedIndex = -1;
        }
        protected override bool onEvaluate(TBTWorkingData wData)
        {
            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);

            thisContext.currentSelectedIndex = -1;
            for (int i = 0; i < GetChildCount(); i++)
            {
                TBTAction node = GetChild <TBTAction>(i);
                if (node.Evaluate(wData))
                {
                    thisContext.currentSelectedIndex = i;
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 5
0
        protected override bool onEvaluate(/*in*/ BehaviourTreeData wData)
        {
            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);

            thisContext.currentSelectedIndex = -1;
            int childCount = GetChildCount();

            for (int i = 0; i < childCount; ++i)
            {
                BehaviourAction node = GetChild <BehaviourAction>(i);
                if (node.Evaluate(wData))
                {
                    thisContext.currentSelectedIndex = i;
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 6
0
        protected override bool onEvaluate(/*in*/ TBTWorkingData wData)
        {
            GuideWorkingData gWData      = wData as GuideWorkingData;
            EStage_State     tmpCurState = EStage_State.ESS_NONE;
            int tmpNoviceID = -1;

            if (gWData != null)
            {
                tmpCurState = gWData.GuideStateBB.GetValue <EStage_State>(EGuideStateBBKey.GameStageState, EStage_State.ESS_NONE);
                tmpNoviceID = gWData.GuideStateBB.GetValue <int>(EGuideStateBBKey.PlayerNoviceGuideType, -1);
            }

            if (m_eOldStage != EStage_State.ESS_NONE && m_eOldStage != tmpCurState)
            {
                GuideManager.Instance.DestroyOldDynamicGuideRoot(wData);
            }
            else if (m_eOldStage != EStage_State.ESS_NONE && m_eOldStage == tmpCurState)
            {
                if (tmpNoviceID != -1 && tmpNoviceID != m_nNoviceID)
                {
                    GuideManager.Instance.DestroyOldDynamicGuideRoot(wData);
                }
            }
            m_eOldStage = tmpCurState;
            m_nNoviceID = tmpNoviceID;


            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);

            thisContext.currentSelectedIndex = -1;
            int childCount = GetChildCount();

            for (int i = 0; i < childCount; ++i)
            {
                TBTAction node = GetChild <TBTAction>(i);
                if (node.Evaluate(wData))
                {
                    thisContext.currentSelectedIndex = i;
                    return(true);
                }
            }
            return(false);
        }
        protected override bool onEvaluate(/*in*/ TBTWorkingData wData)
        {
            TBTActionPrioritizedSelectorContext thisContext = getContext <TBTActionPrioritizedSelectorContext>(wData);

            thisContext.currentSelectedIndex = -1;
            int childCount = GetChildCount();

            // 按顺序依次判断所有的子节点,只要有一个子节点满足条件就说明处于这个行为树节点,那么这个父节点也就处于这个状态
            // 并设置当前子节点为父节点的当前index
            for (int i = 0; i < childCount; ++i)
            {
                TBTAction node = GetChild <TBTAction>(i);
                if (node.Evaluate(wData))
                {
                    // 只要一个符合,那么就执行这个
                    thisContext.currentSelectedIndex = i;
                    return(true);
                }
            }
            return(false);
        }