예제 #1
0
        private void _AddGroup(string folder, string groupName, int rounds, bool showClassStandings = false, string round = "prelim")
        {
            groupName = groupName ?? folder;
            var cars  = CsvParser.ParseArray <Car>(Path.Combine(_baseGroupDirectory, folder, "cars.csv"));
            var races = RaceDefinitionSource.RaceDefinitions(cars.Count, rounds, null);
            var group = new Group {
                Cars = cars.ToArray(), Name = groupName, ShowClassStandings = showClassStandings, Round = round
            };

            _groups.Add(new Tuple <Group, GroupRacesDefinition[]>(group, races.ToArray()));
        }
        private static int BuildTiebreakerRacesForPointLevel(Tournament tournament, string classKey, IEnumerable <CarResult> classGroup, int maxPoints, Group g,
                                                             LaneStat[] laneStats, int byeCounter, string roundName, TournamentBuilder tiebreakerTournamentBuilder, int tiebreakerPlace)
        {
            var carsWithMaxPoints = classGroup.Where(r => r.Points == maxPoints).ToArray();
            var baseGroup         = g.ShowClassStandings ? classKey : g.Name;

            if (carsWithMaxPoints.Count() > 1 && !tournament.Groups.Any(_g => _g.TiebreakGroup == baseGroup && _g.TiebreakerPlace() == tiebreakerPlace))
            {
                int i        = 1;
                var tiedCars =
                    carsWithMaxPoints.Select(
                        c =>
                        new Car
                {
                    Builder = c.Car.Builder,
                    Class   = c.Car.Class,
                    ID      = c.Car.ID,
                    Name    = c.Car.Name,
                    Number  = i++
                }).ToList();
                var raceDef = RaceDefinitionSource.RaceDefinitions(tiedCars.Count(), 1, laneStats);
                while (tiedCars.Count() < 4)
                {
                    byeCounter++;
                    var carId = "BYE" + byeCounter;
                    tiedCars.Add(new Car {
                        Builder = carId, Name = carId, ID = carId, Number = i
                    });
                    i++;
                }
                var ordinal   = tiebreakerPlace == 1 ? "1st" : tiebreakerPlace == 2 ? "2nd" : "3rd";
                var name      = string.Join(" - ", baseGroup.Split('-').First().Trim(), ordinal, roundName);
                var tiedGroup = new Group {
                    Name = name, Cars = tiedCars.ToArray(), Round = roundName, TiebreakGroup = baseGroup
                };
                tiebreakerTournamentBuilder.AddGroup(tiedGroup, raceDef);
            }
            return(byeCounter);
        }
        public static void AddFinalsRaces(this Tournament tournament)
        {
            if (!tournament.Races.All(r => r.IsFinished()) || tournament.Groups.Any(g => g.Name == "Finals"))
            {
                return;
            }
            var finalsCars     = new List <Car>();
            var scoutGroup     = tournament.Groups.First(g => g.Name == "Scouts");
            var resultsByClass = ResultsByClass(tournament, scoutGroup);

            foreach (var classGroup in resultsByClass)
            {
                var firstCar = GetFirstCar(tournament, classGroup);
                if (firstCar == null)
                {
                    return;
                }
                finalsCars.Add(firstCar.Copy());
            }
            for (int i = 0; i < finalsCars.Count; i++)
            {
                finalsCars[i].Number = i + 1;
            }

            var tournamentBuilder = new TournamentBuilder("finals", "");
            var laneStats         = tournament.LaneStats;
            var finalsGroup       = new Group {
                Name = "Finals", Round = "Finals", Cars = finalsCars.ToArray()
            };
            var raceDef = RaceDefinitionSource.RaceDefinitions(finalsCars.Count, 1, laneStats);

            tournamentBuilder.AddGroup(finalsGroup, raceDef);
            var finalsTournament = tournamentBuilder.Build("Finals");

            tournament.AddGroupsAndRaces(finalsTournament.Groups, finalsTournament.Races);
        }