fix split solution (#5497)
This commit is contained in:
@@ -236,8 +236,12 @@ namespace Content.Shared.Chemistry.Components
|
|||||||
var newTotalVolume = FixedPoint2.New(0);
|
var newTotalVolume = FixedPoint2.New(0);
|
||||||
var remainingVolume = TotalVolume;
|
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 reagent = Contents[i];
|
||||||
var ratio = (remainingVolume - quantity).Double() / remainingVolume.Double();
|
var ratio = (remainingVolume - quantity).Double() / remainingVolume.Double();
|
||||||
remainingVolume -= reagent.Quantity;
|
remainingVolume -= reagent.Quantity;
|
||||||
@@ -245,8 +249,14 @@ namespace Content.Shared.Chemistry.Components
|
|||||||
var newQuantity = reagent.Quantity * ratio;
|
var newQuantity = reagent.Quantity * ratio;
|
||||||
var splitQuantity = reagent.Quantity - newQuantity;
|
var splitQuantity = reagent.Quantity - newQuantity;
|
||||||
|
|
||||||
Contents[i] = new ReagentQuantity(reagent.ReagentId, newQuantity);
|
if (newQuantity > 0)
|
||||||
newSolution.Contents.Add(new ReagentQuantity(reagent.ReagentId, splitQuantity));
|
Contents[i] = new ReagentQuantity(reagent.ReagentId, newQuantity);
|
||||||
|
else
|
||||||
|
Contents.RemoveAt(i);
|
||||||
|
|
||||||
|
if (splitQuantity > 0)
|
||||||
|
newSolution.Contents.Add(new ReagentQuantity(reagent.ReagentId, splitQuantity));
|
||||||
|
|
||||||
newTotalVolume += splitQuantity;
|
newTotalVolume += splitQuantity;
|
||||||
quantity -= splitQuantity;
|
quantity -= splitQuantity;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user