Example #1
0
 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);
 }
Example #2
0
        /// <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);
            }
            }
        }
Example #3
0
 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());
     }
 }
Example #4
0
        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 + " 的引导数据,配错了?");
                            }
                        }
                    }
                }
            }
        }