/// <summary> /// Called by the game when the mod is enabled. /// </summary> public void OnEnabled() { // Apply Harmony patches via Cities Harmony. // Called here instead of OnCreated to allow the auto-downloader to do its work prior to launch. HarmonyHelper.DoOnHarmonyReady(() => Patcher.PatchAll()); // Load settings file. SettingsUtils.LoadSettings(); // Populate (legacy) Datastore from configuration file. // Make sure this happens before loading the new configuration file, which will overwrite any settings here. // This establishes the correct priority (new over legacy). XMLUtilsWG.ReadFromXML(); // Attaching options panel event hook - check to see if UIView is ready. if (UIView.GetAView() != null) { // It's ready - attach the hook now. OptionsPanel.OptionsEventHook(); } else { // Otherwise, queue the hook for when the intro's finished loading. LoadingManager.instance.m_introLoaded += OptionsPanel.OptionsEventHook; } }
/// <summary> /// Saves the current legacy config. /// </summary> /// <param name="panel">UI panel instance</param> protected void SaveLegacy() { // Set flag to show that user has instructed to save legacy file. XMLUtilsWG.writeToLegacy = true; // Save legacy data using WG serialization. XMLUtilsWG.WriteToXML(); }
/// <summary> /// Adds control buttons to the bottom of the panel. /// </summary> /// <param name="panel">UI panel instance</param> protected void AddButtons(UIPanel panel) { // Add extra space. currentY += Margin; // Reset button. UIButton resetButton = UIControls.AddButton(panel, Margin, currentY, Translations.Translate("RPR_OPT_RTD"), 150f); resetButton.eventClicked += (component, clickEvent) => ResetToDefaults(); UIButton revertToSaveButton = UIControls.AddButton(panel, (Margin * 2) + 150f, currentY, Translations.Translate("RPR_OPT_RTS"), 150f); revertToSaveButton.eventClicked += (component, clickEvent) => { XMLUtilsWG.ReadFromXML(); PopulateFields(); }; UIButton saveButton = UIControls.AddButton(panel, (Margin * 3) + 300f, currentY, Translations.Translate("RPR_OPT_SAA"), 150f); saveButton.eventClicked += (component, clickEvent) => ApplyFields(); }
/// <summary> /// Called by the game when the mod is initialised at the start of the loading process. /// </summary> /// <param name="loading">Loading mode (e.g. game, editor, scenario, etc.)</param> public override void OnCreated(ILoading loading) { base.OnCreated(loading); // Don't do anything if not in game (e.g. if we're going into an editor). if (loading.currentMode != AppMode.Game) { isModEnabled = false; Logging.KeyMessage("not loading into game, skipping activation"); // Set harmonyLoaded flag to suppress Harmony warning when e.g. loading into editor. harmonyLoaded = true; // Unload Harmony patches and exit before doing anything further. Patcher.UnpatchAll(); return; } // Ensure that Harmony patches have been applied. harmonyLoaded = Patcher.Patched; if (!harmonyLoaded) { isModEnabled = false; Logging.KeyMessage("Harmony patches not applied; aborting"); return; } // Check for mod conflicts. if (ModUtils.IsModConflict()) { // Conflict detected. conflictingMod = true; isModEnabled = false; // Unload Harmony patches and exit before doing anything further. Patcher.UnpatchAll(); return; } // Passed all checks - okay to load (if we haven't already fo some reason). if (!isModEnabled) { isModEnabled = true; Logging.KeyMessage("version v", RealPopMod.Version, " loading"); // Perform legacy datastore setup. XMLUtilsWG.Setup(); // Check for Ploppable RICO Revisited. ModUtils.RICOReflection(); // Initialise volumetric datastores. EmploymentData.Setup(); // Initialize data. DataUtils.Setup(); // Apply any needed Advanced Building Level Control Harmony patches. Patcher.PatchABLC(); } }