public virtual bool TryGetLayerTypeAction(EGuideActionLayerType _eLayerType, out TBTAction _selector) { for (int i = 0; i < GetChildCount(); ++i) { _selector = GetChild <TBTAction>(i); if (_selector != null) { if (_eLayerType == EGuideActionLayerType.Sequence && _selector is TBTActionSequence) { return(true); } else if (_eLayerType == EGuideActionLayerType.Parallel && _selector is TBTActionParallel) { return(true); } else if (_eLayerType == EGuideActionLayerType.Selector && _selector is TBTActionPrioritizedSelector) { return(true); } else if (_eLayerType == EGuideActionLayerType.LogicSequence && _selector is GuideLogicSequence) { return(true); } } } _selector = null; return(false); }
/// <summary> /// 只用于创建动态引导的根节点 /// </summary> /// <param name="_eLayerType"></param> /// <returns></returns> protected IGuideDynamicRoot CreateDynamicRoot(EGuideActionLayerType _eLayerType) { switch (_eLayerType) { case EGuideActionLayerType.Sequence: return(new GuideDynamicRoot_Sequence()); case EGuideActionLayerType.Parallel: return(new GuideDynamicRoot_ParallelOr()); default: { Trace.LogWarning("当前没有:" + _eLayerType + "类型的动态父节点可创建"); return(null); } } }
protected TBTAction CreateLayerTypeAction(EGuideActionLayerType _eLayerType) { if (_eLayerType == EGuideActionLayerType.LogicSequence) { return(new GuideLogicSequence()); } else if (_eLayerType == EGuideActionLayerType.Selector) { return(new GuideNodeDataSelector());//new TBTActionPrioritizedSelector(); } else if (_eLayerType == EGuideActionLayerType.Parallel) { return(new GuideDynamicRoot_ParallelOr()); } else //(_eLayerType == EGuideActionLayerType.Sequence) { return(new TBTActionSequence()); } }
public void CreateNewDynamicGuideRoot(TBTWorkingData wData) { if (m_GuideDynamicRoot == null) { GuideWorkingData data = wData as GuideWorkingData; if (data != null && data.GuideDynamicBB != null) { int GuideStateID = data.GuideStateBB.GetValue <int>(EGuideStateBBKey.GuideStateID, -1); SSchemeGuideStateData stateData = GetGuideStateData(GuideStateID); if (stateData != null) { m_GuideDynamicRoot = CreateDynamicRoot(stateData.GuideRootType); for (int j = 0; j < stateData.GuideNodeIDList.Count; ++j) { EGuideNodeID guideNodeID = (EGuideNodeID)stateData.GuideNodeIDList[j]; SSchemeGuideNodeData guideNodeData = null; if (dicGuideConfigTable.TryGetValue(guideNodeID, out guideNodeData)) { //先根据引导节点需要挂接的父节点类型处理 EGuideActionLayerType layerType = (EGuideActionLayerType)guideNodeData.nGuideActionLayerType; TBTAction layerTypeAction = null; if (!m_GuideDynamicRoot.TryGetLayerTypeAction(layerType, out layerTypeAction)) { layerTypeAction = CreateLayerTypeAction(layerType); m_GuideDynamicRoot.AddChild(layerTypeAction); } layerTypeAction.AddChild(getNodeDataInstance(guideNodeID)); } else { Trace.LogWarning("没有引导ID为:" + guideNodeID + " 的引导数据,配错了?"); } } } } } }