示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#6
0
 public bool saveRequestTimes()
 {
     try
     {
         HelperDataStructures.WriteObjectToFile <Dictionary <string, DateTime> >("requestTimes.bin", requestTimesDict);
         return(true);
     }
     catch (Exception e) {
         Console.WriteLine(e.Message);
         return(false);
     }
 }
示例#7
0
 public bool loadRequestTimes()
 {
     try
     {
         this.requestTimesDict = HelperDataStructures.ReadObjectFromFile <Dictionary <string, DateTime> >("requestTimes.bin");
         return(true);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         return(false);
     }
 }
示例#8
0
        /// <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));
        }
示例#9
0
        /// <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;
                }
            }
        }
示例#10
0
        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;
        }
示例#11
0
        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);
        }
示例#12
0
        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);
        }