From 7a4e85e952444f4bc3a45f2e43d782bad1d24f43 Mon Sep 17 00:00:00 2001 From: siimav <1120038+siimav@users.noreply.github.com> Date: Sun, 4 Feb 2024 02:23:59 +0200 Subject: [PATCH] Support 0 volume tanks without bad things happening (#334) --- Source/Tanks/ModuleFuelTanks.cs | 52 ++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/Source/Tanks/ModuleFuelTanks.cs b/Source/Tanks/ModuleFuelTanks.cs index 208b980a..58840a0d 100644 --- a/Source/Tanks/ModuleFuelTanks.cs +++ b/Source/Tanks/ModuleFuelTanks.cs @@ -686,37 +686,41 @@ protected void ChangeResources (double volumeRatio, bool propagate = false) public void ChangeTotalVolume (double newTotalVolume, bool propagate = false) { + double oldVolume = volume; double newVolume = Math.Round (newTotalVolume * utilization * 0.01d, 4); + totalVolume = newTotalVolume; + volume = newVolume; - if (Double.IsInfinity(newVolume / volume)) + if (oldVolume > 0) // Can't rescale resource amounts if previously the tank had 0 volume and thus also no resources { - totalVolume = newTotalVolume; - volume = newVolume; - Debug.LogWarning("[ModularFuelTanks] caught DIV/0 in ChangeTotalVolume. Setting volume/totalVolume and exiting function"); - return; - } - double volumeRatio = newVolume / volume; + double volumeRatio = newVolume / oldVolume; + bool doResources = false; + if (oldVolume > newVolume) + { + ChangeResources (volumeRatio, propagate); + } + else + { + doResources = true; + } - bool doResources = false; + if (propagate) + { + foreach (Part p in part.symmetryCounterparts) + { + // FIXME: Not safe, assumes only 1 MFT on the part. + ModuleFuelTanks m = p.FindModuleImplementing(); + m.totalVolume = newTotalVolume; + m.volume = newVolume; + } + } - if (volume > newVolume) { - ChangeResources (volumeRatio, propagate); - } else { - doResources = true; - } - totalVolume = newTotalVolume; - volume = newVolume; - if (propagate) { - foreach (Part p in part.symmetryCounterparts) { - // FIXME: Not safe, assumes only 1 MFT on the part. - ModuleFuelTanks m = p.FindModuleImplementing(); - m.totalVolume = newTotalVolume; - m.volume = newVolume; + if (doResources) + { + ChangeResources (volumeRatio, propagate); } } - if (doResources) { - ChangeResources (volumeRatio, propagate); - } + massDirty = true; }