private void TeamQuery(Entity entity, ref CommanderSight.Component sight, ref CommanderTeam.Component team, ref BaseUnitStatus.Component status, ref SpatialEntityId entityId) { if (status.State != UnitState.Alive) { return; } if (UnitUtils.IsOfficer(status.Type) == false) { return; } if (status.Order == OrderType.Idle) { return; } if (status.Rank == 0) { return; } var trans = EntityManager.GetComponentObject <Transform>(entity); var pos = trans.position; team.FollowerInfo.UnderCommanders.Clear(); var rank = status.Rank - 1; var range = RangeDictionary.GetBoidsRange(status.Rank); var allies = getAllyUnits(status.Side, pos, range, allowDead: false, GetSingleUnitTypes(UnitType.Commander)); foreach (var unit in allies) { if (unit.id == entityId.EntityId) { continue; } BaseUnitStatus.Component?sts; if (this.TryGetComponent(unit.id, out sts) == false) { continue; } if (sts.Value.Rank != rank) { continue; } team.FollowerInfo.UnderCommanders.Add(unit.id); } }
protected override void OnUpdate() { if (CheckTime(ref inter) == false) { return; } Entities.With(group).ForEach((Entity entity, ref CommanderAction.Component action, ref CommanderTeam.Component team, ref BaseUnitStatus.Component status, ref BaseUnitTarget.Component tgt, ref SpatialEntityId entityId) => { if (status.State != UnitState.Alive) { return; } if (UnitUtils.IsOfficer(status.Type) == false) { return; } if (!action.IsTarget) { return; } //var trans = EntityManager.GetComponentObject<Transform>(entity); //ApplyOrder(trans.position, status.Side, status.Order, status.Rank, tgt); //switch (status.Order) //{ // case OrderType.Escape: // ProductAlly(trans.position, status.Side, commander, team, entityId, tgt, ref action); // break; // // case OrderType.Organize: // // // break; // // default: // action.ActionType = CommandActionType.None; // break; //} }); }