/// <summary> /// Moves gas to another atmosphere. Temperature is transferred accordingly. /// </summary> /// <param name="destination">Destination of the gas.</param> /// <param name="amount">Amount of gas to move.</param> public void MoveGasTo(AtmosphereComponent destination, float amount) { if (destination == null) { UnityDebugger.Debugger.LogError("MoveGasTo -- Destination can not be null"); return; } if (amount < 0 || float.IsNaN(amount)) { UnityDebugger.Debugger.LogError("MoveGasTo -- Amount can not be negative: " + amount); return; } amount = Mathf.Min(this.TotalGas, amount); string[] gasNames = this.GetGasNames(); for (int i = 0; i < gasNames.Length; i++) { float partialAmount = amount * GetGasFraction(gasNames[i]); this.ChangeGas(gasNames[i], -partialAmount); destination.ChangeGas(gasNames[i], partialAmount); } float thermalDelta = amount * internalTemperature.InKelvin; this.ThermalEnergy -= thermalDelta; destination.ThermalEnergy += thermalDelta; }
/// <summary> /// Moves gas to another atmosphere. Thermal energy is transferred accordingly. /// </summary> /// <param name="destination">Destination of the gas.</param> /// <param name="amount">Amount of gas to move.</param> public void MoveGasTo(AtmosphereComponent destination, float amount) { if (destination == null) { UnityDebugger.Debugger.LogError("MoveGasTo -- Destination can not be null"); return; } if (amount < 0 || float.IsNaN(amount)) { UnityDebugger.Debugger.LogError("MoveGasTo -- Amount can not be negative: " + amount); return; } amount = Mathf.Min(this.TotalGas, amount); float thermalDelta = amount * this.GetTemperature(); this.ThermalEnergy -= thermalDelta; destination.ThermalEnergy += thermalDelta; foreach (var gasName in this.GetGasNames()) { float partialAmount = amount * GetGasFraction(gasName); this.ChangeGas(gasName, -partialAmount); destination.ChangeGas(gasName, partialAmount); } }
public void MoveGasTo(AtmosphereComponent destination, string gasName, float amount) { if (amount < 0) { UnityDebugger.Debugger.LogError("MoveGasTo -- Amount can not be negative: " + amount); return; } amount = Mathf.Min(this.GetGasAmount(gasName), amount); this.ChangeGas(gasName, -amount); destination.ChangeGas(gasName, amount); float thermalDelta = amount * internalTemperature.InKelvin; this.ThermalEnergy -= thermalDelta; destination.ThermalEnergy += thermalDelta; }
/// <summary> /// Moves gas to another atmosphere. Temperature is transferred accordingly. /// </summary> /// <param name="destination">Destination of the gas.</param> /// <param name="amount">Amount of gas to move.</param> public void MoveGasTo(AtmosphereComponent destination, float amount) { if (destination == null) { UnityDebugger.Debugger.LogError("MoveGasTo -- Destination can not be null"); return; } if (amount < 0 || float.IsNaN(amount)) { UnityDebugger.Debugger.LogError("MoveGasTo -- Amount can not be negative: " + amount); return; } amount = Mathf.Min(this.TotalGas, amount); string[] gasNames = this.GetGasNames(); // HACK: tracking the amount to transfer with an array and a separate loop is likely // innefficient, it may instead be better to adjust amount appropriately by the amount // removed. In our standard rooms gas ratio should remain 20% O2, 80% N2 float[] partialAmounts = new float[gasNames.Length]; for (int i = 0; i < gasNames.Length; i++) { partialAmounts[i] = amount * GetGasFraction(gasNames[i]); } for (int i = 0; i < gasNames.Length; i++) { this.ChangeGas(gasNames[i], -partialAmounts[i]); destination.ChangeGas(gasNames[i], partialAmounts[i]); } float thermalDelta = amount * internalTemperature.InKelvin; this.ThermalEnergy -= thermalDelta; destination.ThermalEnergy += thermalDelta; }