/// <summary> /// Called by the game when level loading is complete. /// </summary> /// <param name="mode">Loading mode (e.g. game, editor, scenario, etc.)</param> public override void OnLevelLoaded(LoadMode mode) { // Check to see that Harmony 2 was properly loaded. if (!harmonyLoaded) { // Harmony 2 wasn't loaded; display warning notification and exit. ListMessageBox harmonyBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. harmonyBox.AddParas(Translations.Translate("ERR_HAR0"), Translations.Translate("ABLC_ERR_HAR"), Translations.Translate("ABLC_ERR_FAT"), Translations.Translate("ERR_HAR1")); // List of dot points. harmonyBox.AddList(Translations.Translate("ERR_HAR2"), Translations.Translate("ERR_HAR3")); // Closing para. harmonyBox.AddParas(Translations.Translate("MES_PAGE")); // Exit. return; } // Check to see if a conflicting mod has been detected. if (conflictingMod) { // Mod conflict detected - display warning notification and exit. ListMessageBox modConflictBox = MessageBoxBase.ShowModal <ListMessageBox>(); // Key text items. modConflictBox.AddParas(Translations.Translate("ERR_CON0"), Translations.Translate("ABLC_ERR_FAT"), Translations.Translate("ABLC_ERR_CON0"), Translations.Translate("ERR_CON1")); // Add conflicting mod name(s). modConflictBox.AddList(ModUtils.conflictingModNames.ToArray()); // Closing para. modConflictBox.AddParas(Translations.Translate("ABLC_ERR_CON1")); // Exit. return; } // Load mod if it's enabled. if (isModEnabled) { // Check for Ploppable RICO Revisited. ModUtils.RICOReflection(); // Hook info panel events. DistrictPanelManager.Hook(); BuildingPanelManager.Hook(); // Add building info panel button. BuildingPanelManager.AddInfoPanelButton(); } }
/// <summary> /// Harmony Postfix patch to update ABLC building info panel when building selection changes. /// </summary> public static void Postfix() { BuildingPanelManager.TargetChanged(); }
/// <summary> /// Performs initial setup for the panel; we don't use Start() as that's not sufficiently reliable (race conditions), and is not needed with the dynamic create/destroy process. /// </summary> /// <param name="parentTransform">Transform to attach to</param> internal override void Setup(Transform parentTransform) { try { base.Setup(parentTransform); // Set initial building. BuildingChanged(); // Add event handlers. minLevelDropDown.eventSelectedIndexChanged += (control, index) => { // Don't do anything if events are disabled. if (!disableEvents) { // Set minimum level of building in dictionary. UpdateMinLevel((byte)index); // If the minimum level is now greater than the maximum level, increase the maximum to match the minimum. if (index > maxLevelDropDown.selectedIndex) { maxLevelDropDown.selectedIndex = index; } } }; maxLevelDropDown.eventSelectedIndexChanged += (control, index) => { // Don't do anything if events are disabled. if (!disableEvents) { // Update maximum level. UpdateMaxLevel((byte)index); // If the maximum level is now less than the minimum level, reduce the minimum to match the maximum. if (index < minLevelDropDown.selectedIndex) { minLevelDropDown.selectedIndex = index; } } }; upgradeButton.eventClick += (control, clickEvent) => { LevelUtils.ForceLevel(targetID, upgradeLevel); // Check to see if we should increase this buildings maximum level. byte newLevel = Singleton <BuildingManager> .instance.m_buildings.m_buffer[targetID].m_level; if (BuildingsABLC.levelRanges.ContainsKey(targetID) && BuildingsABLC.levelRanges[targetID].maxLevel < newLevel) { //BuildingsABLC.levelRanges[targetID].maxLevel = newLevel; maxLevelDropDown.selectedIndex = newLevel; } // Update the panel once done. UpdatePanel(); }; downgradeButton.eventClick += (control, clickEvent) => { LevelUtils.ForceLevel(targetID, downgradeLevel); // Check to see if we should increase this buildings maximum level. byte newLevel = Singleton <BuildingManager> .instance.m_buildings.m_buffer[targetID].m_level; if (BuildingsABLC.levelRanges.ContainsKey(targetID) && BuildingsABLC.levelRanges[targetID].minLevel > newLevel) { //BuildingsABLC.levelRanges[targetID].minLevel = newLevel; minLevelDropDown.selectedIndex = newLevel; } // Update the panel once done. UpdatePanel(); }; // Close button. UIButton closeButton = AddUIComponent <UIButton>(); closeButton.relativePosition = new Vector3(width - 35, 2); closeButton.normalBgSprite = "buttonclose"; closeButton.hoveredBgSprite = "buttonclosehover"; closeButton.pressedBgSprite = "buttonclosepressed"; // Close button event handler. closeButton.eventClick += (component, clickEvent) => { BuildingPanelManager.Close(); }; } catch (Exception e) { Logging.LogException(e, "exception setting up building panel"); } }