Пример #1
0
        public void showResult(TrackRecords.TrackRecordList recordListToShow, List <int> recordsToHighlight)
        {
            prepareForPanelChange(false);

            Grid_Content.Children.Add(new TrackRecords.RecordDisplayPanel(recordListToShow, recordsToHighlight));
            PanelState = panelState.PostRaceResults;
        }
Пример #2
0
        public RecordDisplayPanel()
        {
            InitializeComponent();

            //Only display races in use
            pages = new List <TrackRecordList>();
            icons = new List <BitmapImage>();

            AntPlusRacerConfig cfg = AntPlusRacerConfig.getInstance();
            RecordDatabase     db  = RecordDatabase.getInstance();

            if (cfg.enabledRaceTracks.Count == 0)
            {
                Viewbox vb = new Viewbox();
                vb.Child = new Label()
                {
                    Content = "No races selected for use. Exit and add races to 'UsingRaceTracks' in " + AntPlusRacerConfig.DatabaseName + ".db.xml"
                };
                this.Content = vb;
                return;
            }

            //Get all tracks with records
            foreach (AntPlusRacerConfig.RaceTrack i in cfg.enabledRaceTracks)
            {
                TrackRecordList recordList = db.getTrackRecordList(i.sportType, i.distance);
                if (recordList.trackRecords.Count > 0)
                {
                    pages.Add(recordList);
                }
            }

            if (pages.Count == 0)
            {
                Viewbox vb = new Viewbox();
                vb.Child = new Label()
                {
                    Content = "No records exist in database. After you complete races and save some records, then reload this page to view records."
                };
                this.Content = vb;
                return;
            }

            foreach (TrackRecordList i in pages)
            {
                icons.Add(RacerInfoPanel.getRaceDisplayBitmap(i.sportType));
            }

            pageNum = -1;
            nextPage();

            if (pages.Count > 1)
            {
                pageCycleTimer.Elapsed += new System.Timers.ElapsedEventHandler(pageCycleTimer_Elapsed);
                pageCycleTimer.Start();
            }
        }
Пример #3
0
        public static int saveRacerRecord(TrackRecordList list, RecordData racer)
        {
            int ret = list.addRecord(racer);

            RecordDatabase db        = RecordDatabase.getInstance();
            String         saveError = XmlDatabaser.saveDatabase(RecordDatabase.DatabaseName, db);

            if (saveError != null) //Save succeeded
            {
                MessageBox.Show(saveError, "Ant+ Racer Database Error");
            }

            return(ret);
        }
Пример #4
0
        public RecordDisplayPanel(TrackRecordList recordsToShow, List <int> indicesOfNew)
        {
            InitializeComponent();

            Label_RecordTitle.Content = String.Format("{0:0}m {1}", recordsToShow.trackDistance, recordsToShow.sportType);

            listBox_Records.Items.Clear();

            listBox_Records.Items.Add("       Name                 Time (s) ");
            listBox_Records.Items.Add("-------------------------------------");

            listBox_Records.SelectedIndex = 0;


            int max = 5;

            if (indicesOfNew != null)
            {
                foreach (int i in indicesOfNew)
                {
                    if (i > 4)
                    {
                        --max;
                    }
                }
            }

            for (int i = 0; i < recordsToShow.trackRecords.Count && i < max; ++i)
            {
                listBox_Records.Items.Add(formatRecord(recordsToShow.trackRecords, i));
            }

            if (indicesOfNew != null)
            {
                foreach (int i in indicesOfNew)
                {
                    if (i > 4)
                    {
                        listBox_Records.Items.Add(formatRecord(recordsToShow.trackRecords, i));
                    }
                }
            }
        }
Пример #5
0
        public PostRacePanel(Action <TrackRecordList, int> finishedDisplay, RacerDetails racerDetails)
        {
            InitializeComponent();
            finished   = finishedDisplay;
            racer      = racerDetails;
            recordList = RecordDatabase.getInstance().getTrackRecordList(racer.dataSource.getSportType(), racer.targetValue);
            finished   = finishedDisplay;

            Label_RacerTag.Content = racer.dataSource.getSourceName() + " - " + racer.finishResult.ToString("0.0");

            int i;

            for (i = 0; i < recordList.trackRecords.Count; ++i)
            {
                if (recordList.trackRecords[i].recordValue > racer.finishResult)
                {
                    break;
                }
            }
            Label_ListResultTag.Content = "You placed " + (i + 1) + " out of " + (recordList.trackRecords.Count + 1) + " on the leaderboard";
        }
Пример #6
0
        public TrackRecordList getTrackRecordList(racerSportType sportType, double distance)
        {
            foreach (TrackRecordList i in recordBook)
            {
                if (i.sportType == sportType && i.trackDistance == distance)
                {
                    return(i);
                }
            }

            //Create a new list if there are no matches
            TrackRecordList newRecordList = new TrackRecordList();

            newRecordList.sportType     = sportType;
            newRecordList.trackDistance = distance;
            newRecordList.trackRecords  = new List <RecordData>();

            recordBook.Add(newRecordList);

            return(newRecordList);
        }
Пример #7
0
        private void finishRaceAsync()
        {
            isRaceFinished = true;

            raceTock.Stop();
            if (target_type == targetType.Meters)
            {
                raceTimer.Stop();
            }

            if (!AntPlusRacerConfig.getInstance().keepRecords)
            {
                sleepCheckStop(6000);    //wait longer without records because they won't see the scores again
            }
            else
            {
                //Allow time to view the result before we switch screens
                if (AntPlusRacerConfig.getInstance().fastRecords_noNames)
                {
                    sleepCheckStop(1000);
                }
                else
                {
                    sleepCheckStop(3000);
                }

                //Sort racers by finish result so that the saved indexes from the post racepanel are consistent
                racerDetails.Sort((x, y) => Comparer <Double> .Default.Compare(x.finishResult, y.finishResult));

                //Save the results of any human racers
                List <KeyValuePair <TrackRecords.TrackRecordList, int> > savedRecords = new List <KeyValuePair <TrackRecords.TrackRecordList, int> >();
                System.Threading.AutoResetEvent recordSaveDone = new System.Threading.AutoResetEvent(false);
                foreach (RacerDetails i in racerDetails)
                {
                    if (i.dataSource.isHuman)
                    {
                        if (AntPlusRacerConfig.getInstance().fastRecords_noNames)
                        {
                            i.racerRecordInfo = new TrackRecords.RecordData()
                            {
                                FirstName = i.dataSource.getSourceName()
                            };
                        }

                        if (i.racerRecordInfo != null) //If we have preset data, save the record automatically
                        {
                            i.racerRecordInfo.DataSourceName = i.dataSource.getSourceName();
                            i.racerRecordInfo.recordValue    = i.finishResult;
                            TrackRecords.TrackRecordList list = TrackRecords.RecordDatabase.getInstance().getTrackRecordList(i.dataSource.getSportType(), i.targetValue);
                            int pos = TrackRecords.PostRacePanel.saveRacerRecord(list, i.racerRecordInfo);
                            savedRecords.Add(new KeyValuePair <TrackRecords.TrackRecordList, int>(list, pos));
                        }
                        else
                        {
                            OwningDisplayPanel.Dispatcher.Invoke((Action <RacerDetails, Action <TrackRecords.TrackRecordList, int> >)OwningDisplayPanel.showPostRacePanel,
                                                                 i, new Action <TrackRecords.TrackRecordList, int>(
                                                                     (list, pos) =>
                            {
                                savedRecords.Add(new KeyValuePair <TrackRecords.TrackRecordList, int>(list, pos));
                                recordSaveDone.Set();
                            }));

                            //Sleep until post race panel is done
                            System.Threading.WaitHandle.WaitAny(new System.Threading.WaitHandle[] { cancelAsyncToken.Token.WaitHandle, recordSaveDone });
                        }
                        cancelAsyncToken.Token.ThrowIfCancellationRequested();
                    }
                }

                //Yes, there are simpler ways to correlate the lists. But why not try and learn how to use new things?
                Lookup <TrackRecords.TrackRecordList, int> recordLists = (Lookup <TrackRecords.TrackRecordList, int>)savedRecords.ToLookup(k => k.Key, e => e.Value);
                foreach (IGrouping <TrackRecords.TrackRecordList, int> trackList in recordLists)
                {
                    OwningDisplayPanel.Dispatcher.Invoke((Action <TrackRecords.TrackRecordList, List <int> >)OwningDisplayPanel.showResult, trackList.Key, trackList.ToList());
                    //Wait to view this list for a moment
                    if (AntPlusRacerConfig.getInstance().fastRecords_noNames)
                    {
                        sleepCheckStop(1000);
                    }
                    else
                    {
                        sleepCheckStop(5000);
                    }
                }
            }

            OwningDisplayPanel.Dispatcher.Invoke((Action)OwningDisplayPanel.showRaceFactory);   //Now, back to start a new race
        }