/// <summary> /// Creates the panel object in-game and displays it. /// </summary> private static void Create() { try { // We're now visible - create our gameobject, and give it a unique name for easy finding with ModTools. optionsGameObject = new GameObject("RealPopOptionsPanel"); // Attach to game options panel. optionsGameObject.transform.parent = optionsPanel.transform; // Create a base panel attached to our game object, perfectly overlaying the game options panel. UIPanel basePanel = optionsGameObject.AddComponent <UIPanel>(); basePanel.absolutePosition = optionsPanel.absolutePosition; basePanel.size = optionsPanel.size; // Add tabstrip. UITabstrip tabStrip = basePanel.AddUIComponent <UITabstrip>(); tabStrip.relativePosition = new Vector3(0, 0); tabStrip.size = new Vector2(744, 713); // Tab container (the panels underneath each tab). UITabContainer tabContainer = basePanel.AddUIComponent <UITabContainer>(); tabContainer.relativePosition = new Vector3(0, 40); tabContainer.size = new Vector3(744, 713); tabStrip.tabPages = tabContainer; // Add tabs and panels. new ModOptionsPanel(tabStrip, 0); new ResidentialPanel(tabStrip, 1); new IndustrialPanel(tabStrip, 2); new CommercialPanel(tabStrip, 3); new OfficePanel(tabStrip, 4); } catch (Exception e) { Debugging.LogException(e); } }
/// <summary> /// Creates the panel object in-game. /// </summary> public void Create() { try { // Destroy existing (if any) instances. uiGameObject = GameObject.Find("RealPopUpgradeNotification"); if (uiGameObject != null) { Debugging.Message("found existing upgrade notification instance"); GameObject.Destroy(uiGameObject); } // Create new instance. // Give it a unique name for easy finding with ModTools. uiGameObject = new GameObject("RealPopUpgradeNotification"); uiGameObject.transform.parent = UIView.GetAView().transform; _instance = uiGameObject.AddComponent <UpdateNotification>(); } catch (Exception e) { Debugging.LogException(e); } }
/// <summary> /// Create the update notification panel; called by Unity just before any of the Update methods is called for the first time. /// </summary> public override void Start() { base.Start(); try { // Basic setup. isVisible = true; canFocus = true; isInteractive = true; width = panelWidth; height = panelHeight; relativePosition = new Vector3(Mathf.Floor((GetUIView().fixedWidth - width) / 2), Mathf.Floor((GetUIView().fixedHeight - height) / 2)); backgroundSprite = "UnlockingPanel2"; // Title. UILabel title = this.AddUIComponent <UILabel>(); title.relativePosition = new Vector3(0, spacing); title.textAlignment = UIHorizontalAlignment.Center; title.text = "Realistic Population Revisited 1.3 update"; title.textScale = 1.0f; title.autoSize = false; title.width = this.width; // Note 1. UILabel note1 = this.AddUIComponent <UILabel>(); note1.relativePosition = new Vector3(spacing, 40); note1.textAlignment = UIHorizontalAlignment.Left; note1.text = "Realistic Population Revisited has been updated to 1.3. This update adds a mod options panel (accessible through the options menu) that enables direct editing of all key configuration options for population, jobs, and consumption calculations."; note1.textScale = 0.8f; note1.autoSize = false; note1.autoHeight = true; note1.width = this.width - (spacing * 2); note1.wordWrap = true; // Close button. UIButton closeButton = UIUtils.CreateButton(this, 200); closeButton.relativePosition = new Vector3(spacing, this.height - closeButton.height - spacing); closeButton.text = "Close"; closeButton.Enable(); // Event handler. closeButton.eventClick += (c, p) => { // Just hide this panel and destroy the game object - nothing more to do this load. this.Hide(); GameObject.Destroy(uiGameObject); }; // "Don't show again" button. UIButton noShowButton = UIUtils.CreateButton(this, 200); noShowButton.relativePosition = new Vector3(this.width - noShowButton.width - spacing, this.height - closeButton.height - spacing); noShowButton.text = "Don't show again"; noShowButton.Enable(); // Event handler. noShowButton.eventClick += (c, p) => { // Save settings. notificationVersion = 2; SettingsUtils.SaveSettings(); // Just hide this panel and destroy the game object - nothing more to do. this.Hide(); GameObject.Destroy(uiGameObject); }; } catch (Exception e) { Debugging.LogException(e); } }
/// <summary> /// Create the building editor panel; we no longer use Start() as that's not sufficiently reliable (race conditions), and is no longer needed, with the new create/destroy process. /// </summary> internal void Setup() { try { // Basic setup. isVisible = false; canFocus = true; isInteractive = true; width = LeftWidth + MiddleWidth + RightWidth + (Spacing * 4); height = PanelHeight + TitleHeight + FilterHeight + (Spacing * 2) + BottomMargin; relativePosition = new Vector3(Mathf.Floor((GetUIView().fixedWidth - width) / 2), Mathf.Floor((GetUIView().fixedHeight - height) / 2)); backgroundSprite = "UnlockingPanel2"; // Titlebar. titleBar = AddUIComponent <UITitleBar>(); titleBar.Setup(); // Filter. filterBar = AddUIComponent <UIBuildingFilter>(); filterBar.width = width - (Spacing * 2); filterBar.height = FilterHeight; filterBar.relativePosition = new Vector3(Spacing, TitleHeight); filterBar.eventFilteringChanged += (c, i) => { if (i == -1) { return; } int listCount = buildingSelection.rowsData.m_size; float position = buildingSelection.listPosition; buildingSelection.selectedIndex = -1; buildingSelection.rowsData = GenerateFastList(); }; // Set up panels. // Left panel - list of buildings. UIPanel leftPanel = AddUIComponent <UIPanel>(); leftPanel.width = LeftWidth; leftPanel.height = PanelHeight; leftPanel.relativePosition = new Vector3(Spacing, TitleHeight + FilterHeight + Spacing); // Middle panel - building preview and edit panels. UIPanel middlePanel = AddUIComponent <UIPanel>(); middlePanel.width = MiddleWidth; middlePanel.height = PanelHeight; middlePanel.relativePosition = new Vector3(LeftWidth + (Spacing * 2), TitleHeight + FilterHeight + Spacing); previewPanel = middlePanel.AddUIComponent <UIPreviewPanel>(); previewPanel.width = middlePanel.width; previewPanel.height = (PanelHeight - Spacing) / 2; previewPanel.relativePosition = Vector3.zero; previewPanel.Setup(); editPanel = middlePanel.AddUIComponent <UIEditPanel>(); editPanel.width = middlePanel.width; editPanel.height = (PanelHeight - Spacing) / 2; editPanel.relativePosition = new Vector3(0, previewPanel.height + Spacing); editPanel.Setup(); // Right panel - mod calculations. UIPanel rightPanel = AddUIComponent <UIPanel>(); rightPanel.width = RightWidth; rightPanel.height = PanelHeight; rightPanel.relativePosition = new Vector3(LeftWidth + MiddleWidth + (Spacing * 3), TitleHeight + FilterHeight + Spacing); modCalcs = rightPanel.AddUIComponent <UIModCalcs>(); modCalcs.width = RightWidth; modCalcs.height = PanelHeight; modCalcs.relativePosition = Vector3.zero; modCalcs.Setup(); // Building selection list. buildingSelection = UIFastList.Create <UIBuildingRow>(leftPanel); buildingSelection.backgroundSprite = "UnlockingPanel"; buildingSelection.width = leftPanel.width; buildingSelection.height = leftPanel.height; buildingSelection.canSelect = true; buildingSelection.rowHeight = 40; buildingSelection.autoHideScrollbar = true; buildingSelection.relativePosition = Vector3.zero; buildingSelection.rowsData = new FastList <object>(); buildingSelection.selectedIndex = -1; // Set up filterBar to make sure selection filters are properly initialised before calling GenerateFastList. filterBar.Setup(); // Populate the list. buildingSelection.rowsData = GenerateFastList(); } catch (Exception e) { Debugging.LogException(e); } }
/// <param name="doc"></param> public override void readXML(XmlDocument doc) { XmlElement root = doc.DocumentElement; try { //DataStore.enableExperimental = Convert.ToBoolean(root.Attributes["experimental"].InnerText); //DataStore.timeBasedRealism = Convert.ToBoolean(root.Attributes["enableTimeVariation"].InnerText); } catch (Exception) { DataStore.enableExperimental = false; } foreach (XmlNode node in root.ChildNodes) { try { if (node.Name.Equals(popNodeName)) { ReadPopulationNode(node); } else if (node.Name.Equals(consumeNodeName)) { ReadConsumptionNode(node); } else if (node.Name.Equals(visitNodeName)) { ReadVisitNode(node); } else if (node.Name.Equals(pollutionNodeName)) { ReadPollutionNode(node); } else if (node.Name.Equals(productionNodeName)) { ReadProductionNode(node); } else if (node.Name.Equals(overrideHouseName)) { ReadOverrideHouseNode(node); } else if (node.Name.Equals(overrideWorkName)) { ReadOverrideWorkers(node); } else if (node.Name.Equals(bonusHouseName)) { ReadBonusHouseNode(node); } else if (node.Name.Equals(bonusWorkName)) { ReadBonusWorkers(node); } else if (node.Name.Equals(printHouseName)) { ReadPrintHouseNode(node); } else if (node.Name.Equals(printWorkName)) { ReadPrintWorkers(node); } } catch (Exception e) { Debugging.LogException(e); } } } // end readXML