From 9cbcbae82de44137bb90e8b8dc716917905fa16a Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Thu, 25 Nov 2021 18:16:06 +1300 Subject: [PATCH] fix split solution (#5497) --- Content.Shared/Chemistry/Components/Solution.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Content.Shared/Chemistry/Components/Solution.cs b/Content.Shared/Chemistry/Components/Solution.cs index 862abcfff1..2a34320ac1 100644 --- a/Content.Shared/Chemistry/Components/Solution.cs +++ b/Content.Shared/Chemistry/Components/Solution.cs @@ -236,8 +236,12 @@ namespace Content.Shared.Chemistry.Components var newTotalVolume = FixedPoint2.New(0); var remainingVolume = TotalVolume; - for (var i = 0; i < Contents.Count; i++) + for (var i = Contents.Count - 1; i >= 0; i--) { + if (remainingVolume == FixedPoint2.Zero) + // shouldn't happen, but it can if someone, somehow has a reagent with 0-quantity in a solution. + break; + var reagent = Contents[i]; var ratio = (remainingVolume - quantity).Double() / remainingVolume.Double(); remainingVolume -= reagent.Quantity; @@ -245,8 +249,14 @@ namespace Content.Shared.Chemistry.Components var newQuantity = reagent.Quantity * ratio; var splitQuantity = reagent.Quantity - newQuantity; - Contents[i] = new ReagentQuantity(reagent.ReagentId, newQuantity); - newSolution.Contents.Add(new ReagentQuantity(reagent.ReagentId, splitQuantity)); + if (newQuantity > 0) + Contents[i] = new ReagentQuantity(reagent.ReagentId, newQuantity); + else + Contents.RemoveAt(i); + + if (splitQuantity > 0) + newSolution.Contents.Add(new ReagentQuantity(reagent.ReagentId, splitQuantity)); + newTotalVolume += splitQuantity; quantity -= splitQuantity; }