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 }
// 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); } } }