Esempio n. 1
0
        /// <summary>
        /// 恢复实体决策
        /// </summary>
        public static void ResumeEntityDec(this Entity entity)
        {
            EntityWorkData workData = ECSLayerLocate.Info.GetEntityWorkData(entity.Uid);

            workData.ChangeRequestId(RequestId.None);
            ECSLocate.DecCenter.AddEntityDecision(entity.DecGroup, entity.DecTreeId, entity.Uid);
        }
Esempio n. 2
0
 /// <summary>
 /// 执行行为
 /// </summary>
 public void Execute()
 {
     if (tree == null)
     {
         return;
     }
     for (int i = 0; i < HandleList.Count; i++)
     {
         EntityWorkData data = HandleList[i];
         if (tree.Evaluate(data))
         {
             int treeState = tree.Execute(data);
             //节点运行完成
             //工作结束(删除数据)
             if (treeState == NodeState.FINISHED)
             {
                 HandleList.RemoveAt(i);
             }
         }
         else
         {
             tree.Transition(data);
         }
     }
 }
Esempio n. 3
0
        //初始化实体(所有的实体生成都会走)
        private void InitEntity(Entity entity, string entityName)
        {
            //实体数据
            EntityJson entityData = ECSLayerLocate.Info.GetEntityConf(entityName);

            //初始化实体
            entity.Init(EntityId, entityName, entityData.Group);

            //保存
            AddEntity(EntityId, entity);

            //系统检测
            CheckEntityInSystem(entity);

            //创建实体数据流
            EntityWorkData entityWorkData = new EntityWorkData(EntityId, entity);

            entityWorkData.Id = EntityId;
            ECSLayerLocate.Info.AddEntityWorkData(EntityId, entityWorkData);
            ECSLayerLocate.Decision.AddDecisionEntity(entityData.Group, entityWorkData);

            //添加实体全局单一组件
            AddEntityGlobalSingleCom(entityData, entity);

            //Id自增
            EntityId++;
        }
Esempio n. 4
0
        protected override void OnEnter(NodeData wData)
        {
            paramData.SetString(skillId);
            EntityWorkData workData = wData as EntityWorkData;

            LCECS.ECSLayerLocate.Request.PushRequest(workData.MEntity.GetHashCode(), LCECS.RequestId.PushSkill, paramData);
        }
Esempio n. 5
0
        private int Running(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;

            switch (inputCom.CurrAction)
            {
            case InputAction.None:
                break;

            case InputAction.Move:
                break;

            case InputAction.Skill:
                if (workData.CurrReqId == LCECS.RequestId.PushSkill)
                {
                    return(NodeState.EXECUTING);
                }
                else
                {
                    return(NodeState.FINISHED);
                }

            default:
                break;
            }
            return(NodeState.FINISHED);
        }
Esempio n. 6
0
 public void AddEntity(int decId, EntityWorkData workData)
 {
     lock (lockObj)
     {
         server.AddDecisionEntity(decId, workData);
     }
 }
Esempio n. 7
0
        public void AddDecisionEntity(int decId, EntityWorkData workData)
        {
            if (!desDict.ContainsKey(decId))
            {
                return;
            }
            DecisionTree decTree = desDict[decId];

            if (!desDict.ContainsKey(decTree.TreeId))
            {
                desDict.Add(decTree.TreeId, decTree);
            }

            //删除已经存在的
            int entityId = workData.MEntity.GetHashCode();
            List <DecisionTree> trees = DecisionHasEntity(entityId);

            for (int i = 0; i < trees.Count; i++)
            {
                trees[i].RemoveEntity(entityId);
            }

            //加入新的
            decTree.AddEntity(workData);
        }
Esempio n. 8
0
        private void ChangeRequest(EntityWorkData workData, RequestId reqId, ParamData paramData)
        {
            if (workData.CurrReqId == RequestId.None)
            {
                workData.ChangeRequestId(reqId);
                workData.AddParam(paramData);
            }
            else
            {
                int pushSort = GetRequestSort(reqId);
                int curSort  = GetRequestSort(workData.CurrReqId);

                //强制置换(覆盖)
                if (pushSort == ECSDefinition.REForceSwithWeight)
                {
                    workData.ChangeRequestId(reqId);
                    workData.AddParam(paramData);
                }
                else
                {
                    //判断当前的
                    if (pushSort < curSort)
                    {
                        workData.ChangeRequestId(reqId);
                        workData.AddParam(paramData);
                    }
                }
            }
        }
Esempio n. 9
0
 public void RemoveWorkData(EntityWorkData workData)
 {
     if (HandleList.Contains(workData))
     {
         HandleList.Remove(workData);
         Tree.Transition(workData);
     }
 }
Esempio n. 10
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;

            paramData.SetFloat(WanderRange);

            LCECS.ECSLayerLocate.Request.PushRequest(workData.MEntity.GetHashCode(), LCECS.RequestId.Wander, paramData);
        }
Esempio n. 11
0
 /// <summary>
 /// 添加工作(现在不允许重复添加)
 /// </summary>
 public void AddWorkData(EntityWorkData workData)
 {
     if (HandleList.Contains(workData))
     {
         return;
     }
     HandleList.Add(workData);
 }
Esempio n. 12
0
 public void AddEntityWorkData(int entityId, EntityWorkData data)
 {
     if (EntityWorkDataDict.ContainsKey(entityId))
     {
         return;
     }
     EntityWorkDataDict.Add(entityId, data);
 }
Esempio n. 13
0
 /// <summary>
 /// 添加决策实体
 /// </summary>
 public void AddEntity(EntityWorkData workData)
 {
     if (EntityList.Contains(workData))
     {
         return;
     }
     EntityList.Add(workData);
 }
Esempio n. 14
0
        /// <summary>
        /// 放入实体请求
        /// </summary>
        public void PushEntityRequest(int entityId, int reqId)
        {
            //数据
            EntityWorkData workData = ECSLayerLocate.Info.GetEntityWorkData(entityId);

            if (workData == null)
            {
                return;
            }

            //请求
            IEntityRequest pushRequest = GetEntityRequest(reqId);

            //请求不需要处理
            if (pushRequest == null)
            {
                //权重置换规则
                bool bTmpSw = CheckCanSwitch(reqId, ref workData.NextReqId, ref workData.CurrReqId, ref workData.ClearReqId, true);
                if (!bTmpSw)
                {
                    return;
                }
                //执行请求
                ECSLayerLocate.Behavior.PushEntityBev(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.PushEntityBev(workData);
                return;
            }

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

            if (!bSw)
            {
                return;
            }
            //执行请求
            ECSLayerLocate.Behavior.PushEntityBev(workData);
        }
Esempio n. 15
0
        protected override void OnExit(NodeData wData, int runningStatus)
        {
            GazeSurroundData context = GetContext <GazeSurroundData>(wData);

            context.Timer = 0;
            EntityWorkData workData = wData as EntityWorkData;

            workData.ChangeRequestId(LCECS.RequestId.None);
        }
Esempio n. 16
0
        public void CreatePlayerEntity(string entityName, ref GameObject gameObject)
        {
            Entity entity = ECSLocate.ECS.CreateEntity(entityName, ref gameObject);

            playerEntity = entity;
            playerGo     = gameObject;

            playerWorkData = ECSLayerLocate.Info.GetEntityWorkData(entity.GetHashCode());
        }
Esempio n. 17
0
        protected override int OnRunning(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;

            if (workData.CurrReqId == LCECS.RequestId.StopBev)
            {
                return(NodeState.EXECUTING);
            }
            return(NodeState.FINISHED);
        }
Esempio n. 18
0
        protected override void OnExit(NodeData wData, int runningStatus)
        {
            EntityWorkData workData = wData as EntityWorkData;
            //组件
            AnimCom animCom = workData.MEntity.GetCom <AnimCom>();

            animCom.SetDefaultAnim();
            WanderCom wanderCom = workData.MEntity.GetCom <WanderCom>();

            wanderCom.Disable();
        }
Esempio n. 19
0
        /// <summary>
        /// 添加决策实体
        /// </summary>
        public void AddDecisionEntity(int decId, EntityWorkData workData)
        {
            if (!EntityDesDict.ContainsKey(decId))
            {
                ECSLocate.ECSLog.LogR("添加决策实体错误,没有对应决策树>>>>>>>", decId);
                return;
            }
            BaseEntityDecision decision = EntityDesDict[decId];

            decision.AddEntity(workData);
        }
Esempio n. 20
0
        /// <summary>
        /// 删除工作(在新的行为过来前,删除)
        /// </summary>
        public void RemoveWorkData(EntityWorkData workData)
        {
            if (!HandleList.Contains(workData))
            {
                return;
            }

            //清理
            Tree.Transition(workData);
            HandleList.Remove(workData);
        }
Esempio n. 21
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData  = wData as EntityWorkData;
            MapSensorData  mapSensor = ECSLayerLocate.Info.GetWorldInfo <MapSensorData>(WorldInfoKey.MapInfo);

            //发送请求
            ParamData paramData = workData.GetReqParam(EntityReqId.EnemySeekPlayer);

            paramData.SetVect2Int(mapSensor.PlayerMapPos);
            ECSLayerLocate.Request.PushEntityRequest(workData.MEntity.GetHashCode(), EntityReqId.EnemySeekPlayer);
        }
Esempio n. 22
0
        public void PushRequest(int entityId, RequestId reqId, ParamData paramData)
        {
            //数据
            EntityWorkData workData = ECSLayerLocate.Info.GetEntityWorkData(entityId);

            if (workData == null)
            {
                return;
            }

            if (workData.CurrReqId == reqId)
            {
                workData.AddParam(paramData);
                return;
            }

            //请求
            IRequest  pushRequest = GetEntityRequest(reqId);
            RequestId oldReqId    = workData.CurrReqId;

            //请求不需要自身处理
            if (pushRequest == null)
            {
                ChangeRequest(workData, reqId, paramData);
            }
            else
            {
                RequestId selfSwId = reqId;
                //请求内部置换
                int rule = pushRequest.SwitchRequest(reqId, ref selfSwId);
                //只需要自身判断
                if (rule == ECSDefinition.RESwithRuleSelf)
                {
                    if (workData.CurrReqId != selfSwId)
                    {
                        workData.ChangeRequestId(reqId);
                        workData.AddParam(paramData);
                    }
                }
                else
                {
                    //自身判断也需要权重置换规则
                    ChangeRequest(workData, reqId, paramData);
                }
            }

            if (workData.CurrReqId == oldReqId)
            {
                return;
            }

            //执行请求
            ECSLayerLocate.Behavior.ReqBev(workData, oldReqId);
        }
Esempio n. 23
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;
            //参数
            float wanderRange = workData.GetParam().GetFloat();
            //组件
            WanderCom wanderCom = workData.MEntity.GetCom <WanderCom>();

            wanderCom.WanderRange = wanderRange;
            wanderCom.Enable();
        }
Esempio n. 24
0
 private void OnBehaviorFinish(EntityWorkData workData)
 {
     if (!HandleList.Contains(workData))
     {
         return;
     }
     workData.ChangeRequestId(RequestId.None);
     //清理
     Tree.Transition(workData);
     HandleList.Remove(workData);
 }
Esempio n. 25
0
        public override bool OnMakeTrue(NodeData wData)
        {
            EntityWorkData workData    = wData as EntityWorkData;
            EnemyCom       enemyCom    = workData.MEntity.GetCom <EnemyCom>();
            SeekPathCom    seekPathCom = workData.MEntity.GetCom <SeekPathCom>();

            MapSensorData mapSensor = ECSLayerLocate.Info.GetWorldInfo <MapSensorData>(WorldInfoKey.MapInfo);

            bool value = MapHelp.CheckPointInArea(seekPathCom.CurrPos, enemyCom.GuardArea, mapSensor.PlayerMapPos);

            return(value);
        }
Esempio n. 26
0
        protected override void OnExit(NodeData wData, int runningStatus)
        {
            EntityWorkData workData = wData as EntityWorkData;

            //组件
            AnimCom animCom = workData.MEntity.GetCom <AnimCom>();

            animCom.SetDefaultAnim();
            GazeSurroundCom gazeSurroundCom = workData.MEntity.GetCom <GazeSurroundCom>();

            gazeSurroundCom.Disable();
        }
Esempio n. 27
0
 /// <summary>
 /// 删除决策实体
 /// </summary>
 public void RemoveEntity(int entityId)
 {
     for (int i = 0; i < EntityList.Count; i++)
     {
         EntityWorkData workData = EntityList[i];
         if (workData.MEntity.GetHashCode() == entityId)
         {
             EntityList.RemoveAt(i);
             return;
         }
     }
 }
Esempio n. 28
0
 /// <summary>
 /// 获得决策实体
 /// </summary>
 public EntityWorkData GetEntity(int entityId)
 {
     for (int i = 0; i < EntityList.Count; i++)
     {
         EntityWorkData workData = EntityList[i];
         if (workData.MEntity.GetHashCode() == entityId)
         {
             return(workData);
         }
     }
     return(null);
 }
Esempio n. 29
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;
            //参数
            bool    doDash    = workData.GetReqParam(EntityReqId.PlayerMove).GetBool();
            Vector2 inputMove = workData.GetReqParam(LCECS.EntityReqId.PlayerMove).GetVect2();

            //组件
            PlayerCom        playerCom  = workData.MEntity.GetCom <PlayerCom>();
            PlayerSpeedCom   speedCom   = workData.MEntity.GetCom <PlayerSpeedCom>();
            PlayerPhysicsCom physicsCom = workData.MEntity.GetCom <PlayerPhysicsCom>();

            #region 点击加速
            //初始速度
            //speedCom.Speed = speedCom.MinSpeed;
            #endregion

            HandleDashInput(ref doDash, physicsCom, speedCom);
            HandleWallInputMove(ref inputMove, physicsCom, speedCom, playerCom);
            HandleNormalInputMove(ref inputMove, physicsCom, speedCom);

            if (doDash)
            {
                ECSLocate.ECSLog.LogR("请求冲刺》》》", speedCom.DoDash, speedCom.IsDash);
            }
            speedCom.DoDash  = doDash;
            speedCom.UpSpeed = speedCom.MaxUpSpeed * inputMove.y;
            speedCom.Speed   = speedCom.MaxSpeed * inputMove.x;

            #region 点击加速
            // if (inputMove.x>0)
            // {
            //     speedCom.Speed  += speedCom.AddSpeed * inputMove.x;
            //     speedCom.Speed   = speedCom.Speed > speedCom.MaxSpeed ? speedCom.MaxSpeed : speedCom.Speed;
            // }
            #endregion

            //水平速度限制
            speedCom.Speed = speedCom.Speed > speedCom.MaxSpeed ? speedCom.MaxSpeed : speedCom.Speed;

            //请求冲刺
            if (speedCom.DoDash)
            {
                ECSLocate.ECS.SetGlobalSingleComData((EffectCom com) =>
                {
                    com.CurrShowEffectId = 1001;
                    com.EntityId         = workData.Id;
                });
            }
        }
Esempio n. 30
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;
            //参数
            ParamData paramData = workData.GetParam();
            int       gazeUid   = paramData.GetInt();
            Vector2   gazeRange = paramData.GetVect2();
            //组件
            GazeSurroundCom gazeSurroundCom = workData.MEntity.GetCom <GazeSurroundCom>();

            gazeSurroundCom.gazeUid   = gazeUid;
            gazeSurroundCom.gazeRange = gazeRange;
            gazeSurroundCom.Enable();
        }