/// <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); }
/// <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); } } }
//初始化实体(所有的实体生成都会走) 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++; }
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); }
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); }
public void AddEntity(int decId, EntityWorkData workData) { lock (lockObj) { server.AddDecisionEntity(decId, workData); } }
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); }
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); } } } }
public void RemoveWorkData(EntityWorkData workData) { if (HandleList.Contains(workData)) { HandleList.Remove(workData); Tree.Transition(workData); } }
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); }
/// <summary> /// 添加工作(现在不允许重复添加) /// </summary> public void AddWorkData(EntityWorkData workData) { if (HandleList.Contains(workData)) { return; } HandleList.Add(workData); }
public void AddEntityWorkData(int entityId, EntityWorkData data) { if (EntityWorkDataDict.ContainsKey(entityId)) { return; } EntityWorkDataDict.Add(entityId, data); }
/// <summary> /// 添加决策实体 /// </summary> public void AddEntity(EntityWorkData workData) { if (EntityList.Contains(workData)) { return; } EntityList.Add(workData); }
/// <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); }
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); }
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()); }
protected override int OnRunning(NodeData wData) { EntityWorkData workData = wData as EntityWorkData; if (workData.CurrReqId == LCECS.RequestId.StopBev) { return(NodeState.EXECUTING); } return(NodeState.FINISHED); }
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(); }
/// <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); }
/// <summary> /// 删除工作(在新的行为过来前,删除) /// </summary> public void RemoveWorkData(EntityWorkData workData) { if (!HandleList.Contains(workData)) { return; } //清理 Tree.Transition(workData); HandleList.Remove(workData); }
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); }
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); }
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(); }
private void OnBehaviorFinish(EntityWorkData workData) { if (!HandleList.Contains(workData)) { return; } workData.ChangeRequestId(RequestId.None); //清理 Tree.Transition(workData); HandleList.Remove(workData); }
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); }
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(); }
/// <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; } } }
/// <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); }
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; }); } }
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(); }