public static Settings Load() { ConfigNode load = ConfigNode.Load(File); Settings settings = new Settings(); if (load == null) { settings.Save(); return settings; } ConfigNode.LoadObjectFromConfig(settings, load); return settings; }
/// <summary> /// Replace the given settings with a new Settings object of the given setting preset, and save it /// </summary> public static void ReloadSettings(Settings previousSettings, string presetCfgUrl) { _instance = Settings.LoadPreset(previousSettings, presetCfgUrl); _instance.Save(); }
public static Settings Load() { // Create a new settings object Settings settings = new Settings(); // try to load from the base settings.cfg ConfigNode load = ConfigNode.Load(File); if (load == null) { // write new base file to the rt folder settings.Save(); } else { // old or new format? if (load.HasNode("RemoteTechSettings")) { load = load.GetNode("RemoteTechSettings"); } RTLog.Notify("Load base settings into object with {0}", load); // load basic file ConfigNode.LoadObjectFromConfig(settings, load); } // Prefer to load from GameDatabase, to allow easier user customization UrlDir.UrlConfig[] configList = GameDatabase.Instance.GetConfigs("RemoteTechSettings"); foreach (UrlDir.UrlConfig curSet in configList) { // only third party files if (!curSet.url.Equals("RemoteTech/RemoteTech_Settings/RemoteTechSettings")) { RTLog.Notify("Override RTSettings with configs from {0}", curSet.url); settings.backupFields(); ConfigNode.LoadObjectFromConfig(settings, curSet.config); settings.restoreBackups(); } } return settings; }
private static void SearchAndPreparePresets(Settings settings) { var presetsChanged = false; // Exploit KSP's GameDatabase to find third-party mods' RemoteTechSetting node (from GameData/ExampleMod/RemoteTechSettings.cfg) var cfgs = GameDatabase.Instance.GetConfigs("RemoteTechSettings"); var rtSettingCfGs = cfgs.Select(x => x.url).ToList(); //check for any invalid preset in the settings of a save for (var i=0; i < settings.PreSets.Count(); i++) { if (rtSettingCfGs.Contains(settings.PreSets[i])) continue; RTLog.Notify("Remove an invalid setting preset {0}", settings.PreSets[i]); settings.PreSets.RemoveAt(i); presetsChanged = true; } //find and add new presets to the settings of a save for (var i = 0; i < rtSettingCfGs.Count(); i++) { if (settings.PreSets.Contains(rtSettingCfGs[i])) continue; RTLog.Notify("Add a new setting preset {0}", rtSettingCfGs[i]); settings.PreSets.Add(rtSettingCfGs[i]); presetsChanged = true; } if (presetsChanged) // only if new RT settings are found and added to the save-setting's PreSets node settings.Save(); }
/// <summary> /// Utilise KSP's GameDatabase to get a list of cfgs, included our Default_Settings.cfg, contained the 'RemoteTechSettings' /// node and process each cfg accordingly /// /// NOTE: Please do not use the static 'Default_Settings.cfg' file directly because we want third-party modders to apply /// ModuleManager patches of their tweaks, like no signal delay, to our default-settings cfg that will be used when a /// player starts a new game. (refer to our online manual for more details) /// </summary> 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; }
/// <summary> /// Utilise KSP's GameDatabase to get a list of cfgs, included our Default_Settings.cfg, contained the 'RemoteTechSettings' /// node and process each cfg accordingly /// /// NOTE: Please do not use the static 'Default_Settings.cfg' file directly because we want third-party modders to apply /// ModuleManager patches of their tweaks, like no signal delay, to our default-settings cfg that will be used when a /// player starts a new game. (refer to our online manual for more details) /// </summary> 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); // Detect if the celestial body, that Mission Control is on (default body index 1), is Kerbin var KSCMC = settings.GroundStations.Find(x => x.GetName().Equals("Mission Control")); // leave extra ground stations to modders, who need to provide MM patches if (KSCMC != null && !KSCMC.GetBody().name.Equals("Kerbin") && KSCMC.GetBody().flightGlobalsIndex == 1) // Kopernicus or similar map changes the planet { KSCMC.SetBodyIndex(FlightGlobals.GetHomeBodyIndex()); RTLog.Notify("KSC's Mission Control is on the wrong planet (not Kerbin/Earth) (Any Kopernicus/similar map would change). Relocated to the homeworld's body index {0}.", FlightGlobals.GetHomeBodyIndex()); } RTSettings.OnSettingsLoaded.Fire(); return(settings); }
/// <summary> /// Utilise KSP's GameDatabase to get a list of cfgs, included our Default_Settings.cfg, contained the 'RemoteTechSettings' /// node and process each cfg accordingly /// /// NOTE: Please do not use the static 'Default_Settings.cfg' file directly because we want third-party modders to apply /// ModuleManager patches of their tweaks, like no signal delay, to our default-settings cfg that will be used when a /// player starts a new game. (refer to our online manual for more details) /// </summary> 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); }