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)); }
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); } }
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; } }
} //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); }
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); } }