private IniOptions(int w, int h, int realtimeRaster, int backgroundRaster, bool showLightSources, IniInput input, SamplerState realtimeSampler, SamplerState backgroundSampler, int realtimeSamples, int backgroundSamples, bool multithread) { RealtimeSampleCount = realtimeSamples; BackgroundSampleCount = backgroundSamples; Width = w; Height = h; RealtimeRasterLevel = realtimeRaster; BackgroundRasterLevel = backgroundRaster; Input = input; ShowLightSources = showLightSources; RealtimeSamplerState = realtimeSampler; BackgroundSamplerState = backgroundSampler; Multithreaded = multithread; }
public static IniOptions Parse(string file) { var lines = File.ReadAllLines(file); string sectionName = null; var map = new LoadedIniMap(); var values = new Dictionary <string, string>(); for (int i = 0; i < lines.Length; i++) { var trimmed = lines[i].Trim(); if (trimmed.StartsWith("#") || string.IsNullOrEmpty(trimmed)) { continue; } if (trimmed.StartsWith("[") && trimmed.EndsWith("]")) { if (sectionName != null) { map.Add(sectionName, values); values = new Dictionary <string, string>(); } sectionName = trimmed.Substring(1, trimmed.Length - 2); } else { if (sectionName == null) { throw new NotSupportedException("Found ini values before first section"); } var sp = trimmed.Split('='); var k = sp[0].Trim(); var v = sp[1].Trim(); values.Add(k, v); } } if (sectionName != null) { map.Add(sectionName, values); } bool invertX = bool.Parse(map["mouse"]["InvertXAxis"]); bool invertY = bool.Parse(map["mouse"]["InvertYAxis"]); float accelX = float.Parse(map["mouse"]["MouseAccelerationX"], NumberFormatInfo.InvariantInfo); float accelY = float.Parse(map["mouse"]["MouseAccelerationY"], NumberFormatInfo.InvariantInfo); var keyMap = map.First(k => k.Key == "input").Value.Select(d => { var k = d.Value; var keys = (k.Contains("|") ? k.Split('|') : new[] { k }).Select(key => (Keys)Enum.Parse(typeof(Keys), key)).ToArray(); return(new KeyValuePair <string, Keys[]>(d.Key, keys)); }).ToDictionary(d => d.Key, d => d.Value); var input = new IniInput(invertX, invertY, accelX, accelY, keyMap); int w = int.Parse(map["video"]["Width"]); int h = int.Parse(map["video"]["Height"]); int realtimeRaster = int.Parse(map["video"]["RealtimeRasterSize"]); int backgroundRaster = int.Parse(map["video"]["BackgroundRasterSize"]); int realtimeSamples = int.Parse(map["video"]["RealtimeSampleCount"]); int backgroundSamples = int.Parse(map["video"]["BackgroundSampleCount"]); var showLightSources = bool.Parse(map["video"]["ShowLightSources"]); var realtimeSampler = ParseSampler(map["video"]["RealtimeSamplerState"]); var backgroundSampler = ParseSampler(map["video"]["BackgroundSamplerState"]); var multithread = bool.Parse(map["video"]["Multithreaded"]); return(new IniOptions(w, h, realtimeRaster, backgroundRaster, showLightSources, input, realtimeSampler, backgroundSampler, realtimeSamples, backgroundSamples, multithread)); }