private double getAverageDefensesDamaged(int teamNumber) { List <HelperDataStructures.MatchData2016> seasonData = HelperDataStructures.ReadObjectFromFile <List <HelperDataStructures.MatchData2016> >("seasonMatchData.bin"); List <HelperDataStructures.MatchData2016> teamSeasonData = seasonData.FindAll(i => i.result.teams.Find(t => t.teamNumber == teamNumber) != null); double defensesDamaged = 0; double totalMatches = 0; foreach (HelperDataStructures.MatchData2016 m in teamSeasonData) { FRCApi.AllianceScoreDetails2016 asd; if (m.result.teams.Find(i => i.teamNumber == teamNumber).station.ToLower().Contains("red")) { asd = m.details.alliances.Find(a => a.alliance.ToLower().Contains("red")); } else { asd = m.details.alliances.Find(a => a.alliance.ToLower().Contains("blue")); } defensesDamaged += (asd.position1crossings == 2) ? 1 : 0; defensesDamaged += (asd.position2crossings == 2) ? 1 : 0; defensesDamaged += (asd.position3crossings == 2) ? 1 : 0; defensesDamaged += (asd.position4crossings == 2) ? 1 : 0; defensesDamaged += (asd.position5crossings == 2) ? 1 : 0; totalMatches += 1; } double avg = defensesDamaged / totalMatches; return(avg); }
private double getAverageBouldersScored(int teamNumber) { List <HelperDataStructures.MatchData2016> seasonData = HelperDataStructures.ReadObjectFromFile <List <HelperDataStructures.MatchData2016> >("seasonMatchData.bin"); List <HelperDataStructures.MatchData2016> teamSeasonData = seasonData.FindAll(i => i.result.teams.Find(t => t.teamNumber == teamNumber) != null); double bouldersScored = 0; double totalMatches = 0; foreach (HelperDataStructures.MatchData2016 m in teamSeasonData) { FRCApi.AllianceScoreDetails2016 asd; if (m.result.teams.Find(i => i.teamNumber == teamNumber).station.ToLower().Contains("red")) { asd = m.details.alliances.Find(a => a.alliance.ToLower().Contains("red")); } else { asd = m.details.alliances.Find(a => a.alliance.ToLower().Contains("blue")); } bouldersScored += asd.autoBouldersHigh; bouldersScored += asd.autoBouldersLow; bouldersScored += asd.teleopBouldersHigh; bouldersScored += asd.teleopBouldersLow; totalMatches += 1; } double avg = bouldersScored / totalMatches; return(avg); }
private void updateMainDGVs(List <double> redZoneScores) { foreach (DataGridView d in mainScreenDGVs) { d.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; d.AutoResizeColumns(); foreach (DataGridViewColumn column in d.Columns) { if (column.Name.Contains("Avg") || column.Name.Contains("Score")) { column.DefaultCellStyle.Format = "n2"; column.ValueType = typeof(double); } d.Columns[column.Name].SortMode = DataGridViewColumnSortMode.Automatic; } double maxRZS = redZoneScores.Max(); double minRZS = redZoneScores.Min(); double rzsRange = maxRZS - minRZS; float maxColorCorrectionFactor = 1.0f; foreach (DataGridViewRow row in d.Rows) { double rzs = Convert.ToDouble(row.Cells["RedZoneScore"].Value); if (rzs > 1) { float correctionFactor = 0f; correctionFactor = (float)((maxRZS - rzs) / rzsRange) * maxColorCorrectionFactor; row.DefaultCellStyle.BackColor = HelperDataStructures.ligtenColor(Color.LightBlue, correctionFactor); } } //d.Sort(d.Columns["RedZoneScore"], ListSortDirection.Descending); } }
private void updateOPRDataButton_Click(object sender, EventArgs e) { int year = Properties.Settings.Default.selectedYear; List <TBAApi.TBAEvent> tbaEvents = tbaApi.getEventsByYear(year); List <HelperDataStructures.TeamEventStats> allStats = new List <HelperDataStructures.TeamEventStats>(); allStats.Clear(); foreach (TBAApi.TBAEvent evt in tbaEvents) { if (Convert.ToBoolean(evt.official)) { TBAApi.EventStats stats = tbaApi.getEventStats(year, evt.event_code); if (stats != null) { foreach (KeyValuePair <string, string> entry in stats.oprs) { HelperDataStructures.TeamEventStats teamStat = new HelperDataStructures.TeamEventStats(Convert.ToInt16(entry.Key), Convert.ToDateTime(evt.end_date), Convert.ToDouble(entry.Value), Convert.ToDouble(stats.dprs[entry.Key]), Convert.ToDouble(stats.ccwms[entry.Key])); allStats.Add(teamStat); // do something with entry.Value or entry.Key } } } } //when you're done, write it to a file so we don't have to do this every time HelperDataStructures.WriteObjectToFile <List <HelperDataStructures.TeamEventStats> >("allStats.bin", allStats); }
private void refreshEventsListButton_Click(object sender, EventArgs e) { //get all events for the year int year = Properties.Settings.Default.selectedYear; events = frcApi.getEvents(year); HelperDataStructures.WriteObjectToFile <List <FRCApi.Event> >("frcEvents.bin", events); }
public bool saveRequestTimes() { try { HelperDataStructures.WriteObjectToFile <Dictionary <string, DateTime> >("requestTimes.bin", requestTimesDict); return(true); } catch (Exception e) { Console.WriteLine(e.Message); return(false); } }
public bool loadRequestTimes() { try { this.requestTimesDict = HelperDataStructures.ReadObjectFromFile <Dictionary <string, DateTime> >("requestTimes.bin"); return(true); } catch (Exception e) { Console.WriteLine(e.Message); return(false); } }
/// <summary> /// Gets the maximum OPR among all teams at all events on the given alliance /// </summary> /// <param name="alliance"> either "red" or "blue"</param> /// <param name="match">a SubdivisionBestMatch</param> /// <returns>a double representing the maximum OPR</returns> private double getTotalOPR(string alliance, FIRSTRowMatch match) { List <HelperDataStructures.TeamEventStats> allStats = HelperDataStructures.ReadObjectFromFile <List <HelperDataStructures.TeamEventStats> >("allStats.bin"); List <HelperDataStructures.TeamEventStats> allianceStats = new List <HelperDataStructures.TeamEventStats>(); foreach (FRCApi.ScheduleTeam s in match.Teams) { List <HelperDataStructures.TeamEventStats> stats = allStats.FindAll(i => i.Team == s.teamNumber); if (s.station.ToLower().Contains(alliance.ToLower())) { allianceStats.Add(stats.MaxBy(x => x.Opr)); } } return(allianceStats.Sum(i => i.Opr)); }
/// <summary> /// Generic API request for generic objects /// </summary> /// <typeparam name="T">Object type to return</typeparam> /// <param name="uri">FRC API endpoint</param> /// <param name="useIfModifiedSince">boolean for whether or not to use the If-Modified-Since header</param> /// <returns></returns> private T handleAPIRequest <T>(string uri, bool useIfModifiedSince = true) { T apiObj; try { if (!System.IO.File.Exists(HelperDataStructures.convertUriToFileName(uri, ".bin"))) { //if there isn't a cached file, we need to force an API update to create one. useIfModifiedSince = false; } string api_response = sendAndGetRawResponse(uri, useIfModifiedSince); if (api_response != null) { apiObj = JsonConvert.DeserializeObject <T>(api_response); HelperDataStructures.WriteObjectToFile <T>(HelperDataStructures.convertUriToFileName(uri, ".bin"), apiObj); return(apiObj); } else { return(default(T)); } } catch (WebException ex) { if (((HttpWebResponse)((WebException)ex.InnerException).Response).StatusCode == HttpStatusCode.NotModified) { //no changes were made, so load from cache try { apiObj = HelperDataStructures.ReadObjectFromFile <T>(HelperDataStructures.convertUriToFileName(uri, ".bin")); return(apiObj); } catch (System.IO.FileNotFoundException fnfe) { throw new Exception("No cached object found.", fnfe); } } else { throw ex; } } }
private void SettingsForm_Load(object sender, EventArgs e) { eventCodesBox.Text = Properties.Settings.Default.eventCodesString; yearBox.Value = Properties.Settings.Default.selectedYear; events = HelperDataStructures.ReadObjectFromFile <List <FRCApi.Event> >("events.bin"); events = events.OrderBy(o => o.dateStart).ToList(); var autoComplete = new AutoCompleteStringCollection(); string[] eventNames = this.events.Select(x => x.name).ToArray(); autoComplete.AddRange(eventNames); /* * foreach (string s in eventNames) * { * Console.WriteLine("Adding autocomplete: " + s); * } * */ eventNameBox.AutoCompleteCustomSource = autoComplete; }
private void refreshSeasonDataButton_Click(object sender, EventArgs e) { //get all events for the year int year = Properties.Settings.Default.selectedYear; events = frcApi.getEvents(year, !forceFullUpdateCheckBox.Checked); HelperDataStructures.WriteObjectToFile <List <FRCApi.Event> >("frcEvents.bin", events); List <HelperDataStructures.MatchData2016> seasonMatches = new List <HelperDataStructures.MatchData2016>(); foreach (FRCApi.Event evt in events) { if (evt.code.ToLower() == "scmb") { Console.WriteLine("Bleh"); } List <FRCApi.MatchResult> matchResults = frcApi.getMatchResults <FRCApi.MatchResult>(year, evt.code, !forceFullUpdateCheckBox.Checked); if (matchResults != null && matchResults.Count > 0) { List <FRCApi.ScoreDetails2016> matchScoreDetails = frcApi.getScoreDetails <FRCApi.ScoreDetails2016>(year, evt.code, FRCApi.QualificationMatchesString, !forceFullUpdateCheckBox.Checked); List <FRCApi.ScoreDetails2016> playoffScoreDetails = frcApi.getScoreDetails <FRCApi.ScoreDetails2016>(year, evt.code, FRCApi.PlayoffMatchesString, !forceFullUpdateCheckBox.Checked); if (playoffScoreDetails != null) { matchScoreDetails.AddRange(playoffScoreDetails); } if (matchResults != null && matchScoreDetails != null) { for (int i = 0; i < matchResults.Count; i++) { HelperDataStructures.MatchData2016 matchData = new HelperDataStructures.MatchData2016(matchResults[i], matchScoreDetails[i]); seasonMatches.Add(matchData); } } } } HelperDataStructures.WriteObjectToFile <List <HelperDataStructures.MatchData2016> >("seasonMatchData.bin", seasonMatches); HelperDataStructures.WriteObjectToFile <List <FRCApi.Event> >("events.bin", events); }
private void goButton_Click(object sender, EventArgs e) { events = HelperDataStructures.ReadObjectFromFile <List <FRCApi.Event> >("events.bin");//frcApi.getEvents(Properties.Settings.Default.selectedYear);//HelperDataStructures.ReadObjectFromFile<List<FRCApi.Event>>("frcEvents.bin"); //find the desired events string eventCodesString = Properties.Settings.Default.eventCodesString; string[] selectedEventCodes = eventCodesString.Replace(" ", "").Split(','); selectedEvents.Clear(); foreach (string s in selectedEventCodes) { selectedEvents.Add(events.Find(i => i.code == s)); } HelperDataStructures.WriteObjectToFile <List <FRCApi.Event> >("selectedEvents.bin", selectedEvents); //clear out the matches from the last tiem you clicked go matchesList.Clear(); //Add all the matches for now. foreach (FRCApi.Event s in selectedEvents) { string shortName = s.name.Split('-').Last().Replace("Subdivision", "").Replace("Event", ""); //s.Event.name.Replace("FIRST Championship - ", "").Replace(" Subdivision", ""); List <FRCApi.HybridScheduleMatch> schedule = frcApi.getHybridSchedule(Properties.Settings.Default.selectedYear, s.code, "qual"); int redZoneQueueVal = 1; foreach (FRCApi.HybridScheduleMatch m in schedule) { //DateTime compareDate = m.actualStartTime.Date + Properties.Settings.Default.currentTime.TimeOfDay; if (m.actualStartTime == null)//m.actualStartTime > Properties.Settings.Default.currentTime) { matchesList.Add(new FIRSTRowMatch(shortName, m, redZoneQueueVal)); redZoneQueueVal++; } } } matchesList = matchesList.OrderBy(i => i.M).ToList(); int closestMatch = matchesList.First().M; List <double> redZoneScores = new List <double>(); foreach (FIRSTRowMatch frm in matchesList) { // we don't care about matches that are really far out, so don't bother calculating stuff for them. if (frm.QNum < (closestMatch + 10)) { frm.Blue1AvgDefensesDamaged = getAverageDefensesDamaged((int)frm.Teams.Find(i => i.station == "Blue1").teamNumber); frm.Blue2AvgDefensesDamaged = getAverageDefensesDamaged((int)frm.Teams.Find(i => i.station == "Blue2").teamNumber); frm.Blue3AvgDefensesDamaged = getAverageDefensesDamaged((int)frm.Teams.Find(i => i.station == "Blue3").teamNumber); frm.Red1AvgDefensesDamaged = getAverageDefensesDamaged((int)frm.Teams.Find(i => i.station == "Red1").teamNumber); frm.Red2AvgDefensesDamaged = getAverageDefensesDamaged((int)frm.Teams.Find(i => i.station == "Red2").teamNumber); frm.Red3AvgDefensesDamaged = getAverageDefensesDamaged((int)frm.Teams.Find(i => i.station == "Red3").teamNumber); frm.Blue1AvgBoulders = getAverageBouldersScored((int)frm.Teams.Find(i => i.station == "Blue1").teamNumber); frm.Blue2AvgBoulders = getAverageBouldersScored((int)frm.Teams.Find(i => i.station == "Blue2").teamNumber); frm.Blue3AvgBoulders = getAverageBouldersScored((int)frm.Teams.Find(i => i.station == "Blue3").teamNumber); frm.Red1AvgBoulders = getAverageBouldersScored((int)frm.Teams.Find(i => i.station == "Red1").teamNumber); frm.Red2AvgBoulders = getAverageBouldersScored((int)frm.Teams.Find(i => i.station == "Red2").teamNumber); frm.Red3AvgBoulders = getAverageBouldersScored((int)frm.Teams.Find(i => i.station == "Red3").teamNumber); //frm.RedMaxOPR = getMaxOPR("red", frm); //frm.BlueMaxOPR = getMaxOPR("blue", frm); //frm.RedTotalOPR = getTotalOPR("red", frm); //frm.BlueTotalOPR = getTotalOPR("blue", frm); frm.calculateRedZoneScore(); redZoneScores.Add(frm.RedZoneScore); } } matchesList = matchesList.OrderBy(i => i.QNum).ThenByDescending(i => i.RedZoneScore).ToList(); currentMatchesDGV.DataSource = matchesList; //resize and sort all DGVs by default. updateMainDGVs(redZoneScores); }