public static Settings Load(string location = null)
{
var settings = new Settings();
try
{
var doc = XDocument.Load(location ?? SettingsFile);
var root = doc.Element("Root");
foreach (var element in root.Elements())
{
switch (element.Name.LocalName)
{
case "AutoApply":
settings.AutoApply = bool.Parse(element.Value);
break;
case "DX9":
settings.DX9_StructureAddress = element.Element("StructureAddress")
.Value
.Split(',')
.Where(x => !string.IsNullOrEmpty(x))
.Select(x => int.Parse(x, NumberStyles.HexNumber, CultureInfo.InvariantCulture))
.ToArray();
settings.DX9_ZoomCurrent = int.Parse(element.Element("ZoomCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
settings.DX9_ZoomMax = int.Parse(element.Element("ZoomMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
settings.DX9_FovCurrent = int.Parse(element.Element("FovCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
settings.DX9_FovMax = int.Parse(element.Element("FovMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
break;
case "DX11":
settings.DX11_StructureAddress = element.Element("StructureAddress")
.Value
.Split(',')
.Where(x => !string.IsNullOrEmpty(x))
.Select(x => int.Parse(x, NumberStyles.HexNumber, CultureInfo.InvariantCulture))
.ToArray();
settings.DX11_ZoomCurrent = int.Parse(element.Element("ZoomCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
settings.DX11_ZoomMax = int.Parse(element.Element("ZoomMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
settings.DX11_FovCurrent = int.Parse(element.Element("FovCurrent").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
settings.DX11_FovMax = int.Parse(element.Element("FovMax").Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture);
break;
case "DesiredZoom":
settings.DesiredZoom = float.Parse(element.Value, CultureInfo.InvariantCulture);
if (settings.DesiredZoom < 1f || settings.DesiredZoom > 1000f)
{
settings.DesiredZoom = 20f;
}
break;
case "DesiredFov":
settings.DesiredFov = float.Parse(element.Value, CultureInfo.InvariantCulture);
if (settings.DesiredFov < 0.01f || settings.DesiredFov > 3f)
{
settings.DesiredFov = 0.78f;
}
break;
case "LastUpdate":
settings.LastUpdate = element.Value;
break;
}
}
}
catch
{
/* xml failed to load, lose settings */
}
return settings;
}