public Settings(string file, Arguments args)
{
settingsFile = file;
Sections = new Dictionary <string, object>()
{
{ "Player", Player },
{ "Game", Game },
{ "Sound", Sound },
{ "Graphics", Graphics },
{ "Server", Server },
{ "Debug", Debug },
{ "Keys", Keys },
{ "Chat", Chat }
};
// Override fieldloader to ignore invalid entries
var err1 = FieldLoader.UnknownFieldAction;
var err2 = FieldLoader.InvalidValueAction;
try
{
FieldLoader.UnknownFieldAction = (s, f) => Console.WriteLine("Ignoring unknown field `{0}` on `{1}`".F(s, f.Name));
if (File.Exists(settingsFile))
{
var yaml = MiniYaml.DictFromFile(settingsFile);
foreach (var kv in Sections)
{
if (yaml.ContainsKey(kv.Key))
{
LoadSectionYaml(yaml[kv.Key], kv.Value);
}
}
}
// Override with commandline args
foreach (var kv in Sections)
{
foreach (var f in kv.Value.GetType().GetFields())
{
if (args.Contains(kv.Key + "." + f.Name))
{
FieldLoader.LoadField(kv.Value, f.Name, args.GetValue(kv.Key + "." + f.Name, ""));
}
}
}
}
finally
{
FieldLoader.UnknownFieldAction = err1;
FieldLoader.InvalidValueAction = err2;
}
}