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); }