static Constants() { var settingsPath = Tools.GetModRootDirectory() + Path.DirectorySeparatorChar + "About" + Path.DirectorySeparatorChar + "Settings.txt"; File.ReadAllLines(settingsPath) .Select(line => line.Trim()) .Where(line => line.StartsWith("/", StringComparison.Ordinal) == false && line.Length > 0) .Select(line => { var parts = line.Split('=').Select(part => part.Trim()).ToList(); parts.Insert(0, line); return(parts.ToArray()); }) .Do(parts => { if (parts.Length != 3) { Log.Error("Unexpected line: " + parts[0]); } else { var field = parts[1]; var value = parts[2]; var constant = AccessTools.Field(typeof(Constants), field); if (constant != null) { switch (constant.FieldType.Name) { case "Boolean": { bool result; if (bool.TryParse(value, out result)) { constant.SetValue(null, result); } else { Log.Error("Cannot parse boolean '" + value + "' of constant " + field); } break; } case "Int32": { int result; if (int.TryParse(value, out result)) { constant.SetValue(null, result); } else { Log.Error("Cannot parse int '" + value + "' of constant " + field); } break; } case "Single": { float result; if (float.TryParse(value, out result)) { constant.SetValue(null, result); } else { Log.Error("Cannot parse float '" + value + "' of constant " + field); } break; } default: Log.Error("Zombieland constant '" + field + "' with unknown type " + constant.FieldType.Name); break; } } else { Log.Error("Zombieland constant '" + field + "' unknown"); } } }); }