Animatroller.Framework.LogicalDevice.VirtualPixel1D.FadeToUsingHSV C# (CSharp) Method

FadeToUsingHSV() public method

public FadeToUsingHSV ( int position, Color color, double brightness, System.TimeSpan duration ) : VirtualPixel1D
position int
color Color
brightness double
duration System.TimeSpan
return VirtualPixel1D
        public VirtualPixel1D FadeToUsingHSV(int position, Color color, double brightness, TimeSpan duration)
        {
            if (position < 0 || position >= this.pixelCount)
                throw new ArgumentOutOfRangeException();

            if (this.color[position].GetBrightness() == 0)
            {
                this.color[position] = color;
                this.brightness[position] = 0;
            }

            if (color.GetBrightness() == 0)
            {
                color = this.color[position];
                brightness = 0;
            }

            var startHSV = new HSV(this.color[position]);
            var endHSV = new HSV(color);
            double startBrightness = this.brightness[position];

            // 10 steps per second
            int steps = (int)(duration.TotalMilliseconds / 100);

            double fadePosition = 0;
            for (int i = 0; i < steps; i++)
            {
                double newBrightness = startBrightness + (brightness - startBrightness) * fadePosition;

                double hue = startHSV.Hue + (endHSV.Hue - startHSV.Hue) * fadePosition;
                double sat = startHSV.Saturation + (endHSV.Saturation - startHSV.Saturation) * fadePosition;
                double val = startHSV.Value + (endHSV.Value - startHSV.Value) * fadePosition;
                Color newColor = HSV.ColorFromHSV(hue, sat, val);

                SetColor(position, newColor, newBrightness);

                System.Threading.Thread.Sleep(100);

                fadePosition += 1.0 / (steps - 1);
            }

            return this;
        }