예제 #1
0
 /// <summary>
 /// 执行行为
 /// </summary>
 public void Execute()
 {
     if (tree == null)
     {
         return;
     }
     for (int i = 0; i < HandleList.Count; i++)
     {
         WorldWorkData data = HandleList[i];
         if (tree.Evaluate(data))
         {
             int treeState = tree.Execute(data);
             //节点运行完成
             //工作结束(删除数据)
             if (treeState == NodeState.FINISHED)
             {
                 HandleList.RemoveAt(i);
             }
         }
         else
         {
             tree.Transition(data);
         }
     }
 }
예제 #2
0
 public void AddWorldWorkData(int worldId, WorldWorkData data)
 {
     if (WorldWorkDataDict.ContainsKey(worldId))
     {
         return;
     }
     WorldWorkDataDict.Add(worldId, data);
 }
예제 #3
0
 /// <summary>
 /// 添加决策实体
 /// </summary>
 public void AddWorld(WorldWorkData workData)
 {
     if (WorldList.Contains(workData))
     {
         return;
     }
     WorldList.Add(workData);
 }
예제 #4
0
 /// <summary>
 /// 添加工作(现在不允许重复添加)
 /// </summary>
 public void AddWorkData(WorldWorkData workData)
 {
     if (HandleList.Contains(workData))
     {
         return;
     }
     HandleList.Add(workData);
 }
예제 #5
0
        /// <summary>
        /// 放入世界请求
        /// </summary>
        public void PushWorldRequest(int worldId, int reqId)
        {
            //数据
            WorldWorkData workData = ECSLayerLocate.Info.GetWorldWorkData(worldId);;

            //ECSLayerLocate.Decision.GetWorldWorkData(worldId);
            if (workData == null)
            {
                return;
            }

            //请求
            IWorldRequest pushRequest = GetWorldRequest(reqId);

            if (pushRequest == null)
            {
                //权重置换规则
                bool bTmpSw = CheckCanSwitch(reqId, ref workData.NextReqId, ref workData.CurrReqId, ref workData.ClearReqId, true);
                if (!bTmpSw)
                {
                    return;
                }
                //执行请求
                ECSLayerLocate.Behavior.PushWorldBev(workData);
                return;
            }

            int selfSwId = reqId;
            //请求内部置换
            int rule = pushRequest.SwitchRequest(reqId, ref selfSwId);

            //只需要自身判断
            if (rule == ECSDefinition.RESwithRuleSelf)
            {
                //没有变化
                if (workData.CurrReqId == selfSwId)
                {
                    return;
                }
                workData.ClearReqId = workData.CurrReqId;
                workData.CurrReqId  = selfSwId;

                //执行请求
                ECSLayerLocate.Behavior.PushWorldBev(workData);
                return;
            }

            //权重置换规则
            bool bSw = CheckCanSwitch(reqId, ref workData.NextReqId, ref workData.CurrReqId, ref workData.ClearReqId, false);

            if (!bSw)
            {
                return;
            }
            //执行请求
            ECSLayerLocate.Behavior.PushWorldBev(workData);
        }
예제 #6
0
        /// <summary>
        /// 添加决策世界
        /// </summary>
        public void AddDecisionWorld(int decId, WorldWorkData workData)
        {
            if (!WorldDesDict.ContainsKey(decId))
            {
                return;
            }
            BaseWorldDecision decision = WorldDesDict[decId];

            decision.AddWorld(workData);
        }
예제 #7
0
 /// <summary>
 /// 删除工作(在新的行为过来前,删除)
 /// </summary>
 public void RemoveWorkData(WorldWorkData workData)
 {
     if (!HandleList.Contains(workData))
     {
         return;
     }
     //清理
     Tree.Transition(workData);
     HandleList.Remove(workData);
 }
예제 #8
0
 /// <summary>
 /// 添加决策实体
 /// </summary>
 public void RemoveWorld(int worldId)
 {
     for (int i = 0; i < WorldList.Count; i++)
     {
         WorldWorkData workData = WorldList[i];
         if (workData.Id == worldId)
         {
             WorldList.RemoveAt(i);
             return;
         }
     }
 }
예제 #9
0
 /// <summary>
 /// 获得决策实体
 /// </summary>
 public WorldWorkData GetWorld(int worldId)
 {
     for (int i = 0; i < WorldList.Count; i++)
     {
         WorldWorkData workData = WorldList[i];
         if (workData.Id == worldId)
         {
             return(workData);
         }
     }
     return(null);
 }
예제 #10
0
 /// <summary>
 /// 执行决策
 /// </summary>
 public virtual void Execute()
 {
     for (int i = 0; i < WorldList.Count; i++)
     {
         WorldWorkData workData = WorldList[i];
         if (Tree.Evaluate(workData))
         {
             Tree.Execute(workData);
         }
         else
         {
             Tree.Transition(workData);
         }
     }
 }
예제 #11
0
    /// <summary>
    /// 放入世界行为
    /// </summary>
    public void PushWorldBev(WorldWorkData workData)
    {
        //删除
        BaseWorldBehavior lastBehavior = GetWorldBev(workData.ClearReqId);

        if (lastBehavior != null)
        {
            lastBehavior.RemoveWorkData(workData);
        }

        //添加
        BaseWorldBehavior currBehavior = GetWorldBev(workData.CurrReqId);

        if (currBehavior != null)
        {
            currBehavior.AddWorkData(workData);
        }
    }
예제 #12
0
 public void AddWorldWorkData(int worldId, WorldWorkData data)
 {
     infosCenter.AddWorldWorkData(worldId, data);
 }
예제 #13
0
 public void PushWorldBev(WorldWorkData workData)
 {
     behaviorCenter.PushWorldBev(workData);
 }
예제 #14
0
 public void AddDecisionWorld(WorldDecGroup decId, WorldWorkData workData)
 {
     decisionCenter.AddDecisionWorld((int)decId, workData);
 }