Animatroller.Framework.Effect2.MasterEffect.Fade C# (CSharp) Method

Fade() public method

public Fade ( IObserver deviceObserver, Color start, Color end, int durationMs, ITransformer transformer = null ) : Task
deviceObserver IObserver
start Color
end Color
durationMs int
transformer ITransformer
return Task
        public Task Fade(IObserver<Color> deviceObserver, Color start, Color end, int durationMs, ITransformer transformer = null)
        {
            var taskSource = new TaskCompletionSource<bool>();

            if (start == end)
            {
                taskSource.SetResult(true);

                return taskSource.Task;
            }

            var startHSV = new HSV(start);
            var endHSV = new HSV(end);

            if (startHSV.Value == 0)
                startHSV = new HSV(endHSV.Hue, endHSV.Saturation, 0);

            var observer = Observer.Create<double>(
                onNext: pos =>
                {
                    if (transformer != null)
                        pos = transformer.Transform(pos);

                    double hue = startHSV.Hue + (endHSV.Hue - startHSV.Hue) * pos;
                    double sat = startHSV.Saturation + (endHSV.Saturation - startHSV.Saturation) * pos;
                    double val = startHSV.Value + (endHSV.Value - startHSV.Value) * pos;

                    Color newColor = HSV.ColorFromHSV(hue, sat, val);

                    deviceObserver.OnNext(newColor);
                },
                onCompleted: () =>
                {
                    deviceObserver.OnCompleted();

                    taskSource.SetResult(true);
                });

            var cancelSource = this.timerJobRunner.AddTimerJobPos(observer, durationMs);

            Executor.Current.SetManagedTask(taskSource.Task, cancelSource);

            return taskSource.Task;
        }

Same methods

MasterEffect::Fade ( IPushDataController deviceObserver, double start, double end, int durationMs, ITransformer transformer = null ) : Task
MasterEffect::Fade ( IReceivesBrightness device, double start, double end, int durationMs, int priority = 1, ITransformer transformer = null, IControlToken token = null ) : Task