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); }
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); }
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); }
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); }