public async Task Start(EntertainmentLayer layer, Func <TimeSpan> waitTime, RGBColor?color, CancellationToken cancellationToken) { layer.SetBrightness(cancellationToken, 0, waitTime(), false); //Wait for other events to finish and set brightness again await Task.Delay(waitTime(), cancellationToken); layer.SetBrightness(cancellationToken, 0, waitTime(), false); }
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)); }