private void TargetQuery(Entity entity, ref CommanderStatus.Component commander, ref CommanderTeam.Component team, ref BaseUnitStatus.Component status, ref UnitActionData action, ref SpatialEntityId entityId) { if (status.State != UnitState.Alive) { return; } if (status.Type != UnitType.Commander) { return; } if (status.Order == OrderType.Idle) { return; } var trans = EntityManager.GetComponentObject <Transform>(entity); var pos = trans.position; applyOrder(status, entityId, pos, action.SightRange, ref commander, ref team); }
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); } }
private void CommanderQuery(Entity entity, ref VirtualArmy.Component army, ref CommanderTeam.Component team, ref BaseUnitStatus.Component status) { if (status.State != UnitState.Alive) { return; } var trans = EntityManager.GetComponentObject <Transform>(entity); var pos = trans.position; var unit = getNearestPlayer(pos, HexDictionary.HexEdgeLength, selfId: null); if (unit == null) { var followers = team.FollowerInfo.Followers; if (army.IsActive && army.SimpleUnits.Count == followers.Count) { SyncTroop(army.SimpleUnits, trans); } else { VirtualizeUnits(ref army, trans, team.FollowerInfo.Followers); } } else { if (army.IsActive) { RealizeUnits(ref army, trans); } else { AlarmUnits(ref army, team.FollowerInfo.Followers); } } }