public static List <HeroSettings>[] GetSettings() { // Read hero_settings resource. Each value in array is a line in hero_settings.txt. string[] settings = Properties.Resources.hero_settings.Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.RemoveEmptyEntries); // List of settings for each hero. V +1 due to general settings. List <HeroSettings>[] settinglist = new List <HeroSettings> [Enum.GetNames(typeof(Hero)).Length + 1]; for (int i = 0, heroindex = -1; i < settings.Length; i++) { if (settings[i].Length >= 1) // Make sure line is not empty { if (settings[i][0] == '-') { heroindex++; // Index of hero to add settings to. 0 = General, 1 = Ana, 2 = Bastion...27 = Zenyatta. settinglist[heroindex] = new List <HeroSettings>(); } if (heroindex != -1 && settings[i][0] != '-') { // Add setting to list string[] settingsData = settings[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); HeroSettings add = new HeroSettings( settingsData[0], (SettingType)Enum.Parse(typeof(SettingType), settingsData[1]) ); settinglist[heroindex].Add(add); } } } return(settinglist); }
/// <summary> /// /// </summary> /// <param name="hero">Hero to change settings for. Set to null for general settings.</param> /// <param name="team">Team to change hero settings for.</param> /// <param name="set">Array of settings to change. Must be the same size as setto.</param> /// <param name="setTo">Array to change settings to. Must be the same size as set.</param> /// <exception cref="ArgumentOutOfRangeException">Thrown if <paramref name="team"/> is Spectator or Queue.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="set"/> or <paramref name="setTo"/> is null.</exception> public SetHero(Hero?hero, Team team, string[] set, object[] setTo) { if (Team.HasFlag(Team.Spectator) || Team.HasFlag(Team.Queue)) { throw new ArgumentOutOfRangeException(nameof(team), team, "Team cannot be Spectator or Queue."); } if (set == null) { throw new ArgumentNullException(nameof(set)); } if (setTo == null) { throw new ArgumentNullException(nameof(setTo)); } if (set.Length != setTo.Length) { throw new ArgumentException($"{nameof(set)} and {nameof(setTo)} must be the same length."); } for (int i = 0; i < set.Length; i++) { SettingType?settingType = HeroSettings.GetSettingType(hero, set[i]); // If the setting does not exist. if (settingType == null) { if (hero != null) { throw new InvalidSetheroException($"The setting \"{set[i]}\" does not exist in {hero.ToString()}'s settings."); } else { throw new InvalidSetheroException($"The setting \"{set[i]}\" does not exist in the general settings."); } } // For setting types that require a boolean. if (settingType == SettingType.toggle) { if (setTo[i] is bool == false) { throw new InvalidSetheroException($"The setting \"{set[i]}\" requires a boolean."); } } // For setting types that require an integer. else if (settingType == SettingType.value || settingType == SettingType.dropdown) { if (setTo[i] is int == false) { throw new InvalidSetheroException($"The setting \"{set[i]}\" requires a integer."); } } } Hero = hero; Team = team; Set = set; SetTo = setTo; }