public MaterialSetOLD ProvideNext(ProviderContext context)
        {
            if (currentIndex > context.CycleLength)
            {
                currentIndex = 0;
            }

            var            position                = 1.0 / context.CycleLength * currentIndex;
            var            gradientStepSpan        = GradientStepData.Sum(step => step.Offset);
            var            additivestepPercentage  = 0d;
            MaterialSetOLD interpolatedMaterialSet = MaterialPalette.Sets.BrownBrushSet;

            if (position >= 1)
            {
                currentIndex++;
                return(GradientStepData.Last().MaterialSet);
            }
            for (var x = 0; x <= GradientStepData.Count - 2; x++)
            {
                var stepPercentage            = GradientStepData[x].Offset / gradientStepSpan;
                var stepProgression           = position - additivestepPercentage;
                var stepProgressionPercentage = stepProgression / stepPercentage;

                if (position >= additivestepPercentage && position < (additivestepPercentage + stepPercentage))
                {
                    interpolatedMaterialSet = MediaExtensions.Interpolate(GradientStepData[x].MaterialSet,
                                                                          GradientStepData[x + 1].MaterialSet, stepProgressionPercentage);
                    break;
                }
                additivestepPercentage += stepPercentage;
            }
            currentIndex++;
            return(interpolatedMaterialSet);
        }
        private MaterialSet GetMaterialSetAtProgression(double progression)
        {
            var totalGradientSpan = GradientStepData.Sum(t => t.Offset);

            if (progression <= 0)
            {
                return(GradientStepData.First().MaterialSet);
            }
            if (progression >= 1)
            {
                return(GradientStepData.Last().MaterialSet);
            }

            var currentOffset = 0d;

            for (var x = 0; x <= GradientStepData.Count - 2; x++)
            {
                var startGradientStep = GradientStepData[x];
                var endGradientStep   = GradientStepData[x + 1];

                var stepSpanPercentage = startGradientStep.Offset / totalGradientSpan;
                var stepEndOffset      = currentOffset + stepSpanPercentage;

                if (progression >= currentOffset && progression < stepEndOffset)
                {
                    var progressionThroughStep = progression.Map(currentOffset, stepEndOffset, 0d, 1d);
                    var materialSet            = MediaExtensions.Interpolate(startGradientStep.MaterialSet,
                                                                             endGradientStep.MaterialSet, progressionThroughStep);
                    return(materialSet);
                }
                currentOffset = stepEndOffset;
            }
            throw new ArgumentOutOfRangeException();
        }