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; }
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; }
public void Start() { if(Instance != null) { Destroy(this); return; } Instance = this; Satellites = new SatelliteManager(this); Antennas = new AntennaManager(this); Network = new NetworkManager(this); Gui = new GuiManager(); Renderer = NetworkRenderer.AttachToMapView(this); Settings = new Settings(this); RTUtil.Log("RTCore loaded."); foreach (Vessel v in FlightGlobals.Vessels) { Satellites.RegisterProto(v); Antennas.RegisterProtoFor(v); } }
/// <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(); }
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> /// Load a preset configuration into the RemoteTech settings object. /// </summary> public static Settings LoadPreset(Settings previousSettings, string presetCfgUrl) { var newPreSetSettings = new Settings(); var successLoadPreSet = false; // Exploit KSP's GameDatabase to find third-party mods' RemoteTechSetting node (from GameData/ExampleMod/RemoteTechSettings.cfg) var rtSettingCfGs = GameDatabase.Instance.GetConfigs("RemoteTechSettings"); for(var i = 0; i < rtSettingCfGs.Length; i++) { var rtSettingCfg = rtSettingCfGs[i]; if (!rtSettingCfg.url.Equals(presetCfgUrl)) continue; // Preserve important information of RT, such as the single ID var importantInfoNode = new ConfigNode(); importantInfoNode.AddValue("MapFilter", previousSettings.MapFilter); importantInfoNode.AddValue("ActiveVesselGuid", previousSettings.ActiveVesselGuid); importantInfoNode.AddValue("NoTargetGuid", previousSettings.NoTargetGuid); successLoadPreSet = ConfigNode.LoadObjectFromConfig(newPreSetSettings, rtSettingCfg.config); RTLog.Notify("Load the preset cfg into object with {0}: LOADED {1}", newPreSetSettings, successLoadPreSet ? "OK" : "FAIL"); // Restore backups ConfigNode.LoadObjectFromConfig(newPreSetSettings, importantInfoNode); break; } return successLoadPreSet?newPreSetSettings: previousSettings; }
/// <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; }