/// <summary>
        /// Additional loading once deserialization is complete
        /// </summary>
        /// <param name="e">Event to load data from</param>
        public void PostJsonLoading(FrcEvent e)
        {
            BlueAlliance.PostJsonLoading(e);
            RedAlliance.PostJsonLoading(e);

            if (!Pregame)
            {
                foreach (Goal g in Goals)
                {
                    g.PostJsonLoading(e);
                }
            }
        }
        /// <summary>
        /// Gets the defense rating of a team.
        /// </summary>
        /// <param name="team">Team in question</param>
        /// <returns>Defense rating of team</returns>
        public int GetDefense(Team team)
        {
            AllianceColor color = GetTeamColor(team);

            if (color == AllianceColor.Blue)
            {
                AlliancePosition pos = BlueAlliance.GetPositionOf(team);
                return(BlueDefense[pos]);
            }
            else if (color == AllianceColor.Red)
            {
                AlliancePosition pos = RedAlliance.GetPositionOf(team);
                return(RedDefense[pos]);
            }
            else
            {
                Util.DebugLog(LogLevel.Error, "Invalid alliance color: " +
                              color.ToString());
                return(-1);
            }
        }
        /// <summary>
        /// Gets whether a team was functioning properly in this match.
        /// </summary>
        /// <param name="team">Team in question</param>
        /// <returns>True if working, false if malfunctioning</returns>
        public bool GetWorking(Team team)
        {
            AllianceColor color = GetTeamColor(team);

            if (color == AllianceColor.Blue)
            {
                AlliancePosition pos = BlueAlliance.GetPositionOf(team);
                return(BlueWorking[pos]);
            }
            else if (color == AllianceColor.Red)
            {
                AlliancePosition pos = RedAlliance.GetPositionOf(team);
                return(RedWorking[pos]);
            }
            else
            {
                Util.DebugLog(LogLevel.Critical, "Invalid alliance color: " +
                              color.ToString());
                throw new IndexOutOfRangeException("Invalid alliance color: " +
                                                   color.ToString());
            }
        }
        /// <summary>
        /// Get alliance color of a team.
        /// </summary>
        /// <param name="team">Team whose color to get</param>
        /// <returns>Color of team, Indeterminate if team isn't found</returns>
        public AllianceColor GetTeamColor(Team team)
        {
            if (team == null)
            {
                Util.DebugLog(LogLevel.Critical, "Team is null.");
                return(AllianceColor.Indeterminate);
            }

            if (BlueAlliance.Contains(team))
            {
                return(AllianceColor.Blue);
            }
            else if (RedAlliance.Contains(team))
            {
                return(AllianceColor.Red);
            }
            else
            {
                Util.DebugLog(LogLevel.Error, "Neither alliance contains team " +
                              team.Number.ToString());
                return(AllianceColor.Indeterminate);
            }
        }
        public AlliancePosition GetTeamPosition(Team team)
        {
            if (team == null)
            {
                Util.DebugLog(LogLevel.Critical, "Team is null.");
                return(AlliancePosition.A);
            }

            AllianceColor color = GetTeamColor(team);

            if (color == AllianceColor.Blue)
            {
                return(BlueAlliance.GetIndexOf(team));
            }
            else if (color == AllianceColor.Red)
            {
                return(RedAlliance.GetIndexOf(team));
            }
            else
            {
                Util.DebugLog(LogLevel.Error, "Neither alliance contains team.");
                return(AlliancePosition.A);
            }
        }
 public override string ToString()
 {
     return("Match " + Number.ToString() + ": " +
            RedAlliance.ToString() + " vs. " +
            BlueAlliance.ToString());
 }