public static Settings Load()
{
// Create a blank object of settings
var settings = new Settings();
var defaultSuccess = false;
// Exploit KSP's GameDatabase to find our MM-patched cfg of default settings (from GameData/RemoteTech/Default_Settings.cfg)
var cfgs = GameDatabase.Instance.GetConfigs("RemoteTechSettings");
for (var i = 0; i < cfgs.Length; i++)
{
if(cfgs[i].url.Equals(DefaultSettingCfgURL))
{
defaultSuccess = ConfigNode.LoadObjectFromConfig(settings, cfgs[i].config);
RTLog.Notify("Load default settings into object with {0}: LOADED {1}", cfgs[i].config, defaultSuccess ? "OK" : "FAIL");
break;
}
}
if (!defaultSuccess) // disable itself and write explanation to KSP's log
{
RTLog.Notify("RemoteTech is disabled because the default cfg '{0}' is not found", DefaultSettingCfgURL);
return null;
// the main impact of returning null is the endless loop of invoking Load() in the KSP's loading screen
}
settings.SettingsLoaded = true;
// Disable RemoteTech on Training missions
if (RTUtil.IsGameScenario)
{
settings.RemoteTechEnabled = false;
settings.CommNetEnabled = true;
}
// stop and return default settings if we are on the KSP loading screen OR in training scenarios
if (string.IsNullOrEmpty(SaveSettingFile))
{
return settings;
}
// try to load from the save-settings.cfg (MM-patches will not touch because it is outside GameData)
var load = ConfigNode.Load(SaveSettingFile);
if (load == null)
{
// write the RT settings to the player's save folder
settings.Save();
settings.FirstStart = true;
}
else
{
// old or new format?
if (load.HasNode("RemoteTechSettings"))
load = load.GetNode("RemoteTechSettings");
// replace the default settings with save-setting file
var success = ConfigNode.LoadObjectFromConfig(settings, load);
RTLog.Notify("Found and load save settings into object with {0}: LOADED {1}", load, success ? "OK" : "FAIL");
}
// find third-party mods' RemoteTech settings
SearchAndPreparePresets(settings);
RTSettings.OnSettingsLoaded.Fire();
return settings;
}