private void ResetBuildingToVanilla(ref BuildingInfo target, BuildingInfo template) { IndustryBuildingAI targetAI = (IndustryBuildingAI)target.m_buildingAI; IndustryBuildingAI templateAI = (IndustryBuildingAI)template.m_buildingAI; //Mod.DebugLine($"ConvertWS: name={target.name},{template.name}"); //Mod.DebugLine($" - construction={targetAI.m_constructionCost},{templateAI.m_constructionCost} - wp0:{targetAI.m_workPlaceCount0},{templateAI.m_workPlaceCount0} - wp1:{targetAI.m_workPlaceCount1},{templateAI.m_workPlaceCount1}"); targetAI.m_maintenanceCost = templateAI.m_maintenanceCost; targetAI.m_constructionCost = templateAI.m_constructionCost; targetAI.m_workPlaceCount0 = templateAI.m_workPlaceCount0; targetAI.m_workPlaceCount1 = templateAI.m_workPlaceCount1; targetAI.m_workPlaceCount2 = templateAI.m_workPlaceCount2; targetAI.m_workPlaceCount3 = templateAI.m_workPlaceCount3; targetAI.m_electricityConsumption = templateAI.m_electricityConsumption; targetAI.m_waterConsumption = templateAI.m_waterConsumption; targetAI.m_sewageAccumulation = templateAI.m_sewageAccumulation; targetAI.m_garbageAccumulation = templateAI.m_garbageAccumulation; targetAI.m_fireHazard = templateAI.m_fireHazard; // Cast AI handling if (targetAI is ExtractingFacilityAI targetAIef) { ExtractingFacilityAI templateAIef = (ExtractingFacilityAI)templateAI; //Mod.DebugLine($"Reset ai={targetAI.GetType().ToString()}, Vehicles:{targetAIef.m_outputVehicleCount}=>{templateAIef.m_outputVehicleCount}"); targetAIef.m_extractRate = templateAIef.m_extractRate; targetAIef.m_extractRadius = templateAIef.m_extractRadius; targetAIef.m_outputRate = templateAIef.m_outputRate; targetAIef.m_outputVehicleCount = templateAIef.m_outputVehicleCount; } //Mod.DebugLine($"AI type={targetAI.GetType().ToString()}"); }
public static void Prefix(ushort buildingID, ref Building buildingData, ExtractingFacilityAI __instance, out ushort __state) { if (Mod.IsIndustriesBuilding(__instance)) { __state = buildingData.m_customBuffer1; } else { __state = 0; } }
public static void Postfix(ushort buildingID, ref Building buildingData, ExtractingFacilityAI __instance, ref ushort __state) { int cargoDiff; if (Mod.IsIndustriesBuilding(__instance)) { // Output cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state) / RI_Data.GetFactorCargo(__instance.m_outputResource)); //Debug.Log($"ID:{buildingID}={(ushort)Mathf.Clamp(__state + cargoDiff, 0, 64000)} ({__state + cargoDiff}), state:{__state}, buff:{buildingData.m_customBuffer1}, diff:{cargoDiff}"); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state + cargoDiff, 0, 64000); } else { Mod.DebugLine($"Unknown EF instance {__instance.name} ({__instance.GetType()})"); } }
public static void Postfix(ref ExtractingFacilityAI ___m_extractingFacilityAI, ref ProcessingFacilityAI ___m_processingFacilityAI, ref InstanceID ___m_InstanceID, ref UIProgressBar ___m_inputBuffer, ref UIPanel ___m_inputSection, ref UIProgressBar ___m_outputBuffer, ref UIPanel ___m_outputSection) { ushort id = ___m_InstanceID.Building; ExtractingFacilityAI ai_ef = ___m_extractingFacilityAI; if (ai_ef != null) { int customBuffer = Convert.ToInt32(Singleton <BuildingManager> .instance.m_buildings.m_buffer[id].m_customBuffer1 * RI_Data.GetFactorCargo(ai_ef.m_outputResource)); int capacity = Convert.ToInt32(ai_ef.GetOutputBufferSize(id, ref Singleton <BuildingManager> .instance.m_buildings.m_buffer[id]) * RI_Data.GetFactorCargo(ai_ef.m_outputResource)); //Debug.Log($"EFAI-OST: {id} - {customBuffer}/{capacity}"); //___m_outputBuffer.value = IndustryWorldInfoPanel.SafelyNormalize(customBuffer, capacity); ___m_outputSection.tooltip = StringUtils.SafeFormat( Locale.Get("INDUSTRYPANEL_BUFFERTOOLTIP"), IndustryWorldInfoPanel.FormatResource((uint)customBuffer), IndustryWorldInfoPanel.FormatResourceWithUnit((uint)capacity, ai_ef.m_outputResource) ); } }
public static void Postfix(ref ExtractingFacilityAI ___m_extractingFacilityAI, ref ProcessingFacilityAI ___m_processingFacilityAI, ref InstanceID ___m_InstanceID, ref UIPanel ___m_inputSection, ref UIPanel ___m_inputTooltipArea, ref UIPanel ___m_outputSection, ref UIPanel ___m_outputTooltipArea) { ushort id = ___m_InstanceID.Building; ExtractingFacilityAI ai_ef = ___m_extractingFacilityAI; if (ai_ef != null) { Building building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[id]; _updateTooltip(id, building.m_customBuffer1, ai_ef.GetOutputBufferSize(id, ref building), ai_ef.m_outputResource, ref ___m_outputSection, ref ___m_outputTooltipArea); //Debug.Log($"EF-{id}"); } ProcessingFacilityAI ai_pf = ___m_processingFacilityAI; if (ai_pf != null) { Building building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[id]; _updateTooltip(id, building.m_customBuffer2, ai_pf.GetInputBufferSize1(id, ref building), ai_pf.m_inputResource1, ref ___m_inputSection, ref ___m_inputTooltipArea); _updateTooltip(id, building.m_customBuffer1, ai_pf.GetOutputBufferSize(id, ref building), ai_pf.m_outputResource, ref ___m_outputSection, ref ___m_outputTooltipArea); //Debug.Log($"PF-{id}"); } }
} //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); }