예제 #1
0
        /// <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);
        }
예제 #2
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;
        }
예제 #3
0
        /// <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();
            };
        }