示例#1
0
        private void AddHeatToCore()
        {
            CoreTemp = (float)(Math.Round(coreHeat.CoreTemperature, 1));
            SkinTemp = (float)(Math.Round(this.part.skinTemperature, 1));

            if (CoreTemp > maxCoreTemp | SkinTemp > maxSkinTemp)
            {
                State     = ExceedTempLimit;
                IsEnabled = false;
            }
            if (State == ExceedTempLimit & (CoreTemp >= maxCoreTemp * 0.7 | SkinTemp >= maxSkinTemp * 0.7))
            {
                IsEnabled = false;
            }
            else if (CoreTemp < maxCoreTemp * 0.7 & SkinTemp < maxSkinTemp * 0.7)
            {
                State = operational;
            }
            heatModifier = (double)HighLogic.CurrentGame.Parameters.CustomParams <BPSettings>().PercentHeat / 100;
            double heatExcess = (1 - Efficiency) * Mathf.Clamp(resourceConsumption, 0f, 50000f / Efficiency) * heatModifier;

            WasteHeat = (float)Math.Round(heatExcess, 1);
            coreHeat.AddEnergyToCore(heatExcess * 0.7 * TimeWarp.fixedDeltaTime); // first converted to kJ
            this.part.AddSkinThermalFlux(heatExcess * 0.2);                       // add some heat to skin
        }
        // adds heat to receiver core, not engine core
        // which is why the temp limits are so low
        private void AddHeatToReceiverCore()
        {
            CoreTemp = (float)(Math.Round(coreHeat.CoreTemperature, 1));
            SkinTemp = (float)(Math.Round(this.part.skinTemperature, 1));

            if (CoreTemp > maxCoreTemp | SkinTemp > maxSkinTemp)
            {
                State = ExceedTempLimit;
                engine.Shutdown(); PowerLimiter = 0;
            }
            if (State == ExceedTempLimit & (CoreTemp >= maxCoreTemp * 0.7 | SkinTemp >= maxSkinTemp * 0.7))
            {
                engine.Shutdown(); PowerLimiter = 0;
            }
            else if (CoreTemp < maxCoreTemp * 0.7 & SkinTemp < maxSkinTemp * 0.7)
            {
                State = operational;
            }
            double heatModifier = (double)HighLogic.CurrentGame.Parameters.CustomParams <BPSettings>().PercentHeat / 100;
            double heatExcess   = (ReceivedPower * (1f / recvEfficiency - thermalEfficiency)) * heatModifier;

            WasteHeat = (float)Math.Round(heatExcess, 1);
            coreHeat.AddEnergyToCore(heatExcess * 0.5 * TimeWarp.fixedDeltaTime); // first converted to kJ
            this.part.AddSkinThermalFlux(heatExcess * 0.4);                       // waste heat from receiver + waste heat from engine
        }
示例#3
0
        // adds heat mechanics to this receiver
        private void AddHeatToCore()
        {
            CoreTemp = (float)(Math.Round(coreHeat.CoreTemperature, 1));
            SkinTemp = (float)(Math.Round(this.part.skinTemperature, 1));

            if (CoreTemp > maxCoreTemp | SkinTemp > maxSkinTemp)
            {
                State     = ExceedTempLimit;
                Listening = false;
            }
            if (State == ExceedTempLimit & (CoreTemp >= maxCoreTemp * 0.7 | SkinTemp >= maxSkinTemp * 0.7))
            {
                Listening = false;
            }
            else if (CoreTemp < maxCoreTemp * 0.7 & SkinTemp < maxSkinTemp * 0.7)
            {
                State = operational;
            }
            double heatModifier = (double)HighLogic.CurrentGame.Parameters.CustomParams <BPSettings>().PercentHeat / 100;
            double heatExcess   = (1 - recvEfficiency) * (ReceivedPower / recvEfficiency) * heatModifier;

            WasteHeat = (float)Math.Round(heatExcess, 1);
            coreHeat.AddEnergyToCore(heatExcess * 0.3 * TimeWarp.fixedDeltaTime); // first converted to kJ
            this.part.AddSkinThermalFlux(heatExcess * 0.7);                       // some heat added to skin
        }
        private void ConsumeEnergy()
        {
            if (core != null)
            {
                float maxTemp  = (float)core.CoreTempGoal;
                float coreTemp = (float)core.CoreTemperature;

                if (coreTemp > maxTemp)
                {
                    float scale = Mathf.Clamp01(CoolingScalingZero * (coreTemp / maxTemp - 1f));
                    core.AddEnergyToCore(-currentCooling * 50f * TimeWarp.fixedDeltaTime * scale);
                }
            }
        }