/// <summary> /// Adds calculation options tab to tabstrip. /// </summary> /// <param name="tabStrip">Tab strip to add to</param> /// <param name="tabIndex">Index number of tab</param> public CalculationOptions(UITabstrip tabStrip, int tabIndex) { // Add tab. UIPanel calculationsTab = PanelUtils.AddTab(tabStrip, Translations.Translate("LBR_SPN"), tabIndex, true); // Add warning text message. PanelUtils.AddLabel(calculationsTab, Translations.Translate("LBR_SPN_WRN") + "\r\n" + Translations.Translate("LBR_SPN_BAL") + "\r\n" + Translations.Translate("LBR_SPN_BAK")); // Calculation models. PanelUtils.AddPanelSpacer(calculationsTab); PanelUtils.AddLabel(calculationsTab, Translations.Translate("LBR_CAL"), 1.3f); sunsetCheckBox = PanelUtils.AddPlainCheckBox(calculationsTab, Translations.Translate("LBR_CAL_SUN")); sunsetCheckBox.isChecked = !OptionsPanel.settings.UseLegacy; legacyCheckBox = PanelUtils.AddPlainCheckBox(calculationsTab, Translations.Translate("LBR_CAL_LEG")); legacyCheckBox.isChecked = OptionsPanel.settings.UseLegacy; vanillaCheckBox = PanelUtils.AddPlainCheckBox(calculationsTab, Translations.Translate("LBR_CAL_VAN")); vanillaCheckBox.isChecked = OptionsPanel.settings.UseVanilla; // Custom retirement ages. PanelUtils.AddPanelSpacer(calculationsTab); PanelUtils.AddLabel(calculationsTab, Translations.Translate("LBR_RET"), 1.3f); retireCheckBox = PanelUtils.AddPlainCheckBox(calculationsTab, Translations.Translate("LBR_RET_USE")); retireCheckBox.isChecked = OptionsPanel.settings.CustomRetirement; ageDropDown = PanelUtils.AddPlainDropDown(calculationsTab, Translations.Translate("LBR_RET_CUS"), retirementAges, (OptionsPanel.settings.RetirementYear - 50) / 5); ageDropDown.eventSelectedIndexChanged += (control, index) => { int ageYears = 50 + (index * 5); // Update mod settings. ModSettings.RetirementYear = ageYears; // Update configuration file. OptionsPanel.settings.RetirementYear = ageYears; Configuration <SettingsFile> .Save(); }; // Add enabled/disabled event handler to age dropdown to repopulate items on re-enabling. ageDropDown.eventIsEnabledChanged += (control, isEnabled) => { if (isEnabled) { ageDropDown.items = retirementAges; ageDropDown.selectedIndex = (OptionsPanel.settings.RetirementYear - 50) / 5; } }; UILabel retireNote1 = PanelUtils.AddLabel(calculationsTab, Translations.Translate("LBR_RET_NT1")); UILabel retireNote2 = PanelUtils.AddLabel(calculationsTab, Translations.Translate("LBR_RET_NT2")); // Event handlers (here so other controls referenced are all set up prior to referencing in handlers). sunsetCheckBox.eventCheckChanged += (control, isChecked) => { if (isChecked) { // If this has been checked, update group checkboxes and set configuration - index for this checkbox is 0. UpdateCheckboxes(0); } else if (!legacyCheckBox.isChecked && !vanillaCheckBox.isChecked) { // This has been unchecked when no others have been selected; reset it and make no changes. sunsetCheckBox.isChecked = true; } }; legacyCheckBox.eventCheckChanged += (control, isChecked) => { if (isChecked) { // If this has been checked, update group checkboxes and set configuration - index for this checkbox is 1. UpdateCheckboxes(1); } else if (!sunsetCheckBox.isChecked && !vanillaCheckBox.isChecked) { // This has been unchecked when no others have been selected; reset it and make no changes. legacyCheckBox.isChecked = true; } }; vanillaCheckBox.eventCheckChanged += (control, isChecked) => { if (isChecked) { // If this has been checked, update group checkboxes and set configuration - index for this checkbox is 2. UpdateCheckboxes(2); } else if (!sunsetCheckBox.isChecked && !legacyCheckBox.isChecked) { // This has been unchecked when no others have been selected; reset it and make no changes. vanillaCheckBox.isChecked = true; } }; retireCheckBox.eventCheckChanged += (control, isChecked) => { // Update mod settings. ModSettings.CustomRetirement = isChecked; // Show/hide retirement age dropdown. if (isChecked) { ageDropDown.Enable(); } else { ageDropDown.Disable(); } // Update configuration file. OptionsPanel.settings.CustomRetirement = isChecked; Configuration <SettingsFile> .Save(); }; // Show or hide notes attached to age dropdown to match visibility of dropdown itself. ageDropDown.eventIsEnabledChanged += (control, isEnabled) => { if (isEnabled) { retireNote1.Show(); retireNote2.Show(); ageDropDown.parent.Show(); } else { retireNote1.Hide(); retireNote2.Hide(); ageDropDown.parent.Hide(); } }; // Update our visibility status based on current settings. UpdateCheckboxes(OptionsPanel.settings.UseVanilla ? 2 : OptionsPanel.settings.UseLegacy ? 1 : 0); }
/// <summary> /// Adds a density field group to the panel. /// </summary> /// <param name="panel">UI panel instance</param> /// <param name="lowWealth">Low-wealth textfield array</param> /// <param name="medWealth">Medium-wealth textfield array</param> /// <param name="highWealth">High-wealth textfield array</param> protected void AddDensityGroup(UIPanel panel, UITextField[][] lowWealth, UITextField[][] medWealth, UITextField[][] highWealth) { string[] ageLabels = new string[] { Translations.Translate("LBR_TRN_CHL"), Translations.Translate("LBR_TRN_TEN"), Translations.Translate("LBR_TRN_YAD"), Translations.Translate("LBR_TRN_ADL"), Translations.Translate("LBR_TRN_SEN") }; // Add a row for each age group within this density group. for (int i = 0; i < NumAges; ++i) { // Row label. RowLabel(panel, currentY, ageLabels[i]); // Add textfields for each transport mode within this age group. for (int j = 0; j < NumTransport; ++j) { lowWealth[i][j] = AddTextField(panel, FieldWidth, (j * ColumnWidth) + Group1, currentY); medWealth[i][j] = AddTextField(panel, FieldWidth, (j * ColumnWidth) + Group2, currentY); highWealth[i][j] = AddTextField(panel, FieldWidth, (j * ColumnWidth) + Group3, currentY); } // Increment Y position. currentY += RowHeight; } // Add an extra bit of space at the end. currentY += 5f; }
/// <summary> /// Adds death options tab to tabstrip. /// </summary> /// <param name="tabStrip">Tab strip to add to</param> /// <param name="tabIndex">Index number of tab</param> public TransportOptions(UITabstrip tabStrip, int tabIndex) { // Add tab. UIPanel transportTab = PanelUtils.AddTab(tabStrip, Translations.Translate("LBR_TRN"), tabIndex, true); transportTab.autoLayout = false; UICheckBox transportCheckBox = PanelUtils.AddPlainCheckBox(transportTab, Translations.Translate("LBR_TRN_CUS")); transportCheckBox.relativePosition = new Vector3(30f, 5f); transportCheckBox.isChecked = OptionsPanel.settings.UseTransportModes; transportCheckBox.eventCheckChanged += (control, isChecked) => { // Update mod settings. ModSettings.UseTransportModes = isChecked; // Update configuration file. OptionsPanel.settings.UseTransportModes = isChecked; Configuration <SettingsFile> .Save(); }; // Set up textfield arrays; low/high density. wealthLow = new UITextField[NumDensity][][]; wealthMed = new UITextField[NumDensity][][]; wealthHigh = new UITextField[NumDensity][][]; ecoWealthLow = new UITextField[NumDensity][][]; ecoWealthMed = new UITextField[NumDensity][][]; ecoWealthHigh = new UITextField[NumDensity][][]; // Second level of textfield arrays; age groups. for (int i = 0; i < NumDensity; ++i) { wealthLow[i] = new UITextField[NumAges][]; wealthMed[i] = new UITextField[NumAges][]; wealthHigh[i] = new UITextField[NumAges][]; ecoWealthLow[i] = new UITextField[NumAges][]; ecoWealthMed[i] = new UITextField[NumAges][]; ecoWealthHigh[i] = new UITextField[NumAges][]; // Third level of textfield arrays; transport modes. for (int j = 0; j < NumAges; ++j) { wealthLow[i][j] = new UITextField[NumTransport]; wealthMed[i][j] = new UITextField[NumTransport]; wealthHigh[i][j] = new UITextField[NumTransport]; ecoWealthLow[i][j] = new UITextField[NumTransport]; ecoWealthMed[i][j] = new UITextField[NumTransport]; ecoWealthHigh[i][j] = new UITextField[NumTransport]; } } // Headings. for (int i = 0; i < NumWealth; ++i) { // Wealth headings. float wealthX = (i * GroupWidth) + Column1; WealthIcon(transportTab, wealthX, 25f, ColumnWidth * 3, i + 1, Translations.Translate("LBR_TRN_WEA"), "InfoIconLandValue"); // Transport mode headings. ColumnIcon(transportTab, (i * GroupWidth) + Column1, ColumnIconHeight, FieldWidth, Translations.Translate("LBR_TRN_CAR"), "InfoIconTrafficCongestion"); ColumnIcon(transportTab, (i * GroupWidth) + Column2, ColumnIconHeight, FieldWidth, Translations.Translate("LBR_TRN_BIK"), "IconPolicyEncourageBiking"); ColumnIcon(transportTab, (i * GroupWidth) + Column3, ColumnIconHeight, FieldWidth, Translations.Translate("LBR_TRN_TAX"), "SubBarPublicTransportTaxi"); } // Rows by group. RowHeaderIcon(transportTab, currentY, Translations.Translate("LBR_TRN_RLO"), "ZoningResidentialLow", "Thumbnails"); AddDensityGroup(transportTab, wealthLow[0], wealthMed[0], wealthHigh[0]); RowHeaderIcon(transportTab, currentY, Translations.Translate("LBR_TRN_RHI"), "ZoningResidentialHigh", "Thumbnails"); AddDensityGroup(transportTab, wealthLow[1], wealthMed[1], wealthHigh[1]); RowHeaderIcon(transportTab, currentY, Translations.Translate("LBR_TRN_ERL"), "IconPolicySelfsufficient", "Ingame"); AddDensityGroup(transportTab, ecoWealthLow[0], ecoWealthMed[0], ecoWealthHigh[0]); RowHeaderIcon(transportTab, currentY, Translations.Translate("LBR_TRN_ERH"), "IconPolicySelfsufficient", "Ingame"); AddDensityGroup(transportTab, ecoWealthLow[1], ecoWealthMed[1], ecoWealthHigh[1]); // Buttons. AddButtons(transportTab); // Populate text fields. PopulateFields(); }
/// <summary> /// Adds immigration options tab to tabstrip. /// </summary> /// <param name="tabStrip">Tab strip to add to</param> /// <param name="tabIndex">Index number of tab</param> public ImmigrationOptions(UITabstrip tabStrip, int tabIndex) { // Add tab. UIPanel immigrationTab = PanelUtils.AddTab(tabStrip, Translations.Translate("LBR_IMM"), tabIndex); // Use vanilla. UICheckBox immigrationCheckBox = PanelUtils.AddPlainCheckBox(immigrationTab, Translations.Translate("LBR_IMM_VAR")); immigrationCheckBox.relativePosition = new Vector3(5f, 5f); immigrationCheckBox.isChecked = OptionsPanel.settings.RandomImmigrantEd; immigrationCheckBox.eventCheckChanged += (control, isChecked) => { // Update mod settings. ModSettings.UseTransportModes = isChecked; // Update configuration file. OptionsPanel.settings.RandomImmigrantEd = isChecked; Configuration <SettingsFile> .Save(); }; // Boost immigrant education. UICheckBox immiEduBoostCheck = PanelUtils.AddPlainCheckBox(immigrationTab, Translations.Translate("LBR_IMM_INC")); immiEduBoostCheck.relativePosition = new Vector3(5f, 50f); immiEduBoostCheck.isChecked = ModSettings.immiEduBoost; // Suppress immigrant education. UICheckBox immiEduDragCheck = PanelUtils.AddPlainCheckBox(immigrationTab, Translations.Translate("LBR_IMM_DEC")); immiEduDragCheck.relativePosition = new Vector3(5f, 75f); immiEduDragCheck.isChecked = ModSettings.immiEduDrag; immiEduBoostCheck.eventCheckChanged += (control, isChecked) => { // Update mod settings. ModSettings.immiEduBoost = isChecked; // Toggle immigrant boost check if needed. if (isChecked && immiEduDragCheck.isChecked) { immiEduDragCheck.isChecked = false; } // Update configuration file. Configuration <SettingsFile> .Save(); }; immiEduDragCheck.eventCheckChanged += (control, isChecked) => { // Update mod settings. ModSettings.immiEduDrag = isChecked; // Toggle immigrant boost check if needed. if (isChecked && immiEduBoostCheck.isChecked) { immiEduBoostCheck.isChecked = false; } // Update configuration file. Configuration <SettingsFile> .Save(); }; }