コード例 #1
0
        public static void StartRace(int tournamentID, int raceNum)
        {
            IRlmRepository repo = RepositoryManager.GetDefaultRepository();

            lock (_lock)
            {
                Tournament tournament = repo.LoadTournament(tournamentID);
                Race       race       = tournament.RaceData.Where(r => r.RaceNumber == raceNum).Single();
                tournament.CurrentRace = raceNum;
                foreach (LaneAssignment assignment in race.LaneAssignmentData)
                {
                    assignment.ElapsedTime = 0;
                    assignment.Points      = 0;
                    assignment.Position    = 0;
                    assignment.ScaleSpeed  = 0.0;
                }
                race.State = RaceState.Racing;
                repo.SaveTournament(tournament);
            }

            //RacesUpdated?.Invoke(tournamentID, new RacesUpdatedEventArgs(GetRaces(tournamentID)));
            RaceUpdated?.Invoke(tournamentID, new RaceUpdatedEventArgs(GetCurrentRace(tournamentID)));
            //NextRacesUpdated?.Invoke(tournamentID, new NextRacesUpdatedEventArgs(GetNextRaces(tournamentID)));

            RaceMonitor.LaneResultAdded += RaceMonitor_LaneResultAdded;
            RaceMonitor.Monitor(TournamentManager.ComPort, TournamentManager.BaudRate, tournamentID, raceNum, TournamentManager.Simulate);
        }
コード例 #2
0
        public static void RaceMonitor_LaneResultAdded(LaneResultEventArgs e)
        {
            UpdateRaceTime(e.TournamentID, e.RaceNum, e.LaneNum, e.Time);

            //RacesUpdated?.Invoke(e.TournamentID, new RacesUpdatedEventArgs(GetRaces(e.TournamentID)));
            RaceUpdated?.Invoke(e.TournamentID, new RaceUpdatedEventArgs(GetCurrentRace(e.TournamentID)));
            StandingsUpdated?.Invoke(e.TournamentID, new StandingsUpdatedEventArgs(GetStandings(e.TournamentID)));
        }
コード例 #3
0
        public static void StopRace(int tournamentID, int raceNum)
        {
            RaceMonitor.Stop();
            RaceMonitor.LaneResultAdded -= RaceMonitor_LaneResultAdded;

            IRlmRepository repo = RepositoryManager.GetDefaultRepository();

            lock (_lock)
            {
                Tournament tournament = repo.LoadTournament(tournamentID);
                Race       race       = tournament.RaceData.Where(r => r.RaceNumber == raceNum).Single();
                tournament.CurrentRace = raceNum;
                race.State             = RaceState.Done;
                repo.SaveTournament(tournament);
            }

            //RacesUpdated?.Invoke(tournamentID, new RacesUpdatedEventArgs(GetRaces(tournamentID)));
            RaceUpdated?.Invoke(tournamentID, new RaceUpdatedEventArgs(GetCurrentRace(tournamentID)));
            //NextRacesUpdated?.Invoke(tournamentID, new NextRacesUpdatedEventArgs(GetNextRaces(tournamentID)));
        }
コード例 #4
0
        public static IRace UpdateRace(int tournamentID, IRace race)
        {
            IRlmRepository repo        = RepositoryManager.GetDefaultRepository();
            Race           updatedRace = null;

            lock (_lock)
            {
                Tournament tournament = repo.LoadTournament(tournamentID);

                updatedRace = tournament.RaceData.Where(r => r.RaceNumber == race.RaceNumber).Single();

                if (updatedRace.LaneAssignmentData.Count != race.LaneAssignments.Count())
                {
                    throw new ArgumentException("Races do not have the same number of lane assignments");
                }

                updatedRace.State = race.State;

                ILaneAssignment[] laneAssignments = race.LaneAssignments.ToArray();
                for (int i = 0; i < updatedRace.LaneAssignmentData.Count; i++)
                {
                    LaneAssignment  to   = updatedRace.LaneAssignmentData[i];
                    ILaneAssignment from = laneAssignments[i];
                    to.ElapsedTime = from.ElapsedTime;
                    to.Points      = from.Points;
                    to.Position    = from.Position;
                }

                repo.SaveTournament(tournament);
            }

            //RacesUpdated?.Invoke(tournamentID, new RacesUpdatedEventArgs(GetRaces(tournamentID)));
            RaceUpdated?.Invoke(tournamentID, new RaceUpdatedEventArgs(updatedRace));
            //NextRacesUpdated?.Invoke(tournamentID, new NextRacesUpdatedEventArgs(GetNextRaces(tournamentID)));
            StandingsUpdated?.Invoke(tournamentID, new StandingsUpdatedEventArgs(GetStandings(tournamentID)));

            return(updatedRace);
        }