public static void Postfix(ushort buildingID, ref Building buildingData, ProcessingFacilityAI __instance, ref ushort[] __state) { int cargoDiff = 0; if (Mod.IsIndustriesBuilding(__instance)) { // Input if (__instance.m_inputResource1 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[1] - buildingData.m_customBuffer2) / RI_Data.GetFactorCargo(__instance.m_inputResource1)); buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1] - cargoDiff, 0, 64000); } if (__instance.m_inputResource2 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[2] - Mod.CombineBytes(buildingData.m_teens, buildingData.m_youngs)) / RI_Data.GetFactorCargo(__instance.m_inputResource2)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[2] - cargoDiff, 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs); } if (__instance.m_inputResource3 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[3] - Mod.CombineBytes(buildingData.m_adults, buildingData.m_seniors)) / RI_Data.GetFactorCargo(__instance.m_inputResource3)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[3] - cargoDiff, 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors); } if (__instance.m_inputResource4 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[4] - Mod.CombineBytes(buildingData.m_education1, buildingData.m_education2)) / RI_Data.GetFactorCargo(__instance.m_inputResource4)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[4] - cargoDiff, 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2); } // Output (materials being produced) if (__instance.m_outputResource != TransferManager.TransferReason.None) { //try //{ //} catch (OverflowException Ex) //{ // Debug.Log($"Output overflow caught: cargoDiff:{buildingData.m_customBuffer1}-{__state[0]}={(buildingData.m_customBuffer1 - __state[0])} factor:{RI_Data.GetFactorCargo(__instance.m_outputResource)}\n{Ex.ToString()}"); // Singleton<SimulationManager>.instance.SimulationPaused = true; //} cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state[0]) / RI_Data.GetFactorCargo(__instance.m_outputResource)); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0] + cargoDiff, 0, 64000); //Debug.Log($"Out ID:{buildingID}, state:{__state}, buff:{buildingData.m_customBuffer1}, diff:{cargoDiff}"); } //if (__instance is UniqueFactoryAI) // Debug.Log($"PF:{__instance.name}, ID:{buildingID}, lastDiff:{cargoDiff} (Old:{__state[0]}-{__state[1]},{__state[2]},{__state[3]},{__state[4]} - New:{buildingData.m_customBuffer1}-{buildingData.m_customBuffer2},{Mod.CombineBytes(buildingData.m_teens, buildingData.m_youngs)},{Mod.CombineBytes(buildingData.m_adults, buildingData.m_seniors)},{Mod.CombineBytes(buildingData.m_education1, buildingData.m_education2)})"); //else // Debug.Log($"PF:{__instance.name}, ID:{buildingID}, lastDiff:{cargoDiff} (Old:{__state[0]}-{__state[1]} - New:{buildingData.m_customBuffer1}-{buildingData.m_customBuffer2})"); } else { Mod.DebugLine($"Unknown PF instance {__instance.name} ({__instance.GetType()})"); } }
public static void Prefix(ushort buildingID, ref Building buildingData, ProcessingFacilityAI __instance, out ushort[] __state) { __state = new ushort[5]; if (Mod.IsIndustriesBuilding(__instance)) { __state[0] = buildingData.m_customBuffer1; // Output (increases during production) __state[1] = buildingData.m_customBuffer2; // Input1 (used during prodction) __state[2] = Mod.CombineBytes(buildingData.m_teens, buildingData.m_youngs); // Input2 __state[3] = Mod.CombineBytes(buildingData.m_adults, buildingData.m_seniors); // Input3 __state[4] = Mod.CombineBytes(buildingData.m_education1, buildingData.m_education2); // Input4 } else { __state[0] = __state[1] = __state[2] = __state[3] = __state[4] = 0; } }
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 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 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); }
public static void Postfix(ushort buildingID, ref Building buildingData, ProcessingFacilityAI __instance, ref ushort[] __state) { if (Mod.IsIndustriesBuilding(__instance)) { if (RealCityEconomyExtension.Can16timesUpdate(buildingID)) { int allInputRate = 0; float reduceInputRate = 1f; if (__instance.m_inputResource1 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate1; } if (__instance.m_inputResource2 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate2; } if (__instance.m_inputResource3 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate3; } if (__instance.m_inputResource4 != TransferManager.TransferReason.None) { allInputRate += __instance.m_inputRate4; } if (allInputRate != 0) { reduceInputRate = (float)allInputRate / __instance.m_outputRate; } int cargoDiff; // Input if (__instance.m_inputResource1 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[1] - buildingData.m_customBuffer2) / RI_Data.GetFactorCargo(__instance.m_inputResource1)); buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1] - (cargoDiff << 4), 0, 64000); } if (__instance.m_inputResource2 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[2] - Mod.CombineBytes(buildingData.m_teens, buildingData.m_youngs)) / RI_Data.GetFactorCargo(__instance.m_inputResource2)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[2] - (cargoDiff << 4), 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs); } if (__instance.m_inputResource3 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[3] - Mod.CombineBytes(buildingData.m_adults, buildingData.m_seniors)) / RI_Data.GetFactorCargo(__instance.m_inputResource3)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[3] - (cargoDiff << 4), 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors); } if (__instance.m_inputResource4 != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((__state[4] - Mod.CombineBytes(buildingData.m_education1, buildingData.m_education2)) / RI_Data.GetFactorCargo(__instance.m_inputResource4)); Mod.SplitBytes((ushort)Mathf.Clamp(__state[4] - (cargoDiff << 4), 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2); } // Output (materials being produced) if (__instance.m_outputResource != TransferManager.TransferReason.None) { cargoDiff = Convert.ToInt32((buildingData.m_customBuffer1 - __state[0]) * reduceInputRate / RI_Data.GetFactorCargo(__instance.m_outputResource)); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0] + (cargoDiff << 4), 0, 64000); } } else { buildingData.m_customBuffer2 = (ushort)Mathf.Clamp(__state[1], 0, 64000); Mod.SplitBytes((ushort)Mathf.Clamp(__state[2], 0, 64000), ref buildingData.m_teens, ref buildingData.m_youngs); Mod.SplitBytes((ushort)Mathf.Clamp(__state[3], 0, 64000), ref buildingData.m_adults, ref buildingData.m_seniors); Mod.SplitBytes((ushort)Mathf.Clamp(__state[4], 0, 64000), ref buildingData.m_education1, ref buildingData.m_education2); buildingData.m_customBuffer1 = (ushort)Mathf.Clamp(__state[0], 0, 64000); } } }