Ejemplo n.º 1
0
        protected override void setAutobudget()
        {
            BuildingManager bm = Singleton <BuildingManager> .instance;

            foreach (ushort n in Helper.ServiceBuildingNs(ItemClass.Service.Garbage))
            {
                Building bld = bm.m_buildings.m_buffer[(int)n];
                if ((bld.m_flags & Building.Flags.Active) == 0)
                {
                    continue;
                }

                if (bld.Info.m_buildingAI.GetType() == typeof(LandfillSiteAI))
                {
                    LandfillSiteAI ai = (LandfillSiteAI)bld.Info.m_buildingAI;
                    if (ai.m_electricityProduction > 0 || ai.m_materialProduction > 0) // If inceneration plant or recycling center
                    {
                        if (ai.m_garbageCapacity > 0 && ai.GetGarbageAmount(n, ref bld) * 100 / ai.m_garbageCapacity > MaximumGarbageAmount)
                        {
                            setBudget(BudgetMaxValue);
                            return;
                        }
                    }
                }
            }

            setBudget(getBudgetForVehicles(typeof(LandfillSiteAI), 1, 50, BudgetMaxValue));
        }
Ejemplo n.º 2
0
        public static void UpdatePrefabs(bool maybeDuringGame)
        {
            DifficultyManager d = Singleton <DifficultyManager> .instance;

            if (maybeDuringGame)
            {
                if (d.GroundPollutionRadiusMultiplier.Value == GroundPollutionRadiusMultiplier_old && d.NoisePollutionRadiusMultiplier.Value == NoiseRadiusMultiplier_old)
                {
                    return;
                }
            }
            else
            {
                if (d.GroundPollutionRadiusMultiplier.Value == 100 && d.NoisePollutionRadiusMultiplier.Value == 100)
                {
                    return;
                }
            }

            try
            {
                float newPollutionRadius, newNoiseRadius;

                DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, "Difficulty tuning mod: changing prefabs...");

                foreach (BuildingCollection bc in UnityEngine.Object.FindObjectsOfType <BuildingCollection>())
                {
                    foreach (BuildingInfo bi in bc.m_prefabs)
                    {
                        BuildingAI bAI = bi.m_buildingAI;

                        PowerPlantAI ppAI = bAI as PowerPlantAI;
                        if (ppAI != null)
                        {
                            if (!groundPollutionRadiusOriginal.ContainsKey(ppAI.name))
                            {
                                groundPollutionRadiusOriginal.Add(ppAI.name, ppAI.m_pollutionRadius);
                            }
                            if (!noiseRadiusOriginal.ContainsKey(ppAI.name))
                            {
                                noiseRadiusOriginal.Add(ppAI.name, ppAI.m_noiseRadius);
                            }

                            newPollutionRadius = groundPollutionRadiusOriginal[ppAI.name] * 0.01f * d.GroundPollutionRadiusMultiplier.Value;
                            prefabChangedMessage(ppAI.name, "ground pollution radius", groundPollutionRadiusOriginal[ppAI.name], newPollutionRadius);
                            ppAI.m_pollutionRadius = newPollutionRadius;

                            newNoiseRadius = noiseRadiusOriginal[ppAI.name] * 0.01f * d.NoisePollutionRadiusMultiplier.Value;
                            prefabChangedMessage(ppAI.name, "noise pollution radius", noiseRadiusOriginal[ppAI.name], newNoiseRadius);
                            ppAI.m_noiseRadius = newNoiseRadius;

                            continue;
                        }

                        LandfillSiteAI lfsAI = bAI as LandfillSiteAI;
                        if (lfsAI != null)
                        {
                            if (!groundPollutionRadiusOriginal.ContainsKey(lfsAI.name))
                            {
                                groundPollutionRadiusOriginal.Add(lfsAI.name, lfsAI.m_pollutionRadius);
                            }
                            if (!noiseRadiusOriginal.ContainsKey(lfsAI.name))
                            {
                                noiseRadiusOriginal.Add(lfsAI.name, lfsAI.m_noiseRadius);
                            }

                            newPollutionRadius = groundPollutionRadiusOriginal[lfsAI.name] * 0.01f * d.GroundPollutionRadiusMultiplier.Value;
                            prefabChangedMessage(lfsAI.name, "ground pollution radius", groundPollutionRadiusOriginal[lfsAI.name], newPollutionRadius);
                            lfsAI.m_pollutionRadius = newPollutionRadius;

                            newNoiseRadius = noiseRadiusOriginal[lfsAI.name] * 0.01f * d.NoisePollutionRadiusMultiplier.Value;
                            prefabChangedMessage(lfsAI.name, "noise pollution radius", noiseRadiusOriginal[lfsAI.name], newNoiseRadius);
                            lfsAI.m_noiseRadius = newNoiseRadius;

                            continue;
                        }

                        WaterFacilityAI wfAI = bAI as WaterFacilityAI;
                        if (wfAI != null)
                        {
                            if (!noiseRadiusOriginal.ContainsKey(wfAI.name))
                            {
                                noiseRadiusOriginal.Add(wfAI.name, wfAI.m_noiseRadius);
                            }

                            newNoiseRadius = noiseRadiusOriginal[wfAI.name] * 0.01f * d.NoisePollutionRadiusMultiplier.Value;
                            prefabChangedMessage(wfAI.name, "noise pollution radius", noiseRadiusOriginal[wfAI.name], newNoiseRadius);
                            wfAI.m_noiseRadius = newNoiseRadius;

                            continue;
                        }
                    }
                }

                GroundPollutionRadiusMultiplier_old = d.GroundPollutionRadiusMultiplier.Value;
                NoiseRadiusMultiplier_old           = d.NoisePollutionRadiusMultiplier.Value;
            }
            catch (Exception ex)
            {
                DebugOutputPanel.AddMessage(PluginManager.MessageType.Message, ex.Message);
            }
        }
Ejemplo n.º 3
0
        public override void OnUpdate(float realTimeDelta, float simulationTimeDelta)
        {
            try
            {
                if (!_running)
                {
                    switch (_modConfig.Interval)
                    {
                    case 1:
                        _intervalPassed = _simulationManager.m_currentGameTime.Day != _cachedInterval ? true : false;
                        _cachedInterval = _simulationManager.m_currentGameTime.Day;
                        break;

                    case 2:
                        _intervalPassed = _simulationManager.m_currentGameTime.Month != _cachedInterval ? true : false;
                        _cachedInterval = _simulationManager.m_currentGameTime.Month;
                        break;

                    case 3:
                        _intervalPassed = _simulationManager.m_currentGameTime.Year != _cachedInterval ? true : false;
                        _cachedInterval = _simulationManager.m_currentGameTime.Year;
                        break;

                    case 4:
                        _timer += realTimeDelta;
                        if (_timer > 5f)
                        {
                            _timer          = _timer - 5f;
                            _intervalPassed = true;
                        }
                        break;

                    case 5:
                        _timer += realTimeDelta;
                        if (_timer > 10f)
                        {
                            _timer          = _timer - 10f;
                            _intervalPassed = true;
                        }
                        break;

                    case 6:
                        _timer += realTimeDelta;
                        if (_timer > 30f)
                        {
                            _timer          = _timer - 30f;
                            _intervalPassed = true;
                        }
                        break;

                    default:
                        break;
                    }
                }

                if (_intervalPassed)
                {
                    _running = true;

                    _intervalPassed = false;

                    _buildingIdsToEmpty.Clear();
                    _buildingIdsToStopEmptying.Clear();

                    int   capacity;
                    int   amount;
                    float percentage;

                    for (ushort i = 0; i < _buildingManager.m_buildings.m_buffer.Length; i++)
                    {
                        _building = _buildingManager.m_buildings.m_buffer[i];

                        _buildingAI = _building.Info.m_buildingAI;

                        if (_buildingAI is WarehouseAI && _buildingAI.CanBeEmptied() && SteamHelper.IsDLCOwned(SteamHelper.DLC.IndustryDLC))
                        {
                            amount     = _building.m_customBuffer1;
                            percentage = (float)amount / 10;

                            if (_modConfig.EmptyWarehouses && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdWarehouses)
                            {
                                _buildingIdsToEmpty.Add(i);
                            }

                            if (_modConfig.StopEmptyingWarehouses && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdWarehouses)
                            {
                                _buildingIdsToStopEmptying.Add(i);
                            }
                        }
                        else if (_buildingAI is LandfillSiteAI && _buildingAI.CanBeEmptied())
                        {
                            _landfillSiteAI = _buildingAI as LandfillSiteAI;

                            capacity   = _landfillSiteAI.m_garbageCapacity;
                            amount     = Mathf.Min(capacity, _building.m_customBuffer1 * 1000 + _building.m_garbageBuffer);
                            percentage = ((float)amount / (float)capacity) * 100;

                            if (_building.Info.m_dlcRequired == SteamHelper.DLC_BitMask.UrbanDLC)
                            {
                                if (_modConfig.EmptyWasteTransferFacilities && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdWasteTransferFacilities)
                                {
                                    _buildingIdsToEmpty.Add(i);
                                }

                                if (_modConfig.StopEmptyingWasteTransferFacilities && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdWasteTransferFacilities)
                                {
                                    _buildingIdsToStopEmptying.Add(i);
                                }
                            }
                            else
                            {
                                if (_modConfig.EmptyLandfillSites && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdLandfillSites)
                                {
                                    _buildingIdsToEmpty.Add(i);
                                }

                                if (_modConfig.StopEmptyingLandfillSites && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdLandfillSites)
                                {
                                    _buildingIdsToStopEmptying.Add(i);
                                }
                            }
                        }
                        else if (_buildingAI is CemeteryAI && _buildingAI.CanBeEmptied())
                        {
                            _cemeteryAI = _buildingAI as CemeteryAI;

                            capacity   = _cemeteryAI.m_graveCount;
                            amount     = _building.m_customBuffer1;
                            percentage = ((float)amount / (float)capacity) * 100;

                            if (_modConfig.EmptyCemeteries && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdCemeteries)
                            {
                                _buildingIdsToEmpty.Add(i);
                            }

                            if (_modConfig.StopEmptyingCemeteries && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdCemeteries)
                            {
                                _buildingIdsToStopEmptying.Add(i);
                            }
                        }
                        else if (_buildingAI is SnowDumpAI && _buildingAI.CanBeEmptied())
                        {
                            _snowDumpAI = _buildingAI as SnowDumpAI;

                            capacity   = _snowDumpAI.m_snowCapacity;
                            amount     = Mathf.Min(capacity, _building.m_customBuffer1 * 1000 + _building.m_garbageBuffer);
                            percentage = ((float)amount / (float)capacity) * 100;

                            if (_modConfig.EmptySnowDumps && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdSnowDumps)
                            {
                                _buildingIdsToEmpty.Add(i);
                            }

                            if (_modConfig.StopEmptyingSnowDumps && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdSnowDumps)
                            {
                                _buildingIdsToStopEmptying.Add(i);
                            }
                        }
                    }

                    EmptyUtils.EmptyBuildings(_buildingIdsToEmpty, true);
                    EmptyUtils.EmptyBuildings(_buildingIdsToStopEmptying, false);

                    _running = false;
                }
            }
            catch (Exception e)
            {
                Debug.Log("[Empty It!] Threading:OnUpdate -> Exception: " + e.Message);
                _running = false;
            }
        }
Ejemplo n.º 4
0
        }        //public

        public static int TotalWorkCount(ushort buildingID, Building data, bool checkOnly, bool update)
        {
            int totalWorkCount = 0;

            //For performance
#if FASTRUN
            update = false;
#endif
            if (BuildingData.isBuildingWorkerUpdated[buildingID] && !update)
            {
                totalWorkCount = BuildingData.buildingWorkCount[buildingID];
            }
            else
            {
                if (data.Info.m_buildingAI is LandfillSiteAI)
                {
                    LandfillSiteAI buildingAI = data.Info.m_buildingAI as LandfillSiteAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is ExtractingFacilityAI)
                {
                    ExtractingFacilityAI buildingAI = data.Info.m_buildingAI as ExtractingFacilityAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is ProcessingFacilityAI)
                {
                    ProcessingFacilityAI buildingAI = data.Info.m_buildingAI as ProcessingFacilityAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is PoliceStationAI)
                {
                    PoliceStationAI buildingAI = data.Info.m_buildingAI as PoliceStationAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is FireStationAI)
                {
                    FireStationAI buildingAI = data.Info.m_buildingAI as FireStationAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is HospitalAI)
                {
                    HospitalAI buildingAI = data.Info.m_buildingAI as HospitalAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is CargoStationAI)
                {
                    CargoStationAI buildingAI = data.Info.m_buildingAI as CargoStationAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is TransportStationAI)
                {
                    TransportStationAI buildingAI = data.Info.m_buildingAI as TransportStationAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is CemeteryAI)
                {
                    CemeteryAI buildingAI = data.Info.m_buildingAI as CemeteryAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MedicalCenterAI)
                {
                    MedicalCenterAI buildingAI = data.Info.m_buildingAI as MedicalCenterAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MonumentAI)
                {
                    MonumentAI buildingAI = data.Info.m_buildingAI as MonumentAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is DepotAI)
                {
                    DepotAI buildingAI = data.Info.m_buildingAI as DepotAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is HelicopterDepotAI)
                {
                    HelicopterDepotAI buildingAI = data.Info.m_buildingAI as HelicopterDepotAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MaintenanceDepotAI)
                {
                    MaintenanceDepotAI buildingAI = data.Info.m_buildingAI as MaintenanceDepotAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is FirewatchTowerAI)
                {
                    FirewatchTowerAI buildingAI = data.Info.m_buildingAI as FirewatchTowerAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is DoomsdayVaultAI)
                {
                    DoomsdayVaultAI buildingAI = data.Info.m_buildingAI as DoomsdayVaultAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is DisasterResponseBuildingAI)
                {
                    DisasterResponseBuildingAI buildingAI = data.Info.m_buildingAI as DisasterResponseBuildingAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is HadronColliderAI)
                {
                    HadronColliderAI buildingAI = data.Info.m_buildingAI as HadronColliderAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is SchoolAI)
                {
                    SchoolAI buildingAI = data.Info.m_buildingAI as SchoolAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is PowerPlantAI)
                {
                    PowerPlantAI buildingAI = data.Info.m_buildingAI as PowerPlantAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is SnowDumpAI)
                {
                    SnowDumpAI buildingAI = data.Info.m_buildingAI as SnowDumpAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is WarehouseAI)
                {
                    WarehouseAI buildingAI = data.Info.m_buildingAI as WarehouseAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is WaterFacilityAI)
                {
                    WaterFacilityAI buildingAI = data.Info.m_buildingAI as WaterFacilityAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is SaunaAI)
                {
                    SaunaAI buildingAI = data.Info.m_buildingAI as SaunaAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is PostOfficeAI)
                {
                    PostOfficeAI buildingAI = data.Info.m_buildingAI as PostOfficeAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is RadioMastAI)
                {
                    RadioMastAI buildingAI = data.Info.m_buildingAI as RadioMastAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is SpaceElevatorAI)
                {
                    SpaceElevatorAI buildingAI = data.Info.m_buildingAI as SpaceElevatorAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is SpaceRadarAI)
                {
                    SpaceRadarAI buildingAI = data.Info.m_buildingAI as SpaceRadarAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MainIndustryBuildingAI)
                {
                    MainIndustryBuildingAI buildingAI = data.Info.m_buildingAI as MainIndustryBuildingAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is AuxiliaryBuildingAI)
                {
                    AuxiliaryBuildingAI buildingAI = data.Info.m_buildingAI as AuxiliaryBuildingAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is ShelterAI)
                {
                    ShelterAI buildingAI = data.Info.m_buildingAI as ShelterAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is HeatingPlantAI)
                {
                    HeatingPlantAI buildingAI = data.Info.m_buildingAI as HeatingPlantAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MainCampusBuildingAI)
                {
                    MainCampusBuildingAI buildingAI = data.Info.m_buildingAI as MainCampusBuildingAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MuseumAI)
                {
                    MuseumAI buildingAI = data.Info.m_buildingAI as MuseumAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is UniqueFactoryAI)
                {
                    UniqueFactoryAI buildingAI = data.Info.m_buildingAI as UniqueFactoryAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is UniqueFacultyAI)
                {
                    UniqueFacultyAI buildingAI = data.Info.m_buildingAI as UniqueFacultyAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is VarsitySportsArenaAI)
                {
                    VarsitySportsArenaAI buildingAI = data.Info.m_buildingAI as VarsitySportsArenaAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is LibraryAI)
                {
                    LibraryAI buildingAI = data.Info.m_buildingAI as LibraryAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is FishFarmAI)
                {
                    FishFarmAI buildingAI = data.Info.m_buildingAI as FishFarmAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is FishingHarborAI)
                {
                    FishingHarborAI buildingAI = data.Info.m_buildingAI as FishingHarborAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is EldercareAI)
                {
                    EldercareAI buildingAI = data.Info.m_buildingAI as EldercareAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is ChildcareAI)
                {
                    ChildcareAI buildingAI = data.Info.m_buildingAI as ChildcareAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else if (data.Info.m_buildingAI is MarketAI)
                {
                    MarketAI buildingAI = data.Info.m_buildingAI as MarketAI;
                    totalWorkCount = buildingAI.m_workPlaceCount0 + buildingAI.m_workPlaceCount1 + buildingAI.m_workPlaceCount2 + buildingAI.m_workPlaceCount3;
                }
                else
                {
                    if (!checkOnly)
                    {
                        DebugLog.LogToFileOnly("Error: find unknow building = " + data.Info.m_buildingAI.ToString());
                    }
                }

                BuildingData.isBuildingWorkerUpdated[buildingID] = true;
                BuildingData.buildingWorkCount[buildingID]       = totalWorkCount;
            }
            return(totalWorkCount);
        }
Ejemplo n.º 5
0
        private void AddPassedThresholdsServiceBuildingsToLists(FastList <ushort> serviceBuildings)
        {
            try
            {
                _buildings = _buildingManager.m_buildings.m_buffer;

                int   capacity;
                int   amount;
                float percentage;

                foreach (ushort buildingId in _serviceBuildings)
                {
                    _building = _buildings[buildingId];

                    _buildingAI = _buildings[buildingId].Info.m_buildingAI;

                    if (_buildingAI is LandfillSiteAI && _buildingAI.CanBeEmptied())
                    {
                        _landfillSiteAI = _buildingAI as LandfillSiteAI;

                        capacity   = _landfillSiteAI.m_garbageCapacity;
                        amount     = Mathf.Min(capacity, _building.m_customBuffer1 * 1000 + _building.m_garbageBuffer);
                        percentage = ((float)amount / (float)capacity) * 100;

                        if (_modConfig.EmptyLandfillSites && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdLandfillSites)
                        {
                            _buildingIdsToEmpty.Add(buildingId);
                        }

                        if (_modConfig.StopEmptyingLandfillSites && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdLandfillSites)
                        {
                            _buildingIdsToStopEmptying.Add(buildingId);
                        }
                    }
                    else if (_buildingAI is CemeteryAI && _buildingAI.CanBeEmptied())
                    {
                        _cemeteryAI = _buildingAI as CemeteryAI;

                        capacity   = _cemeteryAI.m_graveCount;
                        amount     = _building.m_customBuffer1;
                        percentage = ((float)amount / (float)capacity) * 100;

                        if (_modConfig.EmptyCemeteries && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdCemeteries)
                        {
                            _buildingIdsToEmpty.Add(buildingId);
                        }

                        if (_modConfig.StopEmptyingCemeteries && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdCemeteries)
                        {
                            _buildingIdsToStopEmptying.Add(buildingId);
                        }
                    }
                    else if (_buildingAI is SnowDumpAI && _buildingAI.CanBeEmptied())
                    {
                        _snowDumpAI = _buildingAI as SnowDumpAI;

                        capacity   = _snowDumpAI.m_snowCapacity;
                        amount     = Mathf.Min(capacity, _building.m_customBuffer1 * 1000 + _building.m_garbageBuffer);
                        percentage = ((float)amount / (float)capacity) * 100;

                        if (_modConfig.EmptySnowDumps && ((_building.m_flags & Building.Flags.Downgrading) == Building.Flags.None) && percentage >= _modConfig.UpperThresholdSnowDumps)
                        {
                            _buildingIdsToEmpty.Add(buildingId);
                        }

                        if (_modConfig.StopEmptyingSnowDumps && ((_building.m_flags & Building.Flags.Downgrading) != Building.Flags.None) && percentage <= _modConfig.LowerThresholdSnowDumps)
                        {
                            _buildingIdsToStopEmptying.Add(buildingId);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Debug.Log("[Empty It!] Threading:AddPassedThresholdsServiceBuildingsToLists -> Exception: " + e.Message);
            }
        }