private void HandleOutgoingFleets() { foreach (var fleetCommand in FleetCommands) { var from = Planets.FirstOrDefault(p => p.ID == fleetCommand.SourcePlanetID); if (from == null) { var bot = Bots.First(b => b.ID == fleetCommand.PlayerId); Disqualified = new Disqualified(bot, $"Tried to send units from a non-existent planet: {fleetCommand.SourcePlanetID}"); return; } if (from.OwnerID != fleetCommand.PlayerId) { var bot = Bots.First(b => b.ID == fleetCommand.PlayerId); var owner = from.OwnerID == 0 ? "neutral" : "enemy"; Disqualified = new Disqualified(bot, $"Tried to send units from a planet not owned: {fleetCommand.SourcePlanetID}, owner was {owner}"); return; } } var mergedFleetCommands = MergeFleetCommands(FleetCommands); foreach (var fleetCommand in mergedFleetCommands) { if (fleetCommand.NumberOfUnits <= 0) { continue; } var from = Planets.First(p => p.ID == fleetCommand.SourcePlanetID); var to = Planets.First(p => p.ID == fleetCommand.DestinationPlanetID); if (from.NumberOfShips > fleetCommand.NumberOfUnits) { Fleets.Add(new Fleet { DestinationPlanet = to, ID = _fleetId++, NumberOfShips = fleetCommand.NumberOfUnits, OwnerID = from.OwnerID, SourcePlanet = from, Position = from.Position, TicksToDestination = (int)Math.Ceiling(from.Position.Distance(to.Position) / (double)PixelsPerTick) }); from.NumberOfShips -= fleetCommand.NumberOfUnits; } else { var bot = Bots.First(b => b.ID == fleetCommand.PlayerId); Disqualified = new Disqualified(bot, $"Tried to send too many units: {fleetCommand.NumberOfUnits} (had only {from.NumberOfShips}) from planet: {fleetCommand.SourcePlanetID}"); } } }
public int CompareTo(RaceData other) { if (ReferenceEquals(this, other)) { return(0); } if (ReferenceEquals(null, other)) { return(1); } var idComparison = Id.CompareTo(other.Id); if (idComparison != 0) { return(idComparison); } var raceIdComparison = RaceId.CompareTo(other.RaceId); if (raceIdComparison != 0) { return(raceIdComparison); } var skierIdComparison = SkierId.CompareTo(other.SkierId); if (skierIdComparison != 0) { return(skierIdComparison); } var disqualifiedComparison = Disqualified.CompareTo(other.Disqualified); if (disqualifiedComparison != 0) { return(disqualifiedComparison); } var runningComparison = Running.CompareTo(other.Running); if (runningComparison != 0) { return(runningComparison); } var blockedComparison = Blocked.CompareTo(other.Blocked); if (blockedComparison != 0) { return(blockedComparison); } return(Finished.CompareTo(other.Finished)); }