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

Halloween2014() public method

public Halloween2014 ( IEnumerable args ) : System
args IEnumerable
return System
        public Halloween2014(IEnumerable<string> args)
        {
            hoursSmall.AddRange("5:00 pm", "9:00 pm");
            hoursInside.AddRange("6:00 pm", "10:00 pm");
            hoursInside.SetForced(false);

            // Logging
            hoursSmall.Output.Log("Hours small");
            hoursInside.Output.Log("Hours inside");
            movingHead.OutputPan.Log("Pan");
            movingHead.OutputTilt.Log("Tilt");

            hoursSmall
                .ControlsMasterPower(catAir)
                .ControlsMasterPower(catLights)
                .ControlsMasterPower(eyes);

            hoursInside.Output.Subscribe(x =>
                {
                    lightInside.Brightness = x ? 1.0 : 0.0;
                    lightMirrorSkeleton.Brightness = x ? 1.0 : 0.0;
                });

            flickerEffect.ConnectTo(lightStairs1.InputBrightness);
            flickerEffect.ConnectTo(lightStairs2.InputBrightness);
            //            pulsatingEffect1.ConnectTo(lightBehindHeads.InputBrightness);
            //            pulsatingEffect1.ConnectTo(lightBehindSheet.InputBrightness);
            pulsatingEffect1.ConnectTo(candySpot.InputBrightness);
            pulsatingEffect2.ConnectTo(lightSpiderWeb.InputBrightness);
            //            pulsatingEffect2.ConnectTo(lightMirrorSkeleton.InputBrightness);
            //            pulsatingEffect2.ConnectTo(lightWindow.InputBrightness);
            //            pulsatingEffect2.ConnectTo(lightInside.InputBrightness);
            //            flickerEffect2.ConnectTo(lightInside.InputBrightness);
            //            pulsatingEffect1.ConnectTo(movingHead.InputBrightness);

            //            movingHead.InputBrightness.Log("Moving Head Brightness");

            //            popOut1.AddDevice(lightning1.InputBrightness);
            //            popOut2.ConnectTo(light.InputBrightness);
            popOut1.ConnectTo(lightBehindHeads.InputBrightness);
            popOut1.ConnectTo(lightBehindSheet.InputBrightness);
            //            popOut1 ConnectTo(lightFlash1.InputBrightness);
            //            popOut2.ConnectTo(lightFlash1.InputBrightness);
            popOut2.ConnectTo(lightBehindSheet.InputBrightness);
            popOut2.ConnectTo(lightning1.InputBrightness);
            popOut3.ConnectTo(lightBehindHeads.InputBrightness);
            popOut3.ConnectTo(lightBehindSheet.InputBrightness);
            popOut3.ConnectTo(lightEntranceR.InputBrightness);
            popOut3.ConnectTo(lightEntranceL.InputBrightness);
            popOut3.ConnectTo(new BrightnessPowerAdapter(lightFlash1).InputBrightness);
            //            popOut3.ConnectTo(lightFlash1.InputBrightness);
            //            popOut4.ConnectTo(lightEntranceL.InputBrightness);
            popOut4.ConnectTo(new BrightnessPowerAdapter(lightFlash1).InputBrightness);
            popOut4.ConnectTo(new BrightnessPowerAdapter(lightFlash2).InputBrightness);

            popOutBehindHeads.ConnectTo(lightBehindHeads.InputBrightness);
            //popOut3.ConnectTo(movingHead.InputBrightness);

            raspberryReaper.DigitalInputs[7].Connect(finalBeam, false);
            raspberryReaper.DigitalOutputs[2].Connect(spiderEyes1);
            raspberryReaper.DigitalOutputs[3].Connect(spiderEyes2);

            raspberryCat.DigitalInputs[4].Connect(catMotion, true);
            raspberryCat.DigitalInputs[5].Connect(firstBeam, false);
            raspberryCat.DigitalOutputs[7].Connect(deadEnd);
            raspberryCat.Connect(audioCat);
            raspberryCat.Motor.Connect(georgeMotor);

            raspberryReaper.Connect(audioReaper);
            raspberryOla.Connect(audioOla);

            raspberryGeorge.DigitalOutputs[7].Connect(fog);
            raspberryGeorge.Connect(audioGeorge);

            inputBrightness.ConnectTo(movingHead);

            // Map Physical lights
            acnOutput.Connect(new Physical.SmallRGBStrobe(reaperLight, 1), 20);
            acnOutput.Connect(new Physical.MonopriceRGBWPinSpot(candySpot, 20), 20);
            acnOutput.Connect(new Physical.MonopriceMovingHeadLight12chn(movingHead, 200), 20);
            acnOutput.Connect(new Physical.GenericDimmer(catAir, 11), 20);
            acnOutput.Connect(new Physical.GenericDimmer(eyes, 12), 20);
            acnOutput.Connect(new Physical.GenericDimmer(catLights, 10), 20);
            //BROKEN            acnOutput.Connect(new Physical.GenericDimmer(testLight3, 103), 20);
            //            acnOutput.Connect(new Physical.GenericDimmer(lightning2, 100), 20);
            acnOutput.Connect(new Physical.GenericDimmer(lightStairs1, 101), 20);
            acnOutput.Connect(new Physical.GenericDimmer(lightStairs2, 102), 20);
            acnOutput.Connect(new Physical.AmericanDJStrobe(lightning1, 5), 20);
            acnOutput.Connect(new Physical.RGBStrobe(lightBehindHeads, 40), 20);
            acnOutput.Connect(new Physical.RGBStrobe(lightBehindSheet, 60), 20);
            acnOutput.Connect(new Physical.RGBStrobe(lightEntranceR, 70), 20);
            acnOutput.Connect(new Physical.RGBStrobe(lightEntranceL, 80), 20);
            acnOutput.Connect(new Physical.GenericDimmer(lightTree, 50), 20);
            acnOutput.Connect(new Physical.GenericDimmer(lightSpiderWeb, 2), 21);
            acnOutput.Connect(new Physical.GenericDimmer(lightMirrorSkeleton, 1), 22);
            acnOutput.Connect(new Physical.GenericDimmer(lightInside, 2), 22);
            acnOutput.Connect(new Physical.GenericDimmer(lightWindow, 3), 22);
            acnOutput.Connect(new Physical.GenericDimmer(lightFlash1, 1), 21);
            acnOutput.Connect(new Physical.GenericDimmer(lightFlash2, 4), 22);

            candySpot.SetOnlyColor(Color.Green);

            oscServer.RegisterAction<int>("/mrmr/pushbutton/0/Hakan-iPhone-6", (msg, data) =>
            {
                if (data.First() != 0)
                {
                    audioOla.PlayTrack("12 Fear of the Dark");
                    //                    popOut4.Pop(1.0);
                    //                    stateMachine.SetState(States.Stair);
                    //                    Exec.Execute(testSeq);
                    //                    Exec.Execute(reaperSeq);
                    //                    popOut4.Pop(1.0);
                    //                    pulsatingEffect2.Start();
                }
            });

            oscServer.RegisterAction<int>("/mrmr/pushbutton/1/Hakan-iPhone-6", (msg, data) =>
            {
                if (data.Any() && data.First() != 0)
                {
                    audioOla.NextBackgroundTrack();
                    //                    stateMachine.SetState(States.George);
                    //                    Exec.Execute(georgeSeq);
                }
            });

            oscServer.RegisterAction<int>("/mrmr/pushbutton/2/Hakan-iPhone-6", (msg, data) =>
            {
                if (data.First() != 0)
                {
                    Exec.Execute(reaperPopSeq);
                }
            });

            oscServer.RegisterAction<int>("/mrmr/pushbutton/3/Hakan-iPhone-6", (msg, data) =>
            {
                if (data.First() != 0)
                {
                    catLights.Value = true;
                    switch (random.Next(3))
                    {
                        case 0:
                            audioCat.PlayEffect("386 Demon Creature Growls");
                            break;
                        case 1:
                            audioCat.PlayEffect("348 Spider Hiss");
                            break;
                        case 2:
                            audioCat.PlayEffect("death-scream");
                            break;
                    }
                    Thread.Sleep(2000);
                    catLights.Value = false;
                }
            });

            finalBeam.WhenOutputChanges(x =>
                {
                    if (x && hoursSmall.IsOpen)
                    {
                        Exec.Execute(finalSeq);
                    }
                    //                    lightning1.Brightness = x ? 1.0 : 0.0;
                    //if (x)
                    //{
                    //    Exec.Execute(thunderSeq);
                    //}
                });

            firstBeam.WhenOutputChanges(x =>
            {
                if (x && hoursSmall.IsOpen)
                {
                    //                    Exec.Execute(reaperSeq);
                    if (stateMachine.CurrentState == States.Background ||
                        stateMachine.CurrentState == States.StepForward)
                        stateMachine.SetState(States.Stair);
                }
            });

            buttonTest2.WhenOutputChanges(x =>
                {
                    if (x)
                    {
                        audioOla.NextBackgroundTrack();
                        //                        Exec.Execute(georgeSeq);
                    }
                });

            raspberryOla.AudioTrackStart.Subscribe(x =>
                {
                    // Next track
                    switch (x)
                    {
                        case "12 Fear of the Dark":
                            // Do nothing
                            break;

                        case "Thunder1":
                            timelineThunder1.Start();
                            break;

                        case "Thunder2":
                            timelineThunder2.Start();
                            break;

                        case "Thunder3":
                            timelineThunder3.Start();
                            break;

                        case "Thunder4":
                            timelineThunder4.Start();
                            break;

                        case "Thunder5":
                            timelineThunder5.Start();
                            break;

                        case "Thunder6":
                            timelineThunder6.Start();
                            break;

                        case "Thunder7":
                            timelineThunder7.Start();
                            break;

                        case "Thunder8":
                            timelineThunder8.Start();
                            break;
                    }
                });

            buttonTest4.WhenOutputChanges(x =>
                {
                    if (x)
                        audioOla.PlayEffect("125919__klankbeeld__horror-what-are-you-doing-here-cathedral");
                    //                        Exec.Execute(reaperSeq);
                    //                    lightning2.Brightness = x ? 1.0 : 0.0;
                    //                    if (x)
                    //                        popOut1.Pop(1.0);
                    //                    if (x)
                    //                    lightStairs1.Brightness = x ? 1.0 : 0.0;
                    //                    testLight3.Brightness = x ? 1.0 : 0.0;
                    //                        audioSpider.PlayEffect("348 Spider Hiss");
                    //                    Exec.Execute(thunderSeq);
                });

            buttonTest3.WhenOutputChanges(x =>
            {
                //                fog.Power = x;
                if (x)
                {
                    Exec.Execute(reaperPopSeq);

                    //for (int i = 0; i < 100; i++)
                    //{
                    //    raspberryReaper.Test(i);
                    //}
                }
                //                    audioGeorge.PlayEffect("242004__junkfood2121__fart-01");
            });

            raspberryReaper.DigitalOutputs[7].Connect(reaperPopUp);
            raspberryReaper.DigitalOutputs[6].Connect(reaperEyes);
            raspberryReaper.DigitalOutputs[5].Connect(skullEyes);

            forceOpen.WhenOutputChanges(x =>
                {
                    if (x)
                        hoursSmall.SetForced(true);
                    else
                        hoursSmall.SetForced(null);
                });

            inputH.WhenOutputChanges(x =>
            {
                movingHead.SetOnlyColor(HSV.ColorFromHSV(x.Value.GetByteScale(), inputS.Value, 1.0));
            });

            inputS.Output.Subscribe(x =>
            {
                movingHead.SetOnlyColor(HSV.ColorFromHSV(inputH.Value.GetByteScale(), x.Value, 1.0));
            });

            inputStrobe.Output.Controls(x => movingHead.StrobeSpeed = x);

            //midiInput.Controller(midiChannel, 1).Controls(inputBrightness.Control);
            //midiInput.Controller(midiChannel, 2).Controls(inputH.Control);
            //midiInput.Controller(midiChannel, 3).Controls(inputS.Control);
            //midiInput.Controller(midiChannel, 4).Controls(inputStrobe.Control);

            //midiInput.Controller(midiChannel, 5).Controls(Observer.Create<double>(x =>
            //    {
            //        inputPan.Control.OnNext(new DoubleZeroToOne(x * 540));
            //    }));
            //midiInput.Controller(midiChannel, 6).Controls(Observer.Create<double>(x =>
            //{
            //    inputTilt.Control.OnNext(new DoubleZeroToOne(x * 270));
            //}));

            //midiInput.Note(midiChannel, 36).Controls(buttonTest1.Control);
            //midiInput.Note(midiChannel, 37).Controls(buttonTest2.Control);
            //midiInput.Note(midiChannel, 38).Controls(buttonTest3.Control);
            //midiInput.Note(midiChannel, 39).Controls(buttonTest4.Control);

            //midiInput.Note(midiChannel, 40).Controls(buttonCatTrigger.Control);

            //buttonTest4.Output.Subscribe(x =>
            //    {
            //        if (x)
            //        {
            //            audioOla.NextBackgroundTrack();
            //        }
            //    });

            manualHeadMovement.Output.Subscribe(x =>
                {
                    if (x)
                    {
                        inputPan.Output.Controls(p => movingHead.Pan = p.Value);
                        inputTilt.Output.Controls(t => movingHead.Tilt = t.Value);
                    }
                    else
                    {
                        //                        inputPan.Output.Dis
                    }
                });

            //            buttonTest2.Output.Subscribe(reaperPopUp.PowerControl);
            catMotion.Output.Subscribe(catLights.Control);

            /*
                        finalBeam.Output.Subscribe(x =>
                            {
                                lightning1.Brightness = x ? 1.0 : 0.0;
                            });
            */

            //            buttonTest1.Output.Subscribe(pulsatingEffect2.InputRun);

            //buttonTest1.Output.Subscribe(x =>
            //    {
            //        pulsatingEffect2.Start
            //        if(x)

            //        if (x)
            //        {
            //            movingHead.Brightness = 1;
            //            movingHead.Color = Color.Red;
            //            //                        testLight4.StrobeSpeed = 1.0;
            //        }
            //        else
            //        {
            //            movingHead.TurnOff();
            //        }
            //    });

            catMotion.Output.Subscribe(x =>
                {
                    if (x && hoursSmall.IsOpen)
                        Executor.Current.Execute(catSeq);
                });

            buttonCatTrigger.Output.Subscribe(x =>
                {
                    if (x)
                    {
                        catLights.Value = true;
                        switch (random.Next(3))
                        {
                            case 0:
                                audioCat.PlayEffect("386 Demon Creature Growls");
                                break;
                            case 1:
                                audioCat.PlayEffect("348 Spider Hiss");
                                break;
                            case 2:
                                audioCat.PlayEffect("death-scream");
                                break;
                        }
                        Thread.Sleep(2000);
                        catLights.Value = false;
                    }
                });

            buttonTest1.Output.Subscribe(x =>
            {
                if (x)
                    audioOla.PlayTrack("12 Fear of the Dark");

                //if(x)
                //    georgeMotor.SetVector(0.9, 0, S(15));

                //                deadEnd.Power = x;
            });

            //            hoursSmall.Output.Subscribe(catAir.InputPower);
            //            hoursSmall.Output.Subscribe(flickerEffect.InputRun);
            //hoursSmall.Output.Subscribe(pulsatingEffect1.InputRun);
            //hoursSmall.Output.Subscribe(pulsatingEffect2.InputRun);
            hoursSmall.Output.Subscribe(lightTree.Control);

            hoursSmall.Output.Subscribe(x =>
                {
                    if (x)
                    {
                        stateMachine.SetBackgroundState(States.Background);
                        stateMachine.SetState(States.Background);
                    }
                    else
                    {
                        stateMachine.Hold();
                        stateMachine.SetBackgroundState(null);
                    }
                });

            timelineThunder1.AddMs(500, "A");
            timelineThunder1.AddMs(3500, "B");
            timelineThunder1.AddMs(4500, "C");
            timelineThunder1.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder2.AddMs(500, "A");
            timelineThunder2.AddMs(1500, "B");
            timelineThunder2.AddMs(1600, "C");
            timelineThunder2.AddMs(3700, "C");
            timelineThunder2.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder3.AddMs(100, "A");
            timelineThunder3.AddMs(200, "B");
            timelineThunder3.AddMs(300, "C");
            timelineThunder3.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder4.AddMs(0, "A");
            timelineThunder4.AddMs(3500, "B");
            timelineThunder4.AddMs(4500, "C");
            timelineThunder4.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder5.AddMs(1100, "A");
            timelineThunder5.AddMs(3500, "B");
            timelineThunder5.AddMs(4700, "C");
            timelineThunder5.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder6.AddMs(1000, "A");
            timelineThunder6.AddMs(1800, "B");
            timelineThunder6.AddMs(6200, "C");
            timelineThunder6.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder7.AddMs(0, "A");
            timelineThunder7.AddMs(200, "B");
            timelineThunder7.AddMs(300, "C");
            timelineThunder7.TimelineTrigger += TriggerThunderTimeline;

            timelineThunder8.AddMs(500, "A");
            timelineThunder8.AddMs(4000, "B");
            timelineThunder8.AddMs(4200, "C");
            timelineThunder8.TimelineTrigger += TriggerThunderTimeline;

            stateMachine.ForFromSequence(States.Background, backgroundSeq);
            stateMachine.ForFromSequence(States.Stair, reaperSeq);
            stateMachine.ForFromSequence(States.George, georgeSeq);
            stateMachine.ForFromSequence(States.StepForward, stepForwardSeq);

            georgeSeq.WhenExecuted
                .Execute(instance =>
                {
                    var controlPan = new Effect.Fader(S(3.8), 106, 150, false);
                    var controlTilt = new Effect.Fader(S(3.8), 231.8823531, 168.3529407, false);

                    controlPan.ConnectTo(x => movingHead.Pan = x);
                    controlTilt.ConnectTo(x => movingHead.Tilt = x);

                    controlPan.Prime();
                    controlTilt.Prime();
                    movingHead.Brightness = 0;
                    // Make sure George isn't moving
                    georgeMotor.WaitForVectorReached();

                    instance.WaitFor(S(1.5));

                    controlPan.Start();
                    controlTilt.Start();

                    georgeMotor.SetVector(1.0, 450, S(10));
                    instance.WaitFor(S(1.2));
                    movingHead.SetColor(Color.Red, 0.1);
                    instance.WaitFor(S(1.0));
                    audioGeorge.PlayEffect("162 Blood Curdling Scream of Terror");
                    georgeMotor.WaitForVectorReached();

                    instance.WaitFor(S(4));
                    movingHead.Brightness = 0;

                    georgeMotor.SetVector(0.9, 0, S(15));
                    movingHead.Pan = 106;
                    movingHead.Tilt = 31;
                    //georgeMotor.WaitForVectorReached();

                    //                        deadEnd.Power = true;
                    instance.WaitFor(S(0.5));
                    //                        deadEnd.Power = false;
                    //                        Exec.Execute(thunderSeq);
                    stateMachine.NextState();
                });

            stepForwardSeq.WhenExecuted
                .SetUp(() =>
                {
                    audioOla.PlayTrack("152 Haunted Castle");
                    candySpot.SetOnlyColor(Color.Green);
                    pulsatingEffect1.Start();
                    pulsatingEffect2.Start();
                })
                .Execute(i =>
                {
                    i.WaitFor(S(30.0));
                })
                .TearDown(() =>
                {
                    audioOla.PauseTrack();
                    pulsatingEffect1.Stop();
                    pulsatingEffect2.Stop();
                });

            reaperSeq.WhenExecuted
            .SetUp(() =>
            {
                flickerEffect.Stop();
                pulsatingEffect2.Stop();
            })
                .Execute(instance =>
                {
                    //                    switchFog.SetPower(true);
                    //                    this.lastFogRun = DateTime.Now;
                    //                    Executor.Current.Execute(deadendSeq);
                    //                    audioGeorge.PlayEffect("ghostly");
                    //                    instance.WaitFor(S(0.5));
                    //                    popOutEffect.Pop(1.0);

                    //                    instance.WaitFor(S(1.0));

                    movingHead.Pan = 106;
                    movingHead.Tilt = 31;
                    fog.Value = true;
                    this.lastFogRun = DateTime.Now;
                    instance.WaitFor(S(0.05));
                    audioReaper.PlayEffect("348 Spider Hiss", 1.0, 0.0);
                    instance.WaitFor(S(0.05));
                    spiderEyes1.Value = true;
                    instance.WaitFor(S(0.5));

                    movingHead.SetColor(Color.Turquoise, 0.2);
                    movingHead.StrobeSpeed = 0.8;

                    deadEnd.Value = true;
                    instance.WaitFor(S(0.3));
                    deadEnd.Value = false;

                    instance.WaitFor(S(2.5));
                    movingHead.StrobeSpeed = 0;
                    movingHead.Brightness = 0;

                    movingHead.Pan = 80;
                    movingHead.Tilt = 26;
                    instance.WaitFor(S(1.0));
                    audioReaper.PlayNewEffect("laugh", 0.0, 1.0);
                    instance.WaitFor(S(0.1));
                    spiderEyes1.Value = false;
                    reaperPopUp.Value = true;
                    reaperLight.Color = Color.Red;
                    reaperLight.Brightness = 1;
                    reaperLight.StrobeSpeed = 1;
                    instance.WaitFor(S(0.5));
                    reaperEyes.Value = true;
                    instance.WaitFor(S(2.0));

                    reaperPopUp.Value = false;
                    reaperEyes.Value = false;
                    reaperLight.TurnOff();
                    instance.WaitFor(S(2.0));
                    audioOla.PlayEffect("424 Coyote Howling", 0.0, 1.0);
                    audioGeorge.PlayEffect("424 Coyote Howling");
                    movingHead.SetColor(Color.Orange, 0.2);
                    instance.WaitFor(S(2.0));
                    spiderEyes2.Value = true;
                    popOut2.Pop(0.4);
                    audioGeorge.PlayEffect("348 Spider Hiss");
                    audioReaper.PlayEffect("348 Spider Hiss");

                    movingHead.Brightness = 0.7;
                    movingHead.Color = Color.Red;
                    movingHead.StrobeSpeed = 0.8;
                    movingHead.Pan = 51;
                    movingHead.Tilt = 61;
                    instance.WaitFor(S(2.0));
                    movingHead.StrobeSpeed = 0.0;
                    movingHead.Brightness = 0;
                    spiderEyes2.Value = false;
                    instance.WaitFor(S(2.0));

                    movingHead.Pan = 106;
                    movingHead.Tilt = 231;

                    stateMachine.NextState();
                })
                .TearDown(() =>
                {
                    flickerEffect.Start();
                    pulsatingEffect2.Start();
                    fog.Value = false;
                });

            reaperPopSeq.WhenExecuted
                .Execute(instance =>
                {
                    audioReaper.PlayNewEffect("laugh", 0.0, 1.0);
                    instance.WaitFor(S(0.1));
                    reaperPopUp.Value = true;
                    reaperLight.Color = Color.Red;
                    reaperLight.Brightness = 1;
                    reaperLight.StrobeSpeed = 1;
                    instance.WaitFor(S(0.5));
                    reaperEyes.Value = true;
                    instance.WaitFor(S(2.0));

                    reaperPopUp.Value = false;
                    reaperEyes.Value = false;
                    reaperLight.TurnOff();
                    instance.WaitFor(S(0.5));
                });

            finalSeq.WhenExecuted
                .SetUp(() =>
                {
                    audioOla.PauseTrack();
                    pulsatingEffect1.Stop();
                    pulsatingEffect2.Stop();
                })
                .Execute(i =>
                {
                    skullEyes.Value = true;
                    candySpot.SetColor(Color.Red);

                    i.WaitFor(S(1.0));
                    lightBehindHeads.SetOnlyColor(Color.White);
                    popOutBehindHeads.Pop(1.0);
                    audioOla.PlayEffect("125919__klankbeeld__horror-what-are-you-doing-here-cathedral", 0.0, 0.7);
                    i.WaitFor(S(10));
                })
                .TearDown(() =>
                {
                    audioOla.PlayBackground();
                    skullEyes.Value = false;
                    candySpot.SetOnlyColor(Color.Green);
                    pulsatingEffect1.Start();
                    pulsatingEffect2.Start();
                    //                        candySpot.SetColor(Color.Green);

                    //                        audioOla.PlayBackground();

                    if (stateMachine.CurrentState == States.StepForward)
                        stateMachine.SetState(States.Background);
                });

            thunderSeq.WhenExecuted
                .SetUp(() =>
                {
                    audioOla.PauseBackground();
                    //                        movingHead.Pan = 0.25;
                    //                        movingHead.Tilt = 0.5;
                    Thread.Sleep(200);
                })
                .Execute(i =>
                {
                    audioOla.PlayTrack("08 Weather-lightning-strike2");
                    //                        movingHead.SetOnlyColor(Color.White);
                    popOut1.Pop(1.0);
                    popOut2.Pop(1.0);
                    popOut3.Pop(1.0);

                    i.WaitFor(S(4));
                })
                .TearDown(() =>
                {
                    audioOla.PauseTrack();
                    audioOla.PlayBackground();
                });

            backgroundSeq.WhenExecuted
                .SetUp(() =>
                {
                    audioOla.NextBackgroundTrack();
                    flickerEffect.Start();
                    pulsatingEffect1.Start();
                    pulsatingEffect2.Start();
                })
                .Execute(i =>
                {
                    while (!i.IsCancellationRequested)
                    {
                        i.WaitFor(S(1));
                        if (!this.lastFogRun.HasValue || (DateTime.Now - this.lastFogRun.Value).TotalMinutes > 10)
                        {
                            // Run the fog for a little while
                            fog.Value = true;
                            i.WaitFor(S(4));
                            fog.Value = false;
                            this.lastFogRun = DateTime.Now;
                        }
                    }
                })
                .TearDown(() =>
                {
                    flickerEffect.Stop();
                    pulsatingEffect1.Stop();
                    pulsatingEffect2.Stop();
                    audioOla.PauseTrack();
                    audioOla.PauseBackground();
                });

            catSeq.WhenExecuted
                .Execute(instance =>
                {
                    var maxRuntime = System.Diagnostics.Stopwatch.StartNew();

                    catLights.Value = true;

                    while (true)
                    {
                        switch (random.Next(4))
                        {
                            case 0:
                                audioCat.PlayEffect("266 Monster Growl 7", 1.0, 1.0);
                                instance.WaitFor(TimeSpan.FromSeconds(2.0));
                                break;
                            case 1:
                                audioCat.PlayEffect("285 Monster Snarl 2", 1.0, 1.0);
                                instance.WaitFor(TimeSpan.FromSeconds(3.0));
                                break;
                            case 2:
                                audioCat.PlayEffect("286 Monster Snarl 3", 1.0, 1.0);
                                instance.WaitFor(TimeSpan.FromSeconds(2.5));
                                break;
                            case 3:
                                audioCat.PlayEffect("287 Monster Snarl 4", 1.0, 1.0);
                                instance.WaitFor(TimeSpan.FromSeconds(1.5));
                                break;
                            default:
                                instance.WaitFor(TimeSpan.FromSeconds(3.0));
                                break;
                        }

                        instance.CancelToken.ThrowIfCancellationRequested();

                        if (maxRuntime.Elapsed.TotalSeconds > 10)
                            break;
                    }
                })
                .TearDown(() =>
                {
                    catLights.Value = false;
                });
        }