Animatroller.Scenes.LockDemo.LockDemo C# (CSharp) Method

LockDemo() public method

public LockDemo ( IEnumerable args ) : System
args IEnumerable
return System
        public LockDemo(IEnumerable<string> args)
        {
            blackOut.ConnectTo(Exec.Blackout);
            whiteOut.ConnectTo(Exec.Whiteout);

            lightGroup.Add(lightA, lightB);

            acnOutput.Connect(new Physical.SmallRGBStrobe(lightA, 1), 20);
            acnOutput.Connect(new Physical.SmallRGBStrobe(lightB, 10), 20);
            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 0, 50), 26, 1);
            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 50, 100), 25, 1);

            testLightA.ConnectTo(x => lightA.SetBrightness(x));
            testLightA.ConnectTo(x => pixelsRoofEdge.SetBrightness(x));
            testLightB.ConnectTo(x => lightB.SetBrightness(x));

            lightA.SetColor(Color.Red, null);
            lightB.SetColor(Color.Blue, null);

            pixelsRoofEdge.SetColor(Color.Green, 0.6);

            popOut.ConnectTo(lightA);
            popOut.ConnectTo(pixelsRoofEdge);

            sub
                .LockWhenRunning(lightA, lightB)
                .RunAction(i =>
                {
                    lightA.SetBrightness(1.0, i.Token);
                    i.WaitFor(S(2.5));

                    lightB.SetBrightness(0.5, i.Token);
                    i.WaitFor(S(2.5));

                    Exec.MasterEffect.Fade(lightGroup, 1.0, 0.0, 3000, token: i.Token);

                    i.WaitFor(S(1));

                    using (var takeOver = lightGroup.TakeControl(5))
                    {
                        lightGroup.SetBrightness(1, takeOver);
                        i.WaitFor(S(1));
                    }

                    lightGroup.SetBrightness(1, i.Token);

                    i.WaitFor(S(2));
                });

            button1.Output.Subscribe(value =>
            {
                if (value)
                {
                    log.Info("Button 1 pressed!");

                    sub.Run();
                }
            });

            button2.Output.Subscribe(value =>
            {
                if (value)
                {
                    log.Info("Button 2 pressed!");

                    if (testLock != null)
                    {
                        testLock.Dispose();
                        testLock = null;
                    }
                    else
                        testLock = lightA.TakeControl();
                }
            });

            button3.Output.Subscribe(value =>
            {
                if (value)
                {
                    log.Info("Button 3 pressed!");

                    popOut.Pop(color: Color.Purple, sweepDuration: S(2));

                    Thread.Sleep(500);

                    testLightA.Value = random.NextDouble();
                }
            });
        }