public static void UpdateSliders()
        {
            UIPanel budgetPanel = getBudgetPanel();

            if (budgetPanel != null)
            {
                SimulationManager          sm = Singleton <SimulationManager> .instance;
                AutobudgetObjectsContainer c  = Singleton <AutobudgetManager> .instance.container;

                freezeUI = true;
                foreach (AutobudgetBase obj in c.AllAutobudgetObjects)
                {
                    UIComponent budgetItem = budgetPanel.Find(obj.GetBudgetItemName());
                    if (budgetItem != null)
                    {
                        UISlider slider       = budgetItem.Find <UISlider>(sm.m_isNightTime ? "NightSlider" : "DaySlider");
                        int      updatedValue = Singleton <EconomyManager> .instance.GetBudget(obj.GetService(), obj.GetSubService(), sm.m_isNightTime);

                        if (slider.value != updatedValue)
                        {
                            slider.value = updatedValue;
                        }
                    }
                }
                freezeUI = false;
            }
        }
        private static void removeControls()
        {
            UITabContainer economyContainer = ToolsModifierControl.economyPanel.component.Find <UITabContainer>("EconomyContainer");

            if (economyContainer != null)
            {
                UIPanel budgetPanel = economyContainer.Find <UIPanel>("Budget");
                if (budgetPanel != null)
                {
                    AutobudgetObjectsContainer c = Singleton <AutobudgetManager> .instance.container;

                    foreach (AutobudgetBase obj in c.AllAutobudgetObjects)
                    {
                        UIPanel container = budgetPanel.Find <UIPanel>(obj.GetEconomyPanelContainerName());
                        if (container != null)
                        {
                            UIPanel budgetItem = container.Find <UIPanel>(obj.GetBudgetItemName());
                            if (budgetItem != null)
                            {
                                string controlName = AutobudgetItemPanel.GetControlNameFromItemName(obj.GetBudgetItemName());
                                AutobudgetItemPanel autobudgetItemControl = budgetItem.Find <AutobudgetItemPanel>(controlName);
                                if (autobudgetItemControl != null)
                                {
                                    budgetItem.RemoveUIComponent(autobudgetItemControl);
                                    Component.Destroy(autobudgetItemControl);
                                }
                            }
                        }
                    }
                }
            }
        }
        public void TotalAutobudgetOptionsUpdateUI()
        {
            if (UI_Electricity_Enabled == null)
            {
                return;
            }

            AutobudgetObjectsContainer c = Singleton <AutobudgetManager> .instance.container;

            freezeUI = true;

            UI_Electricity_Enabled.isChecked   = c.AutobudgetElectricity.Enabled;
            UI_Electricity_Buffer.value        = c.AutobudgetElectricity.AutobudgetBuffer;
            UI_Electricity_MaxBudget.value     = c.AutobudgetElectricity.BudgetMaxValue;
            UI_Electricity_AutoPause.isChecked = c.AutobudgetElectricity.PauseWhenBudgetTooHigh;

            UI_Water_Enabled.isChecked      = c.AutobudgetWater.Enabled;
            UI_Water_Buffer.value           = c.AutobudgetWater.AutobudgetBuffer;
            UI_Water_MaxBudget.value        = c.AutobudgetWater.BudgetMaxValue;
            UI_Water_AutoPause.isChecked    = c.AutobudgetWater.PauseWhenBudgetTooHigh;
            UI_Water_StorageAmount.value    = c.AutobudgetWater.TargetWaterStorageRatio;
            UI_Water_UseHeating.isChecked   = c.AutobudgetWater.UseHeatingAutobudget;
            UI_Water_MaxHeatingBudget.value = c.AutobudgetWater.HeatingBudgetMaxValue;

            UI_Garbage_Enabled.isChecked = c.AutobudgetGarbage.Enabled;
            UI_Garbage_MaxBudget.value   = c.AutobudgetGarbage.BudgetMaxValue;
            UI_Garbage_MaxAmount.value   = c.AutobudgetGarbage.MaximumGarbageAmount;

            UI_Healthcare_Enabled.isChecked = c.AutobudgetHealthcare.Enabled;
            UI_Healthcare_MinBudget.value   = c.AutobudgetHealthcare.BudgetMinValue;
            UI_Healthcare_MaxBudget.value   = c.AutobudgetHealthcare.BudgetMaxValue;

            UI_Education_Enabled.isChecked    = c.AutobudgetEducation.Enabled;
            UI_Education_ElementaryRate.value = c.AutobudgetEducation.ElementaryEducationTargetRate;
            UI_Education_HighRate.value       = c.AutobudgetEducation.HighEducationTargetRate;
            UI_Education_MaxBudget.value      = c.AutobudgetEducation.BudgetMaxValue;

            UI_Police_Enabled.isChecked = c.AutobudgetPolice.Enabled;
            UI_Police_MinBudget.value   = c.AutobudgetPolice.BudgetMinValue;
            UI_Police_MaxBudget.value   = c.AutobudgetPolice.BudgetMaxValue;

            UI_Fire_Enabled.isChecked     = c.AutobudgetFire.Enabled;
            UI_Fire_MinBudget.value       = c.AutobudgetFire.BudgetMinValue;
            UI_Fire_MaxBudget.value       = c.AutobudgetFire.BudgetMaxValue;
            UI_Fire_TrucksExcessNum.value = c.AutobudgetFire.FireTrucksExcessNum;

            UI_Road_Enabled.isChecked = c.AutobudgetRoad.Enabled;
            UI_Road_MinBudget.value   = c.AutobudgetRoad.BudgetMinValue;
            UI_Road_MaxBudget.value   = c.AutobudgetRoad.BudgetMaxValue;

            UI_Post_Enabled.isChecked = c.AutobudgetPost.Enabled;
            UI_Post_MaxBudget.value   = c.AutobudgetPost.BudgetMaxValue;

            UI_Taxi_Enabled.isChecked            = c.AutobudgetTaxi.Enabled;
            UI_Taxi_MaxBudget.value              = c.AutobudgetTaxi.BudgetMaxValue;
            UI_Taxi_DepotVehiclesExcessNum.value = c.AutobudgetTaxi.TargetNumberOfVehiclesWaitingAtDepot;
            UI_Taxi_StandVehiclesExcessNum.value = c.AutobudgetTaxi.TargetNumberOfVehiclesWaitingAtStand;

            freezeUI = false;
        }
Example #4
0
        public void ReadValuesFromFile()
        {
            container = AutobudgetObjectsContainer.CreateFromFile();
            if (container == null)
            {
                container = new AutobudgetObjectsContainer();
            }

            container.InitObjects();
        }
Example #5
0
        protected override void setAutobudget()
        {
            DistrictManager dm = Singleton <DistrictManager> .instance;

            int capacity = dm.m_districts.m_buffer[0].GetElectricityCapacity();

            // No electricity
            if (capacity <= 0)
            {
                return;
            }

            int consumption = dm.m_districts.m_buffer[0].GetElectricityConsumption();

            // No changes from the previous state
            if (capacity == capacity_prev && consumption == consumption_prev)
            {
                return;
            }

            capacity_prev    = capacity;
            consumption_prev = consumption;

            int electricityFromGarbage = getGarbageElectricityProduction();
            //Debug.Log(string.Format("capacity = {0}, consumption = {1}, getGarbageElectricityProduction = {2}", capacity, consumption, getGarbageElectricityProduction()));

            AutobudgetObjectsContainer o  = Singleton <AutobudgetManager> .instance.container;
            EconomyManager             em = Singleton <EconomyManager> .instance;
            SimulationManager          sm = Singleton <SimulationManager> .instance;

            int budget    = em.GetBudget(ItemClass.Service.Electricity, ItemClass.SubService.None, sm.m_isNightTime);
            int newBudget = calculateNewBudget(capacity - electricityFromGarbage, consumption - electricityFromGarbage, budget, getBufferCoefficient(AutobudgetBuffer));

            newBudget = Math.Min(newBudget, BudgetMaxValue);

            if (newBudget == BudgetMaxValue && PauseWhenBudgetTooHigh && !isPausedRecently)
            {
                SetPause();
                isPausedRecently = true;
                Singleton <InfoManager> .instance.SetCurrentMode(InfoManager.InfoMode.Electricity, InfoManager.SubInfoMode.Default);
            }

            if (newBudget < BudgetMaxValue)
            {
                isPausedRecently = false;
            }

            setBudget(newBudget);
        }
        public static void UpdateControls()
        {
            UIPanel budgetPanel = getBudgetPanel();

            if (budgetPanel != null)
            {
                AutobudgetObjectsContainer c = Singleton <AutobudgetManager> .instance.container;

                freezeUI = true;
                foreach (AutobudgetBase obj in c.AllAutobudgetObjects)
                {
                    updateCheckBox(budgetPanel, obj.GetBudgetItemName(), obj.Enabled);
                }
                freezeUI = false;
            }
        }
        public static AutobudgetObjectsContainer CreateFromFile()
        {
            string path = getOptionsFilePath();

            if (!File.Exists(path))
            {
                return(null);
            }

            try
            {
                XmlSerializer ser    = new XmlSerializer(typeof(AutobudgetObjectsContainer));
                TextReader    reader = new StreamReader(path);
                AutobudgetObjectsContainer instance = (AutobudgetObjectsContainer)ser.Deserialize(reader);
                reader.Close();

                return(instance);
            }
            catch
            {
                return(null);
            }
        }
        private static void createControls()
        {
            UITabContainer economyContainer = ToolsModifierControl.economyPanel.component.Find <UITabContainer>("EconomyContainer");

            if (economyContainer != null)
            {
                UIPanel budgetPanel = economyContainer.Find <UIPanel>("Budget");
                if (budgetPanel != null)
                {
                    AutobudgetObjectsContainer c = Singleton <AutobudgetManager> .instance.container;

                    foreach (AutobudgetBase obj in c.AllAutobudgetObjects)
                    {
                        UIPanel container = budgetPanel.Find <UIPanel>(obj.GetEconomyPanelContainerName());
                        if (container != null)
                        {
                            UIPanel budgetItem = container.Find <UIPanel>(obj.GetBudgetItemName());
                            if (budgetItem != null)
                            {
                                AutobudgetItemPanel autobudgetPanel = budgetItem.AddUIComponent <AutobudgetItemPanel>();
                                autobudgetPanel.SetName(obj.GetBudgetItemName());
                                autobudgetPanel.isChecked = obj.Enabled;
                                autobudgetPanel.SetCheckCallback(delegate(bool isChecked)
                                {
                                    if (!freezeUI)
                                    {
                                        obj.Enabled = isChecked;
                                        Mod.UpdateUI();
                                    }
                                });
                            }
                        }
                    }
                }
            }
        }
Example #9
0
 public void ResetToDefaultValues()
 {
     container = new AutobudgetObjectsContainer();
     container.InitObjects();
 }
        protected override void setAutobudget()
        {
            DistrictManager dm = Singleton <DistrictManager> .instance;

            // Water
            int waterCapacity    = dm.m_districts.m_buffer[0].GetWaterCapacity();
            int waterConsumption = dm.m_districts.m_buffer[0].GetWaterConsumption();
            // Sewage
            int sewageCapacity     = dm.m_districts.m_buffer[0].GetSewageCapacity();
            int sewageAccumulation = dm.m_districts.m_buffer[0].GetSewageAccumulation();

            // No water and no sewage
            if (waterCapacity <= 0 && sewageCapacity <= 0)
            {
                return;
            }

            int waterStorageCapacity = dm.m_districts.m_buffer[0].GetWaterStorageCapacity();
            int waterStorageAmount   = dm.m_districts.m_buffer[0].GetWaterStorageAmount();
            int waterStorageRatio    = waterStorageCapacity == 0 ? 0 : waterStorageAmount * 100 / waterStorageCapacity;

            AutobudgetObjectsContainer o  = Singleton <AutobudgetManager> .instance.container;
            EconomyManager             em = Singleton <EconomyManager> .instance;
            SimulationManager          sm = Singleton <SimulationManager> .instance;

            int budget = em.GetBudget(ItemClass.Service.Water, ItemClass.SubService.None, sm.m_isNightTime);

            float buffer          = getBufferCoefficient(AutobudgetBuffer);
            int   newWaterBudget  = waterStorageRatio > TargetWaterStorageRatio ? 50 : calculateNewBudget(waterCapacity, waterConsumption, budget, buffer);
            int   newSewageBudget = calculateNewBudget(sewageCapacity, sewageAccumulation, budget, buffer);
            int   newBudget       = Math.Max(newWaterBudget, newSewageBudget);

            newBudget = Math.Min(newBudget, BudgetMaxValue);

            if (newBudget == BudgetMaxValue && PauseWhenBudgetTooHigh && !isPausedRecently)
            {
                SetPause();
                isPausedRecently = true;
                Singleton <InfoManager> .instance.SetCurrentMode(InfoManager.InfoMode.Water, InfoManager.SubInfoMode.Default);
            }

            if (newBudget < BudgetMaxValue)
            {
                isPausedRecently = false;
            }

            // Heating autobudget
            if (UseHeatingAutobudget && newBudget < HeatingBudgetMaxValue)
            {
                if (heatingCounter-- <= 0)
                {
                    heatingCounter = heatingRefreshCount;

                    if (currentHeatingBudget < newBudget)
                    {
                        currentHeatingBudget = newBudget;
                    }

                    int             heatingProblemCount = 0;
                    int             allBldCount         = 0;
                    BuildingManager bm = Singleton <BuildingManager> .instance;
                    for (int n = 0; n <= (255 + 1) * 192 - 1; n++)
                    {
                        Building.Flags flags = bm.m_buildings.m_buffer[n].m_flags;
                        if ((flags & Building.Flags.Created) != Building.Flags.None)
                        {
                            if (bm.m_buildings.m_buffer[n].m_heatingProblemTimer > 0)
                            {
                                heatingProblemCount++;
                            }
                            allBldCount++;
                        }
                    }

                    if (allBldCount > 0)
                    {
                        if (heatingProblemCount > 0)
                        {
                            currentHeatingBudget += 1 + heatingProblemCount * 20 / allBldCount;
                        }
                        else
                        {
                            currentHeatingBudget -= 1;
                        }
                    }
                }

                if (currentHeatingBudget > HeatingBudgetMaxValue)
                {
                    currentHeatingBudget = HeatingBudgetMaxValue;
                }

                if (currentHeatingBudget > newBudget)
                {
                    newBudget = currentHeatingBudget;
                }
            }

            setBudget(newBudget);
        }