public TerraformMutipleAdjustmentResult AdjustMultipleElements(TerraformElementsSet currentElements, TerraformElementsSet targets, double maxChangePossible) { var targetsToRemove = new List <TerraformElement>(); var remainingDelta = maxChangePossible; foreach (var target in targets.theElements) { var currentElement = currentElements.Get(target.elementId); var adjustResult = CalculateSingleElementChange(target.amount, currentElement.amount, remainingDelta); remainingDelta = adjustResult.maxChangeLeft; currentElements.Set(currentElement.elementId, adjustResult.newElementAmount); if (adjustResult.targetReached) { targetsToRemove.Add(target); } } foreach (var target in targetsToRemove) { targets.Remove(target.elementId); } return(new TerraformMutipleAdjustmentResult() { currentElementValues = currentElements, adjustedTargets = targets }); }