Animatroller.SceneRunner.HalloweenScene2013B.Start C# (CSharp) Method

Start() public method

public Start ( ) : void
return void
        public override void Start()
        {
            hoursSmall.AddRange("5:00 pm", "9:00 pm");
            hoursFull.AddRange("5:00 pm", "9:00 pm");
            //hoursFull.SetForced(true);
            //hoursSmall.SetForced(true);
            //hoursFull.SetForced(false);
            //hoursSmall.SetForced(false);

#if !true
            hoursFull.SetForced(true);

            audioBeauty.SetSilent(true);
            audioCat.SetSilent(true);
            audioGeorge.SetSilent(true);
            audioSpider.SetSilent(true);
            georgeMotor.SetDisabled(true);
#endif
            var backgroundSeq = new Controller.Sequence("BG Sequence");
            backgroundSeq.WhenExecuted
                .SetUp(() =>
                    {
                        audioGeorge.PlayBackground();
                        lightFloor.SetOnlyColor(Color.Orange);
                        pulsatingEffect1.Start();
                        flickerEffect.Start();
                    })
                .Execute(instance =>
                    {
                        while (!instance.IsCancellationRequested)
                        {
                            instance.WaitFor(S(1));
                            if (!this.lastFogRun.HasValue || (DateTime.Now - this.lastFogRun.Value).TotalMinutes > 10)
                            {
                                // Run the fog for a little while
                                switchFog.SetPower(true);
                                instance.WaitFor(S(4));
                                switchFog.SetPower(false);
                                this.lastFogRun = DateTime.Now;
                            }
                        }
                    })
                .TearDown(() =>
                    {
                        audioGeorge.PauseBackground();
                        pulsatingEffect1.Stop();
                        flickerEffect.Stop();
                    });

            var deadendSeq = new Controller.Sequence("Deadend dr");
            deadendSeq.WhenExecuted
                .Execute(instance =>
                    {
                        switchDeadendDrive.SetPower(true);
                        Thread.Sleep(1000);
                        switchDeadendDrive.SetPower(false);
                    });

            var stairSeq = new Controller.Sequence("Stair Sequence");
            stairSeq.WhenExecuted
                .SetUp(() =>
                    {
                    })
                .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));
                        audioSpider.PlayNewEffect("348 Spider Hiss");
                        switchSpider.SetPower(true);
                        instance.WaitFor(S(0.5));
                        switchSpiderEyes1.SetPower(true);
                        instance.WaitFor(S(2));
                        switchSpider.SetPower(false);
                        switchSpiderEyes1.SetPower(false);
                        instance.WaitFor(S(4));
                        stateMachine.NextState();
                    })
                .TearDown(() =>
                    {
                        switchFog.SetPower(false);
                        audioGeorge.PauseFX();
                    });

            var georgeReturnSeq = new Controller.Sequence("George Return Seq");
            georgeReturnSeq.WhenExecuted
                .Execute(instance =>
                    {
                        georgeMotor.WaitForVectorReached();
                        georgeMotor.SetVector(0.9, 0, S(15));
                        georgeMotor.WaitForVectorReached();
                    });

            var georgeSeq = new Controller.Sequence("George Sequence");
            georgeSeq.WhenExecuted
                .Execute(instance =>
                {
                    //Exec.WaitUntilFinished(georgeReturnSeq);
                        
                    audioGeorge.PlayEffect("laugh");
                    georgeMotor.SetVector(1.0, 350, S(10));
                    instance.WaitFor(TimeSpan.FromSeconds(0.8));
                    lightGeorge.SetColor(Color.Red);
                    georgeMotor.WaitForVectorReached(instance);
                    instance.WaitFor(TimeSpan.FromSeconds(2));
                    georgeMotor.SetVector(0.9, 0, S(15));
                    lightGeorge.RunEffect(new Effect2.Fader(1.0, 0.0), S(1.0));
                    instance.WaitFor(TimeSpan.FromSeconds(1));
                    lightFloor.SetOnlyColor(Color.Green);
                    pulsatingEffect1.Start();
                    georgeMotor.WaitForVectorReached(instance);

                    instance.WaitFor(S(15));
                })
                .TearDown(() =>
                {
                    Exec.Execute(georgeReturnSeq);
                    pulsatingEffect1.Stop();
                    lightGeorge.TurnOff();
                });

            var spiderEyes2Seq = new Controller.Sequence("Spider Eyes 2");
            spiderEyes2Seq.WhenExecuted
                .Execute(instance =>
                    {
                        var rnd = new Random();
                        while (!instance.IsCancellationRequested)
                        {
                            switchSpiderEyes2.SetPower(true);
                            instance.WaitFor(S(1.0 + rnd.Next(10)));
                            switchSpiderEyes2.SetPower(false);
                            instance.WaitFor(S(1.0 + rnd.Next(2)));
                        }
                    });

            var popupSeq = new Controller.Sequence("Popup Sequence");
            popupSeq.WhenExecuted
                .Execute(instance =>
                    {
                        audioBeauty.PlayEffect("scream", 0.0, 1.0);
                        switchPopEyes.SetPower(true);
                        instance.WaitFor(TimeSpan.FromSeconds(1.0));
                        lightPopup.SetBrightness(1.0);
                        switchPopUp.SetPower(true);

                        instance.WaitFor(S(3));

                        lightPopup.RunEffect(new Effect2.Fader(1.0, 0.0), S(1.0));
                        switchPopEyes.TurnOff();
                        switchPopUp.TurnOff();
                    });

            var beautySeq = new Controller.Sequence("Beauty Sequence");
            beautySeq.WhenExecuted
                .Execute(instance =>
                {
                    flickerEffect2.Stop();
                    lightBeauty.SetColor(Color.Purple);
                    switchHand.SetPower(true);
                    instance.WaitFor(TimeSpan.FromSeconds(1));
                    audioBeauty.PlayEffect("gollum_precious1", 1.0, 0.0);
                    instance.WaitFor(TimeSpan.FromSeconds(0.4));
                    switchHead.SetPower(true);
                    instance.WaitFor(TimeSpan.FromSeconds(6));
                    switchHead.SetPower(false);
                    switchHand.SetPower(false);

                    instance.WaitFor(TimeSpan.FromSeconds(1.5));
                    lightBeauty.TurnOff();
                    instance.WaitFor(TimeSpan.FromSeconds(0.5));
                    switchDrawer1.SetPower(true);
                    switchHead.SetPower(true);
                    instance.WaitFor(TimeSpan.FromSeconds(0.5));
                    lightBeauty.SetColor(Color.Red, 1.0);
                    audioBeauty.PlayEffect("my_pretty", 1.0, 0.0);
                    instance.WaitFor(TimeSpan.FromSeconds(4));
                    switchDrawer2.SetPower(true);
                    instance.WaitFor(TimeSpan.FromSeconds(2));
                    switchDrawer1.SetPower(false);
                    instance.WaitFor(TimeSpan.FromSeconds(0.15));
                    switchDrawer2.SetPower(false);
                    instance.WaitFor(TimeSpan.FromSeconds(1));

                    switchHead.SetPower(false);
                    lightBeauty.RunEffect(new Effect2.Fader(1.0, 0.0), S(1.0));
                    if (hoursSmall.IsOpen)
                        flickerEffect2.Start();
                    instance.WaitFor(TimeSpan.FromSeconds(5));
                });


            var catSeq = new Controller.Sequence("Cat Sequence");
            catSeq.WhenExecuted
                .Execute(instance =>
                    {
                        var maxRuntime = System.Diagnostics.Stopwatch.StartNew();

                        var random = new Random();

                        catLights.SetPower(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.TurnOff();
                        });

            var candyCane = new Controller.Sequence("Candy Cane");
            candyCane
                .WhenExecuted
                .SetUp(() => allPixels.TurnOff())
                .Execute(instance =>
                {
                    var cbList = new List<ColorBrightness>();
                    //cbList.Add(new ColorBrightness(Color.Green, 1.00));
                    //cbList.Add(new ColorBrightness(Color.Green, 0.70));
                    //cbList.Add(new ColorBrightness(Color.Green, 0.40));
                    //cbList.Add(new ColorBrightness(Color.White, 1.00));
                    //cbList.Add(new ColorBrightness(Color.White, 0.70));
                    //cbList.Add(new ColorBrightness(Color.White, 0.40));
                    //cbList.Add(new ColorBrightness(Color.Red, 1.00));
                    //cbList.Add(new ColorBrightness(Color.Red, 0.70));
                    //cbList.Add(new ColorBrightness(Color.Red, 0.40));
                    //cbList.Add(new ColorBrightness(Color.Black, 0.0));
                    //cbList.Add(new ColorBrightness(Color.Black, 0.0));
                    //cbList.Add(new ColorBrightness(Color.Black, 0.0));
                    //cbList.Add(new ColorBrightness(Color.Black, 0.0));

                    double b1 = 1.00;
                    double b2 = 0.70;
                    double b3 = 0.40;
                    Color c1 = Color.Blue;
                    Color c2 = Color.Yellow;
                    Color c3 = Color.Blue;
                    Color c4 = Color.Black;

                    cbList.Add(new ColorBrightness(c1, b1));
                    cbList.Add(new ColorBrightness(c1, b2));
                    cbList.Add(new ColorBrightness(c1, b3));
                    cbList.Add(new ColorBrightness(c2, b1));
                    cbList.Add(new ColorBrightness(c2, b2));
                    cbList.Add(new ColorBrightness(c2, b3));
                    cbList.Add(new ColorBrightness(c3, b1));
                    cbList.Add(new ColorBrightness(c3, b2));
                    cbList.Add(new ColorBrightness(c3, b3));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));

                    b1 = 1.00;
                    b2 = 0.70;
                    b3 = 0.40;
                    c1 = Color.White;
                    c2 = Color.Blue;
                    c3 = Color.Red;
                    c4 = Color.Black;

                    cbList.Add(new ColorBrightness(c1, b1));
                    cbList.Add(new ColorBrightness(c1, b2));
                    cbList.Add(new ColorBrightness(c1, b3));
                    cbList.Add(new ColorBrightness(c2, b1));
                    cbList.Add(new ColorBrightness(c2, b2));
                    cbList.Add(new ColorBrightness(c2, b3));
                    cbList.Add(new ColorBrightness(c3, b1));
                    cbList.Add(new ColorBrightness(c3, b2));
                    cbList.Add(new ColorBrightness(c3, b3));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));

                    b1 = 1.00;
                    b2 = 0.70;
                    b3 = 0.40;
                    c1 = Color.Red;
                    c2 = Color.White;
                    c3 = Color.Blue;
                    c4 = Color.Black;

                    cbList.Add(new ColorBrightness(c1, b1));
                    cbList.Add(new ColorBrightness(c1, b2));
                    cbList.Add(new ColorBrightness(c1, b3));
                    cbList.Add(new ColorBrightness(c2, b1));
                    cbList.Add(new ColorBrightness(c2, b2));
                    cbList.Add(new ColorBrightness(c2, b3));
                    cbList.Add(new ColorBrightness(c3, b1));
                    cbList.Add(new ColorBrightness(c3, b2));
                    cbList.Add(new ColorBrightness(c3, b3));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));
                    cbList.Add(new ColorBrightness(c4, 0.0));

                    while (true)
                    {
                        foreach (var cb in cbList)
                        {
                            allPixels.Inject(cb);
                            instance.WaitFor(S(0.350), true);
                        }
                    }
                })
                .TearDown(() =>
                {
                    allPixels.TurnOff();
                });


            stateMachine.ForFromSequence(States.Background, backgroundSeq);
            stateMachine.ForFromSequence(States.Stair, stairSeq);
            stateMachine.ForFromSequence(States.George, georgeSeq);
            stateMachine.ForFromSequence(States.Popup, popupSeq);

            hoursSmall.OpenHoursChanged += (sender, e) =>
                {
                    if (e.IsOpenNow)
                    {
                        pulsatingEffect2.Start();
                        flickerEffect.Start();
                        flickerEffect2.Start();
                        catFan.SetPower(true);
                        lightEyes.SetPower(true);
                        lightTreeGhost.SetBrightness(1.0);
                        //                        Exec.Execute(candyCane);
                        allPixels.SetAll(Color.FromArgb(255, 115, 0), 0.5);
                    }
                    else
                    {
                        pulsatingEffect2.Stop();
                        flickerEffect.Stop();
                        flickerEffect2.Stop();
                        catFan.SetPower(false);
                        lightEyes.SetPower(false);
                        lightTreeGhost.TurnOff();
                        allPixels.TurnOff();
                    }
                };

            hoursFull.OpenHoursChanged += (sender, e) =>
            {
                if (e.IsOpenNow)
                {
                    Executor.Current.Execute(spiderEyes2Seq);
                    stateMachine.SetBackgroundState(States.Background);
                    stateMachine.SetState(States.Background);
                }
                else
                {
                    Executor.Current.Cancel(spiderEyes2Seq);
                    stateMachine.Hold();
                    stateMachine.SetBackgroundState(null);
                    audioGeorge.PauseBackground();
                }
            };

            buttonMotionCat.ActiveChanged += (sender, e) =>
                {
#if CHECK_SENSOR_ALIGNMENT
                    catLights.SetPower(e.NewState);
#else
                    if (e.NewState && hoursSmall.IsOpen)
                        Executor.Current.Execute(catSeq);
#endif
                };

            buttonMotionBeauty.ActiveChanged += (sender, e) =>
                {
                    if (e.NewState && hoursFull.IsOpen)
                        Executor.Current.Execute(beautySeq);
                };

            buttonTriggerStairs.ActiveChanged += (sender, e) =>
                {
                    if (!hoursSmall.IsOpen)
                    {
                        lightFloor.SetColor(Color.Purple, e.NewState ? 0.6 : 0.0);
                    }
                    else
                    {
                        if (e.NewState && hoursFull.IsOpen)
                        {
                            if (!stateMachine.CurrentState.HasValue || stateMachine.CurrentState == States.Background)
                                stateMachine.SetState(States.Stair);
                        }
                    }
                };

            buttonTriggerPopup.ActiveChanged += (sender, e) =>
            {
                if (!hoursSmall.IsOpen)
                {
                    lightPopup.SetBrightness(e.NewState ? 0.5 : 0.0);
                }
                else
                {
                    if (e.NewState)
                    {
                        if (stateMachine.CurrentState == States.George)
                            stateMachine.SetState(States.Popup);
                    }
                }
            };

            flickerEffect.AddDevice(skullsLight);
            flickerEffect2.AddDevice(skullsLight2);
            lightFloor.SetColor(Color.Orange, 0);
            lightSign.SetColor(Color.Pink, 0);
            pulsatingEffect1.AddDevice(lightFloor);
            pulsatingEffect1.AddDevice(lightSpiderWeb);
            pulsatingEffect2.AddDevice(lightSign);

            popOutEffect.AddDevice(skullsLight);

            ForTest();
        }