/// <summary> /// Applied before Sim200ms runs. /// </summary> internal static bool Prefix(StructureTemperatureComponents __instance, float dt) { __instance.GetDataLists(out List <StructureTemperatureHeader> headers, out List <StructureTemperaturePayload> payloads); int n = headers.Count; var energyCategory = Db.Get().StatusItemCategories.OperatingEnergy; var energyStatus = __instance.operatingEnergyStatusItem; // No allocation required at all! for (int i = 0; i < n; i++) { var header = headers[i]; if (Sim.IsValidHandle(header.simHandle)) { var payload = payloads[i]; bool dirty = false; if (header.dirty) { header.dirty = false; UpdateSimState(ref payload); if (payload.pendingEnergyModifications != 0.0f) { SimMessages.ModifyBuildingEnergy(payload.simHandleCopy, payload. pendingEnergyModifications, Sim.MinTemperature, Sim. MaxTemperature); payload.pendingEnergyModifications = 0.0f; dirty = true; } headers[i] = header; } if (header.isActiveBuilding && !payload.bypass) { dirty |= UpdateActive(ref payload, dt, energyCategory, energyStatus); } if (dirty) { payloads[i] = payload; } } } return(false); }