示例#1
0
        /// <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);
        }