Exemplo n.º 1
0
        public Task FadeToAsync(ISequenceInstance instance, 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 startColor = this.color[position];
            var endColor   = color;

            double startBrightness = this.brightness[position];

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

            double fadePosition = 0;
            var    task         = Task.Factory.StartNew(() =>
            {
                for (int i = 0; i < steps; i++)
                {
                    double newBrightness = startBrightness + (brightness - startBrightness) * fadePosition;

                    int r          = (int)(startColor.R + (endColor.R - startColor.R) * fadePosition);
                    int g          = (int)(startColor.G + (endColor.G - startColor.G) * fadePosition);
                    int b          = (int)(startColor.B + (endColor.B - startColor.B) * fadePosition);
                    Color newColor = Color.FromArgb(r, g, b);

                    SetColor(position, newColor, newBrightness);

                    if (instance != null)
                    {
                        instance.WaitFor(TimeSpan.FromMilliseconds(100), false);
                        if (instance.IsCancellationRequested)
                        {
                            return;
                        }
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(100);
                    }

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

            return(task);
        }
Exemplo n.º 2
0
        public void WaitForVectorReached(ISequenceInstance instance)
        {
            if (failed)
            {
                return;
            }

            WaitHandle.WaitAny(new WaitHandle[] { instance.CancelToken.WaitHandle, movementDone });
            instance.CancelToken.ThrowIfCancellationRequested();

            if (lastCommandSent.HasValue)
            {
                TimeSpan duration = DateTime.Now - lastCommandSent.Value;
                this.log.Information("Last movement took {0:F1} s", duration.TotalSeconds);
            }
        }
Exemplo n.º 3
0
 public void WaitUntilFinished(ISequenceInstance instance)
 {
     WaitHandle.WaitAny(new WaitHandle[] { this.taskComplete, instance.CancelToken.WaitHandle });
     Stop();
 }
Exemplo n.º 4
0
 public void WaitUntilFinished(ISequenceInstance instance)
 {
     WaitHandle.WaitAny(new WaitHandle[] { this.taskComplete, instance.CancelToken.WaitHandle });
     Stop();
 }
Exemplo n.º 5
0
        public Task FadeToAsync(ISequenceInstance instance, 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 startColor = this.color[position];
            var endColor = color;

            double startBrightness = this.brightness[position];

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

            double fadePosition = 0;
            var task = Task.Factory.StartNew(() =>
                {
                    for (int i = 0; i < steps; i++)
                    {
                        double newBrightness = startBrightness + (brightness - startBrightness) * fadePosition;

                        int r = (int)(startColor.R + (endColor.R - startColor.R) * fadePosition);
                        int g = (int)(startColor.G + (endColor.G - startColor.G) * fadePosition);
                        int b = (int)(startColor.B + (endColor.B - startColor.B) * fadePosition);
                        Color newColor = Color.FromArgb(r, g, b);

                        SetColor(position, newColor, newBrightness);

                        if (instance != null)
                        {
                            instance.WaitFor(TimeSpan.FromMilliseconds(100), false);
                            if (instance.IsCancellationRequested)
                                return;
                        }
                        else
                            System.Threading.Thread.Sleep(100);

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

            return task;
        }
Exemplo n.º 6
0
        public void WaitForVectorReached(ISequenceInstance instance)
        {
            if (failed)
                return;

            WaitHandle.WaitAny(new WaitHandle[] { instance.CancelToken.WaitHandle, movementDone });
            instance.CancelToken.ThrowIfCancellationRequested();

            if (lastCommandSent.HasValue)
            {
                TimeSpan duration = DateTime.Now - lastCommandSent.Value;
                log.Info("Last movement took {0:F1} s", duration.TotalSeconds);
            }
        }