예제 #1
0
        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}");
                }
            }
        }
예제 #2
0
파일: RaceData.cs 프로젝트: at-besa/hurace
        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));
        }