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
            });
        }