public GasMixture Clean(BloodstreamComponent bloodstream) { var gasMixture = new GasMixture(bloodstream.Air.Volume) { Temperature = bloodstream.Air.Temperature }; for (Gas gas = 0; gas < (Gas)Atmospherics.TotalNumberOfGases; gas++) { float amount; var molesInBlood = bloodstream.Air.GetMoles(gas); if (!NeedsGases.TryGetValue(gas, out var needed)) { amount = molesInBlood; } else { var overflowThreshold = needed * 1.5f; amount = molesInBlood > overflowThreshold ? molesInBlood - overflowThreshold : 0; } gasMixture.AdjustMoles(gas, amount); bloodstream.Air.AdjustMoles(gas, -amount); } return(gasMixture); }
public void Transfer(BloodstreamComponent @from, GasMixture to, Gas gas, float pressure) { var transfer = new GasMixture(); var molesInBlood = @from.Air.GetMoles(gas); transfer.SetMoles(gas, molesInBlood); transfer.ReleaseGasTo(to, pressure); @from.Air.Merge(transfer); }
public GasMixture Clean(BloodstreamComponent bloodstream, float pressure = 100) { var gasMixture = new GasMixture(bloodstream.Air.Volume); for (Gas gas = 0; gas < (Gas)Atmospherics.TotalNumberOfGases; gas++) { if (NeedsGases.TryGetValue(gas, out var needed) && bloodstream.Air.GetMoles(gas) < needed * 1.5f) { continue; } Transfer(bloodstream, gasMixture, gas, pressure); } return(gasMixture); }