public void showResult(TrackRecords.TrackRecordList recordListToShow, List <int> recordsToHighlight) { prepareForPanelChange(false); Grid_Content.Children.Add(new TrackRecords.RecordDisplayPanel(recordListToShow, recordsToHighlight)); PanelState = panelState.PostRaceResults; }
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(); } }
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); }
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)); } } } }
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"; }
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); }
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 }