public void ParseSettings() { //Go through ALL of the headers foreach (var header in settings.Headers) { //Check all thier values foreach (var key in settings[header].Keys) { //if they have THIS Providers SettingsPostfix then deal with it if (key.EndsWith(SettingsPostfix)) { KeyCondition result = new KeyCondition(null); if (Parser.TryParse <KeyCondition>(settings[header][key], ref result)) { //Remove SettingsPostfix from the key //On a unsuccessful Parse, stop this.Add(header + "." + key.Substring(0, key.Length - SettingsPostfix.Length - 1), result); } else { throw new InvalidDataException("Input Settings failed to load"); } } } } }
/// <summary> /// Parses a Key binding /// </summary> /// <returns><c>non-null</c>, if setting was parsed, <c>null</c> otherwise error has occured.</returns> /// <param name="keystring">Key string.</param> /// <remarks>Key String is a + sperated list containing English letters or scan-codes /// refer to https://github.com/mono/MonoGame/blob/develop/MonoGame.Framework/Input/Keys.cs for scan-codes /// </remarks> /// <note>This is to be a parser for Rhovlyn.Engine.Util.Parser and follows the delegate ObjectParser</note> public static object ParseKeyBinding(string keystring) { var key = new KeyCondition(); key.Keys = new List <Keys>(); var segs = keystring.Split('+'); foreach (var seg in segs) { //Convert a singel letter to scancode if (seg.Length == 1) { //XNA Scan codes for letters are mapped to UTF-8's upper case english letters var bytes = System.Text.UTF8Encoding.UTF8.GetBytes(seg.ToUpper()); if (bytes.Length == 1) { if (bytes[0] >= 65 && bytes[0] <= 90) { key.Keys.Add((Keys)bytes[0]); continue; } } } //Read in as Scancodes int code; if (int.TryParse(seg, out code)) { key.Keys.Add((Keys)code); } else { return(null); } } return(key); }