示例#1
0
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            var allLightsOrdered = layer.OrderBy(x => x.LightLocation.X).ThenBy(x => x.LightLocation.Y).ToList();

            var leftToRight  = allLightsOrdered.GroupBy(x => (int)(((x.LightLocation.X + 1) / 2) * 50)).Select(x => x.Select(s => s)).ToList();
            var effectGroups = leftToRight.ChunkByGroupNumber(2).ToList();

            while (!cancellationToken.IsCancellationRequested)
            {
                bool skip = false;
                CancellationTokenSource tempCancel = new CancellationTokenSource();
                var nextColor = RGBColor.Random();

                foreach (var group in effectGroups)
                {
                    if (!skip)
                    {
                        group.SelectMany(x => x).SetState(cancellationToken, nextColor, 1);
                    }
                    else
                    {
                        group.SelectMany(x => x).SetBrightness(cancellationToken, 0);
                        group.FlashQuick(tempCancel.Token, null, IteratorEffectMode.AllIndividual, IteratorEffectMode.Random);
                    }
                    skip = !skip;
                }

                await Task.Delay(waitTime());

                tempCancel.Cancel();
                effectGroups = effectGroups.Skip(1).Union(effectGroups.Take(1)).ToList();
            }
        }
示例#2
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken, double x, double y)
        {
            Func <TimeSpan> customWaitTime = () => waitTime() / 10;


            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            HorizontalScanLineEffect hline = new HorizontalScanLineEffect(customWaitTime, color);

            hline.X          = x;
            hline.AutoRepeat = false;
            layer.PlaceEffect(hline);

            VerticalScanLineEffect vline = new VerticalScanLineEffect(customWaitTime, color);

            vline.Y          = y;
            vline.AutoRepeat = false;
            layer.PlaceEffect(vline);

            hline.Start();
            vline.Start();

            return(Task.Run(async() =>
            {
                await Task.Delay(customWaitTime() * 15);
                hline.Stop();
                vline.Stop();
                await Task.Delay(TimeSpan.FromSeconds(1));
                layer.Effects.Remove(hline);
                layer.Effects.Remove(vline);
            }));
        }
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            var r            = new Random();
            var center       = EffectSettings.LocationCenter;
            var orderedLayer = layer.OrderByDescending(x => x.LightLocation.Angle(center.X, center.Y));

            while (!cancellationToken.IsCancellationRequested)
            {
                color = RGBColor.Random();

                foreach (var light in orderedLayer)
                {
                    Task.Run(async() =>
                    {
                        var distance = 1 + light.LightLocation.Y;
                        var timeSpan = waitTime() / 2 * distance;
                        await Task.Delay(timeSpan);
                        //Debug.WriteLine($"{light.Id} Angle {angle} and timespan {timeSpan.TotalMilliseconds}");
                        light.SetState(cancellationToken, color, 1, TimeSpan.Zero);

                        if (DipToBlack)
                        {
                            await Task.Delay(waitTime() * DipToBlackWait);
                            light.SetBrightness(cancellationToken, 0, waitTime() * 0.1);
                        }
                    });
                }

                await Task.Delay(waitTime() * 1.1);
            }
        }
示例#4
0
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            var r            = new Random();
            var center       = EffectSettings.LocationCenter;
            var orderedLayer = layer.OrderByDescending(x => x.LightLocation.Angle(center.X, center.Y));

            while (!cancellationToken.IsCancellationRequested)
            {
                var randomColor = RGBColor.Random(r);

                foreach (var light in orderedLayer)
                {
                    Task.Run(async() =>
                    {
                        var angle    = light.LightLocation.Angle(center.X, center.Y).Move360(90);
                        var timeSpan = waitTime() / 360 * angle;
                        await Task.Delay(timeSpan);
                        //Debug.WriteLine($"{light.Id} Angle {angle} and timespan {timeSpan.TotalMilliseconds}");
                        light.SetState(cancellationToken, randomColor, 1, waitTime() / 2);
                    });
                }

                await Task.Delay(waitTime() * 1.1);
            }
        }
示例#5
0
        private static void GenerateRandomEffectSettings(out RGBColor hexColor, out IteratorEffectMode iteratorMode, out IteratorEffectMode iteratorSecondaryMode)
        {
            Random r = new Random();

            hexColor = RGBColor.Random(r);
            while (hexColor.R < 0.15 && hexColor.G < 0.15 && hexColor.B < 0.15)
            {
                hexColor = RGBColor.Random(r);
            }

            Array values = Enum.GetValues(typeof(IteratorEffectMode));

            iteratorMode          = (IteratorEffectMode)values.GetValue(r.Next(values.Length));
            iteratorSecondaryMode = (IteratorEffectMode)values.GetValue(r.Next(values.Length));

            //Bounce and Single are no fun for random mode
            if (iteratorMode == IteratorEffectMode.Bounce || iteratorMode == IteratorEffectMode.Single)
            {
                iteratorMode = IteratorEffectMode.Cycle;
            }
            else if (iteratorMode == IteratorEffectMode.RandomOrdered) //RandomOrdered only runs once
            {
                iteratorMode = IteratorEffectMode.Random;
            }
        }
示例#6
0
        public Task Start(IEnumerable <IEnumerable <EntertainmentLight> > layer, Func <TimeSpan> waitTime, RGBColor?color, IteratorEffectMode iteratorMode, IteratorEffectMode secondaryIteratorMode, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            if (iteratorMode != IteratorEffectMode.All)
            {
                if (secondaryIteratorMode == IteratorEffectMode.Bounce ||
                    secondaryIteratorMode == IteratorEffectMode.Cycle ||
                    secondaryIteratorMode == IteratorEffectMode.Random ||
                    secondaryIteratorMode == IteratorEffectMode.RandomOrdered ||
                    secondaryIteratorMode == IteratorEffectMode.Single)
                {
                    Func <TimeSpan> customWaitMS = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds *layer.Count()) / layer.SelectMany(x => x).Count());

                    return(layer.FlashQuick(cancellationToken, color, iteratorMode, secondaryIteratorMode,
                                            waitTime: customWaitMS,
                                            transitionTimeOn: () => TimeSpan.Zero,
                                            transitionTimeOff: customWaitMS));
                }
            }

            return(layer.FlashQuick(cancellationToken, color, iteratorMode, secondaryIteratorMode, waitTime: waitTime, transitionTimeOn: () => TimeSpan.Zero, transitionTimeOff: waitTime));
        }
示例#7
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            return(layer.To2DGroup().FlashQuick(cancellationToken, color, IteratorEffectMode.All, waitTime: waitTime));
        }
示例#8
0
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            var r                = new Random();
            var center           = EffectSettings.LocationCenter;
            var orderedLeftLayer = layer.OrderByDescending(x => x.LightLocation.Angle(center.X, center.Y)).GetLeft();
            var ordereRightLayer = layer.OrderByDescending(x => x.LightLocation.Angle(center.X, center.Y)).GetRight();
            var toDark           = r.NextDouble() >= 0.5;

            while (!cancellationToken.IsCancellationRequested)
            {
                var randomLeftColor  = RGBColor.Random(r);
                var randomRightColor = RGBColor.Random(r);

                foreach (var light in orderedLeftLayer)
                {
                    Task.Run(async() =>
                    {
                        var angle    = light.LightLocation.Angle(center.X, center.Y).Move360(91);
                        var timeSpan = waitTime() / 360 * angle;
                        await Task.Delay(timeSpan);
                        //Debug.WriteLine($"{light.Id} Angle {angle} and timespan {timeSpan.TotalMilliseconds}");
                        light.SetState(cancellationToken, randomLeftColor, 1, waitTime() / 2);

                        if (toDark)
                        {
                            await Task.Delay(waitTime() * 1.1);
                            await Task.Delay(timeSpan);
                            light.SetBrightness(cancellationToken, 0, waitTime() / 2);
                        }
                    });
                }

                await Task.Delay(waitTime() * 1.1);

                foreach (var light in ordereRightLayer)
                {
                    Task.Run(async() =>
                    {
                        var angle    = Math.Abs(light.LightLocation.Angle(center.X, center.Y).Move360(271) - 180);
                        var timeSpan = waitTime() / 360 * angle;
                        await Task.Delay(timeSpan);
                        //Debug.WriteLine($"{light.Id} Angle {angle} and timespan {timeSpan.TotalMilliseconds}");
                        light.SetState(cancellationToken, randomRightColor, 1, waitTime() / 2);

                        if (toDark)
                        {
                            await Task.Delay(waitTime() * 1.1);
                            await Task.Delay(timeSpan);
                            light.SetBrightness(cancellationToken, 0, waitTime() / 2);
                        }
                    });
                }

                await Task.Delay(waitTime() * 1.1);
            }
        }
示例#9
0
        public override void Start()
        {
            base.Start();

            CalculateMaxRadius();

            var state = new Models.EntertainmentState();

            state.SetBrightness(1);
            state.SetRGBColor(RGBColor.Random());

            this.State = state;

            _cts = new CancellationTokenSource();

            Task.Run(async() =>
            {
                double step = StepSize;
                while (true && !_cts.IsCancellationRequested)
                {
                    Radius += step;
                    await Task.Delay(_waitTime(), _cts.Token).ConfigureAwait(false);
                    if (Radius >= _maxRadius)
                    {
                        if (_fadeToZero)
                        {
                            step = -1 * Math.Abs(StepSize);
                        }
                        else
                        {
                            Radius = 0;

                            if (!AutoRepeat)
                            {
                                break;
                            }

                            state.SetRGBColor(RGBColor.Random());
                        }
                    }
                    if (Radius <= 0)
                    {
                        if (!AutoRepeat)
                        {
                            break;
                        }

                        step = Math.Abs(StepSize);
                        state.SetRGBColor(RGBColor.Random());
                    }
                }
            }, _cts.Token);
        }
        public VerticalScanLineEffect(Func <TimeSpan> waitTime = null, RGBColor?color = null)
        {
            _waitTime = waitTime;

            if (_waitTime == null)
            {
                _waitTime = () => TimeSpan.FromMilliseconds(50);
            }

            _color = color ?? RGBColor.Random();

            Radius = 1;
        }
示例#11
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            var fronToBack = layer.GroupBy(x => (int)(((x.LightLocation.Y + 1) / 2) * 50)).ToList();

            Func <TimeSpan> customWaitMS = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds * 2) / fronToBack.Count);

            return(fronToBack.FlashQuick(cancellationToken, color, IteratorEffectMode.Bounce, IteratorEffectMode.All, waitTime: customWaitMS));
        }
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            var groupCount = layer.Count / 3;

            Func <TimeSpan> customWaitMS = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds * 2) / groupCount);

            return(layer.OrderBy(x => Guid.NewGuid()).ChunkByGroupNumber(groupCount).FlashQuick(cancellationToken, color, IteratorEffectMode.Random, waitTime: customWaitMS));
        }
示例#13
0
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            layer.SetState(cancellationToken, color, 1, waitTime(), false);

            //Wait for other events to finish and set state again
            await Task.Delay(waitTime(), cancellationToken);

            layer.SetState(cancellationToken, color, 1, waitTime(), false);
        }
        public static Task Flash(this IEnumerable <IEnumerable <EntertainmentLight> > group, CancellationToken cancellationToken, RGBColor?color, IteratorEffectMode mode = IteratorEffectMode.Cycle, IteratorEffectMode secondaryIteratorMode = IteratorEffectMode.All, Func <TimeSpan> waitTime = null, Func <TimeSpan> onTime = null, Func <TimeSpan> transitionTimeOn = null, Func <TimeSpan> transitionTimeOff = null, bool waitTillFinished = true, TimeSpan?duration = null)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            if (waitTime == null)
            {
                waitTime = () => TimeSpan.FromMilliseconds(50);
            }
            if (onTime == null)
            {
                onTime = waitTime;
            }
            if (transitionTimeOn == null)
            {
                transitionTimeOn = () => TimeSpan.FromMilliseconds(0);
            }
            if (transitionTimeOff == null)
            {
                transitionTimeOff = () => TimeSpan.FromMilliseconds(0);
            }

            Func <TimeSpan> actualWaitTime = () => waitTime() + onTime() + transitionTimeOn() + transitionTimeOff();

            if (!waitTillFinished)
            {
                actualWaitTime = waitTime;
            }

            return(group.IteratorEffect(cancellationToken, async(current, ct, t) =>
            {
                if (!waitTillFinished)
                {
                    actualWaitTime = waitTime;
                }
                else
                {
                    actualWaitTime = () => waitTime() + onTime() + transitionTimeOn() + transitionTimeOff();
                }

                current.SetState(ct, color, 1, transitionTimeOn());
                Task.Run(async() =>
                {
                    await Task.Delay(onTime() + transitionTimeOn(), ct).ConfigureAwait(false);
                    current.SetBrightness(ct, 0, transitionTimeOff());
                }, ct);
            }, mode, secondaryIteratorMode, actualWaitTime, duration));
        }
        public HorizontalScanLineEffect(Func <TimeSpan>?waitTime = null, RGBColor?color = null)
        {
            if (waitTime != null)
            {
                _waitTime = waitTime;
            }
            else if (_waitTime == null)
            {
                _waitTime = () => TimeSpan.FromMilliseconds(50);
            }

            _color = color ?? RGBColor.Random();

            Radius = 1;
        }
示例#16
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            //Non repeating effects should not run on baselayer
            if (layer.IsBaseLayer)
            {
                return(Task.CompletedTask);
            }

            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            return(layer.To2DGroup().FlashQuick(cancellationToken, color, IteratorEffectMode.All, IteratorEffectMode.All, waitTime: () => TimeSpan.FromMilliseconds(100), transitionTimeOn: () => TimeSpan.Zero, transitionTimeOff: waitTime, duration: waitTime()));
        }
示例#17
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            var center         = EffectSettings.LocationCenter;
            var orderedByAngle = layer.OrderBy(x => x.LightLocation.Angle(center.X, center.Y));

            Func <TimeSpan> customWaitMS  = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds * 2) / layer.Count);
            Func <TimeSpan> customOnTime  = () => customWaitMS() / 2;
            Func <TimeSpan> customOffTime = () => customWaitMS() * 2;

            return(orderedByAngle.To2DGroup().Flash(cancellationToken, color, IteratorEffectMode.Cycle, waitTime: customWaitMS, transitionTimeOn: customOnTime, transitionTimeOff: customOffTime, waitTillFinished: false));
        }
        public static Task SetRandomColor(this IEnumerable <IEnumerable <EntertainmentLight> > group, CancellationToken cancellationToken, IteratorEffectMode mode = IteratorEffectMode.Cycle, IteratorEffectMode secondaryIteratorMode = IteratorEffectMode.All, Func <TimeSpan> waitTime = null, Func <TimeSpan> transitionTime = null, TimeSpan?duration = null)
        {
            if (waitTime == null)
            {
                waitTime = () => TimeSpan.FromMilliseconds(50);
            }
            if (transitionTime == null)
            {
                transitionTime = () => TimeSpan.FromMilliseconds(0);
            }

            return(group.IteratorEffect(cancellationToken, async(current, ct, t) =>
            {
                var color = RGBColor.Random();

                current.SetState(ct, color, 1, transitionTime());
            }, mode, secondaryIteratorMode, waitTime, duration));
        }
示例#19
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            //Non repeating effects should not run on baselayer
            if (layer.IsBaseLayer)
            {
                return(Task.CompletedTask);
            }

            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            var groupCount = layer.Count / 3;

            Func <TimeSpan> customWaitMS = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds) / groupCount);

            return(layer.OrderBy(x => Guid.NewGuid()).ChunkByGroupNumber(groupCount).FlashQuick(cancellationToken, color, IteratorEffectMode.AllIndividual, IteratorEffectMode.RandomOrdered, waitTime: customWaitMS, duration: waitTime()));
        }
示例#20
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            //Non repeating effects should not run on baselayer
            if (layer.IsBaseLayer)
            {
                return(Task.CompletedTask);
            }

            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            Func <TimeSpan> customWaitMS = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds * 4) / layer.Count);

            var fronToBack = layer.GroupBy(x => (int)(((x.LightLocation.Y + 1) / 2) * 50)).OrderBy(x => x.Key).Reverse();

            return(fronToBack.FlashQuick(cancellationToken, color, IteratorEffectMode.Single, IteratorEffectMode.RandomOrdered, waitTime: customWaitMS));
        }
示例#21
0
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            Random r = new Random();

            while (!cancellationToken.IsCancellationRequested)
            {
                var nextcolor = color ?? RGBColor.Random();
                var hsb       = nextcolor.GetHSB();

                foreach (var light in layer)
                {
                    var addHue    = r.Next(-6000, 6000);
                    var addBri    = r.Next(-100, 100);
                    var randomHsb = new HSB(hsb.Hue + addHue, hsb.Saturation, WrapValue(255, hsb.Brightness + addBri));
                    light.SetState(cancellationToken, randomHsb.GetRGB(), 1, UseTransition ? waitTime() / 2 : TimeSpan.Zero);
                }
                await Task.Delay(waitTime());
            }
        }
示例#22
0
        public Task Start(IEnumerable <IEnumerable <EntertainmentLight> > layer, Func <TimeSpan> waitTime, RGBColor?color, IteratorEffectMode iteratorMode, IteratorEffectMode secondaryIteratorMode, CancellationToken cancellationToken)
        {
            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            if (iteratorMode == IteratorEffectMode.All)
            {
                iteratorMode = IteratorEffectMode.AllIndividual;
            }

            //This is no fun, no action, change it to cycle
            if (iteratorMode == IteratorEffectMode.AllIndividual &&
                (secondaryIteratorMode == IteratorEffectMode.All || secondaryIteratorMode == IteratorEffectMode.AllIndividual))
            {
                secondaryIteratorMode = IteratorEffectMode.Cycle;
            }

            if (iteratorMode != IteratorEffectMode.AllIndividual)
            {
                if (secondaryIteratorMode == IteratorEffectMode.Bounce ||
                    secondaryIteratorMode == IteratorEffectMode.Cycle ||
                    secondaryIteratorMode == IteratorEffectMode.Random ||
                    secondaryIteratorMode == IteratorEffectMode.RandomOrdered ||
                    secondaryIteratorMode == IteratorEffectMode.Single)
                {
                    Func <TimeSpan> customWaitMS  = () => TimeSpan.FromMilliseconds((waitTime().TotalMilliseconds *layer.Count()) / layer.SelectMany(x => x).Count());
                    Func <TimeSpan> customOnTime  = () => customWaitMS() / 2;
                    Func <TimeSpan> customOffTime = () => customWaitMS() * 2;

                    return(layer.Flash(cancellationToken, color, iteratorMode, secondaryIteratorMode, waitTime: customWaitMS, transitionTimeOn: customOnTime, transitionTimeOff: customOffTime, waitTillFinished: false));
                }
            }

            Func <TimeSpan> onTime  = () => waitTime() / 2;
            Func <TimeSpan> offTime = () => waitTime() * 2;

            return(layer.Flash(cancellationToken, color, iteratorMode, secondaryIteratorMode, waitTime: waitTime, transitionTimeOn: onTime, transitionTimeOff: offTime, waitTillFinished: false));
        }
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            var center = EffectSettings.LocationCenter;

            var tentacles = layer.GroupBy(x => (int)((x.LightLocation.Angle(center.X, center.Y) / 3.6 / 3))).OrderBy(x => x.Key);

            var grouped = tentacles.ChunkByGroupNumber(2).Select(x => x.SelectMany(l => l));

            while (!cancellationToken.IsCancellationRequested)
            {
                CancellationTokenSource tempCancel = new CancellationTokenSource();

                foreach (var group in grouped)
                {
                    var nextColor = RGBColor.Random();
                    group.To2DGroup().FlashQuick(cancellationToken, null, IteratorEffectMode.All, IteratorEffectMode.All, waitTime, transitionTimeOff: waitTime, duration: waitTime());
                    await Task.Delay(waitTime(), cancellationToken);
                }

                tempCancel.Cancel();
            }
        }
示例#24
0
        public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            //Non repeating effects should not run on baselayer
            if (layer.IsBaseLayer)
            {
                return;
            }

            var center            = EffectSettings.LocationCenter;
            var orderedByDistance = layer.OrderBy(x => x.LightLocation.Distance(center.X, center.Y, center.Z));

            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            Func <TimeSpan> customWaitTime = () => waitTime() / layer.Count;


            await orderedByDistance.To2DGroup().SetColor(cancellationToken, color.Value, IteratorEffectMode.Single, IteratorEffectMode.All, customWaitTime);

            layer.SetBrightness(cancellationToken, 0, transitionTime: TimeSpan.FromMilliseconds(0));
        }
示例#25
0
        public Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken)
        {
            Func <TimeSpan> customWaitTime = () => waitTime() / 10;

            if (!color.HasValue)
            {
                color = RGBColor.Random();
            }

            var center         = EffectSettings.LocationCenter;
            var rotatingEffect = new RotatingLineEffect(cancellationToken, color.Value, customWaitTime);

            rotatingEffect.X = center.X;
            rotatingEffect.Y = center.Y; layer.PlaceEffect(rotatingEffect);
            rotatingEffect.Start();

            cancellationToken.Register(() => {
                rotatingEffect.Stop();
                layer.Effects.Remove(rotatingEffect);
            });

            return(Task.CompletedTask);
        }
示例#26
0
        public static void Beat(double intensity)
        {
            var effectLayer = GetLayer(isBaseLayer: false);

            //var effects = GetEffectTypes().Where(x => x.GetType() == typeof(RandomFlashEffect)).FirstOrDefault();

            Func <TimeSpan> waitTime = () => TimeSpan.FromMilliseconds(100);

            StartEffect(default(CancellationToken), typeof(FlashFadeEffect).GetTypeInfo(), effectLayer, waitTime, RGBColor.Random());
        }