Animatroller.Scenes.Xmas2015.Xmas2015 C# (CSharp) Метод

Xmas2015() публичный Метод

public Xmas2015 ( IEnumerable args ) : System
args IEnumerable
Результат System
        public Xmas2015(IEnumerable<string> args)
        {
            hours.AddRange("4:00 pm", "10:00 pm");

            string expanderFilesFolder = string.Empty;
            string expFilesParam = args.FirstOrDefault(x => x.StartsWith("EXPFILES"));
            if (!string.IsNullOrEmpty(expFilesParam))
            {
                string[] parts = expFilesParam.Split('=');
                if (parts.Length == 2)
                {
                    expanderFilesFolder =
                    expanderServer.ExpanderSharedFiles = parts[1];
                }
            }

            pulsatingEffect1.ConnectTo(lightOlaf);
            pulsatingEffect2.ConnectTo(lightR2D2);
            pulsatingEffect3.ConnectTo(pixelsRoofEdge, Utils.AdditionalData(Color.Red));
            pulsatingEffect4.ConnectTo(lightBlueButton);
            pulsatingEffect4.ConnectTo(lightRedButton);

            expanderServer.AddInstance("ec30b8eda95b4c5cab46bf630d74810e", expanderLocal);
            expanderServer.AddInstance("ed86c3dc166f41ee86626897ba039ed2", expander1);      // rpi-eb0092ca
            expanderServer.AddInstance("10520fdcf14d47cba31da8b6e05d01d8", expander2);      // rpi-eb428ef1
            expanderServer.AddInstance("59ebb8e925c94182a0f6e0ef09180200", expander3);      // rpi-eba6cbc7
            expanderServer.AddInstance("1583f686014345888c15d7fc9c55ca3c", expander4);      // rpi-eb81c94e

            expander1.DigitalInputs[5].Connect(inR2D2);
            expander1.DigitalInputs[4].Connect(inOlaf);
            expander1.DigitalInputs[6].Connect(inShowMachine);
            expander1.DigitalOutputs[7].Connect(out1);
            expander4.DigitalOutputs[7].Connect(snowMachine);

            expander4.DigitalInputs[5].Connect(inBlueButton);
            expander4.DigitalInputs[4].Connect(inRedButton);

            expander1.Connect(audio1);
            expander2.Connect(audioMain);
            expander3.Connect(video3);
            expander4.Connect(audioDarthVader);

            blackOut.ConnectTo(Exec.Blackout);
            whiteOut.ConnectTo(Exec.Whiteout);

            midiAkai.Controller(midiChannel, 1).Subscribe(x => blackOut.Value = x.Value);
            midiAkai.Controller(midiChannel, 2).Subscribe(x => whiteOut.Value = x.Value);

            dmxPlayback.Load(Path.Combine(expanderFilesFolder, "Seq", "XmasLoop.bin"), 15);
            dmxPlayback.Loop = true;

            var pixelMapping = Framework.Utility.PixelMapping.GeneratePixelMappingFromGlediatorPatch(
                Path.Combine(expanderFilesFolder, "Glediator", "ArtNet 14-15 20x10.patch.glediator"));
            dmxPlayback.SetOutput(pixelsMatrix, pixelMapping);

            buttonOverrideHours.Output.Subscribe(x =>
            {
                if (x)
                    hours.SetForced(true);
                else
                    hours.SetForced(null);
            });

            inflatablesRunning.Subscribe(x =>
            {
                airReindeer.SetValue(x);

                Exec.SetKey("InflatablesRunning", x.ToString());
            });

            // Read from storage
            inflatablesRunning.OnNext(Exec.GetSetKey("InflatablesRunning", false));

            //            hours.Output.Log("Hours inside");

            stateMachine.ForFromSubroutine(States.Background, subBackground);
            stateMachine.ForFromSubroutine(States.Music1, subMusic1);
            stateMachine.ForFromSubroutine(States.Music2, subMusic2);
            stateMachine.ForFromSubroutine(States.SantaVideo, subSantaVideo);
            stateMachine.ForFromSubroutine(States.DarthVader, subStarWars);

            airR2D2.SetValue(true);
            airSanta1.SetValue(true);
            airOlaf.SetValue(true);
            laser.SetValue(true);

            hours
            //    .ControlsMasterPower(packages)
            //    .ControlsMasterPower(airSnowman)
                .ControlsMasterPower(airOlaf)
                .ControlsMasterPower(laser)
                .ControlsMasterPower(airSanta1)
                .ControlsMasterPower(airR2D2);
            //    .ControlsMasterPower(airSanta);

            buttonStartInflatables.Output.Subscribe(x =>
            {
                if (x && hours.IsOpen)
                {
                    inflatablesRunning.OnNext(true);
                }
            });

            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 0, 50), SacnUniverse6, 1);
            acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 50, 100), SacnUniverse5, 1);

            var pixelMapping2D = Framework.Utility.PixelMapping.GeneratePixelMapping(20, 10, pixelOrder: Framework.Utility.PixelOrder.HorizontalSnakeBottomLeft);
            acnOutput.Connect(new Physical.Pixel2D(pixelsMatrix, pixelMapping2D), SacnUniverse10, 1);

            acnOutput.Connect(new Physical.Pixel1D(saberPixels, 0, 32), SacnUniverse12, 1);

            acnOutput.Connect(new Physical.GenericDimmer(airOlaf, 10), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(airReindeer, 12), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(airR2D2, 11), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat1, 96), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat2, 97), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat3, 98), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightHat4, 99), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightVader, 60), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightWall1, 70), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightWall2, 40), SacnUniverseDMX);
            acnOutput.Connect(new Physical.RGBStrobe(lightWall3, 80), SacnUniverseDMX);

            acnOutput.Connect(new Physical.GenericDimmer(laser, 4), SacnUniverseRenardBig);

            acnOutput.Connect(new Physical.GenericDimmer(lightOlaf, 128), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightSanta, 131), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightSnowman, 132), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightSnowman, 132), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightBlueButton, 262), SacnUniverseDMX);
            acnOutput.Connect(new Physical.GenericDimmer(lightRedButton, 263), SacnUniverseDMX);

            acnOutput.Connect(new Physical.GenericDimmer(lightR2D2, 16), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightRail2, 10), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet5, 11), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet6, 19), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(airSanta1, 20), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet7, 22), SacnUniverseRenardBig);

            acnOutput.Connect(new Physical.GenericDimmer(lightStairs2, 25), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightXmasTree, 26), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightReindeer2, 29), SacnUniverseRenardBig);
            acnOutput.Connect(new Physical.GenericDimmer(lightReindeer1, 32), SacnUniverseRenardBig);

            acnOutput.Connect(new Physical.GenericDimmer(lightStairs1, 1), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet2, 2), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet1, 3), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet3, 4), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightNet4, 5), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightRail1, 6), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightTopper1, 7), SacnUniverseRenardSmall);
            acnOutput.Connect(new Physical.GenericDimmer(lightTopper2, 8), SacnUniverseRenardSmall);

            hours.Output.Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToDefaultState();
                }
                else
                {
                    //if (buttonOverrideHours.Active)
                    //    return;

                    stateMachine.GoToIdle();

                    // Needed?
                    System.Threading.Thread.Sleep(200);

                    inflatablesRunning.OnNext(false);
                }
            });

            subBackground
                .LockWhenRunning(
                    lightNet1,
                    lightNet2,
                    lightNet3,
                    lightNet4,
                    lightNet5,
                    lightNet6,
                    lightNet7,
                    lightNet8,
                    lightTopper1,
                    lightTopper2,
                    lightXmasTree,
                    lightStairs1,
                    lightStairs2,
                    lightRail1,
                    lightRail2,
                    lightSanta,
                    lightSnowman,
                    lightHat1,
                    lightHat2,
                    lightHat3,
                    lightHat4,
                    lightReindeer1,
                    lightReindeer2,
                    lightVader,
                    lightWall1,
                    lightWall2,
                    lightWall3,
                    lightR2D2,
                    lightOlaf,
                    saberPixels)
                .RunAction(i =>
                {
                    pulsatingEffect4.Start();
                    lightR2D2.SetBrightness(1, i.Token);
                    lightOlaf.SetBrightness(1, i.Token);
                    lightNet1.SetBrightness(1, i.Token);
                    lightNet2.SetBrightness(1, i.Token);
                    lightNet3.SetBrightness(1, i.Token);
                    lightNet4.SetBrightness(1, i.Token);
                    lightNet5.SetBrightness(1, i.Token);
                    lightNet6.SetBrightness(1, i.Token);
                    lightNet7.SetBrightness(1, i.Token);
                    lightNet8.SetBrightness(1, i.Token);
                    lightTopper1.SetBrightness(1, i.Token);
                    lightTopper2.SetBrightness(1, i.Token);
                    lightXmasTree.SetBrightness(1, i.Token);
                    lightStairs1.SetBrightness(1, i.Token);
                    lightStairs2.SetBrightness(1, i.Token);
                    lightRail1.SetBrightness(1, i.Token);
                    lightRail2.SetBrightness(1, i.Token);
                    lightSanta.SetBrightness(1, i.Token);
                    lightSnowman.SetBrightness(1, i.Token);
                    lightHat1.SetBrightness(1, i.Token);
                    lightHat2.SetBrightness(1, i.Token);
                    lightHat3.SetBrightness(1, i.Token);
                    lightHat4.SetBrightness(1, i.Token);
                    lightReindeer1.SetBrightness(1, i.Token);
                    lightReindeer2.SetBrightness(1, i.Token);
                    lightVader.SetColor(Color.Red, 1, i.Token);
                    lightWall1.SetColor(Color.Red, 1, i.Token);
                    lightWall2.SetColor(Color.Red, 1, i.Token);
                    lightWall3.SetColor(Color.Red, 1, i.Token);

                    saberPixels.SetColor(Color.Red, 0.4, i.Token);

                    subCandyCane.Run();
                    dmxPlayback.Run();

                    i.WaitUntilCancel();

                    dmxPlayback.Stop();
                    Exec.Cancel(subCandyCane);
                    pulsatingEffect4.Stop();
                });

            subCandyCane
                .LockWhenRunning(pixelsRoofEdge)
                .RunAction(i =>
                {
                    const int spacing = 4;

                    while (true)
                    {
                        for (int x = 0; x < spacing; x++)
                        {
                            pixelsRoofEdge.Inject((x % spacing) == 0 ? Color.Red : Color.White, 0.5, i.Token);

                            i.WaitFor(S(0.30), true);
                        }
                    }
                });

            subSnow
                .RunAction(ins =>
                {
                    snowMachine.SetValue(true);

                    ins.WaitFor(S(30));
                })
                .TearDown(i =>
                {
                    snowMachine.SetValue(false);
                });

            subStarWarsCane
                .LockWhenRunning(
                    pixelsRoofEdge,
                    pixelsMatrix)
                .RunAction(instance =>
                {
                    const int spacing = 4;

                    while (!instance.CancelToken.IsCancellationRequested)
                    {
                        for (int i = 0; i < spacing; i++)
                        {
                            switch (i % spacing)
                            {
                                case 0:
                                case 1:
                                    pixelsRoofEdge.InjectRev(Color.Yellow, 1.0, instance.Token);
                                    break;
                                case 2:
                                case 3:
                                    pixelsRoofEdge.InjectRev(Color.Orange, 0.2, instance.Token);
                                    break;
                            }

                            instance.WaitFor(S(0.1));

                            if (instance.IsCancellationRequested)
                                break;
                        }
                    }
                });

            subMusic1
                .RunAction(ins =>
                    {
                        audioMain.PlayTrack("08 Feel the Light.wav");
                        ins.WaitFor(S(240));
                    }).TearDown(i =>
                    {
                        lorFeelTheLight.Stop();
                        audioMain.PauseTrack();
                    });

            subMusic2
                .RunAction(ins =>
                {
                    snowMachine.SetValue(true);
                    audioMain.PlayTrack("T.P.E. - 04 - Josh Groban - Believe.flac");
                    ins.WaitFor(S(260));
                }).TearDown(i =>
                {
                    snowMachine.SetValue(false);
                    lorBelieve.Stop();
                    audioMain.PauseTrack();
                });

            subSantaVideo
                .RunAction(i =>
                {
                    pulsatingEffect3.Start();
                    switch (random.Next(6))
                    {
                        case 0:
                            video3.PlayVideo("NBC_DeckTheHalls_Holl_H.mp4");
                            break;

                        case 1:
                            video3.PlayVideo("NBC_AllThruHouse_Part1_Holl_H.mp4");
                            break;

                        case 2:
                            video3.PlayVideo("NBC_AllThruHouse_Part2_Holl_H.mp4");
                            break;

                        case 3:
                            video3.PlayVideo("NBC_AllThruHouse_Part3_Holl_H.mp4");
                            break;

                        case 4:
                            video3.PlayVideo("NBC_JingleBells_Holl_H.mp4");
                            break;

                        case 5:
                            video3.PlayVideo("NBC_WeWishYou_Holl_H.mp4");
                            break;
                    }

                    i.WaitFor(S(120), false);
                    pulsatingEffect3.Stop();
                });

            subOlaf
                .RunAction(i =>
                {
                    pulsatingEffect1.Start();
                    audio1.PlayNewEffect("WarmHugs.wav", 0.0, 1.0);
                    i.WaitFor(S(10));
                    pulsatingEffect1.Stop();
                });

            subR2D2
                .RunAction(i =>
                {
                    pulsatingEffect2.Start();
                    audio1.PlayNewEffect("Im C3PO.wav", 1.0, 0.0);
                    i.WaitFor(S(4));
                    audio1.PlayNewEffect("Processing R2D2.wav", 0.5, 0.0);
                    i.WaitFor(S(5));
                    pulsatingEffect2.Stop();
                });

            subStarWars
                .LockWhenRunning(
                    saberPixels,
                    lightVader,
                    lightR2D2)
                .RunAction(instance =>
                {
                    //Exec.Cancel(subCandyCane);
                    subStarWarsCane.Run();
                    lightR2D2.SetBrightness(1.0, instance.Token);

                    audioMain.PlayTrack("01. Star Wars - Main Title.wav");

                    instance.WaitFor(S(16));

                    /*
                        elJesus.SetPower(true);
                        pulsatingStar.Start();
                        lightJesus.SetColor(Color.White, 0.3);
                        light3wise.SetOnlyColor(Color.LightYellow);
                        light3wise.RunEffect(new Effect2.Fader(0.0, 1.0), S(1.0));*/

                    Exec.MasterEffect.Fade(lightVader, 0.0, 1.0, 1000, token: instance.Token, additionalData: Utils.AdditionalData(Color.Red));
                    instance.WaitFor(S(2.5));

                    Exec.Cancel(subStarWarsCane);
                    instance.WaitFor(S(0.5));

                    audioDarthVader.PlayEffect("saberon.wav");
                    for (int sab = 00; sab < 32; sab++)
                    {
                        saberPixels.Inject(Color.Red, 0.5, instance.Token);
                        instance.WaitFor(S(0.01));
                    }
                    instance.WaitFor(S(1));
                    audioMain.PauseTrack();

                    lightVader.SetColor(Color.Red, 1.0, instance.Token);
                    audioDarthVader.PlayEffect("father.wav");
                    instance.WaitFor(S(5));

                    lightVader.SetBrightness(0.0, instance.Token);
                    //light3wise.TurnOff();
                    //lightJesus.TurnOff();
                    //pulsatingStar.Stop();
                    //elJesus.TurnOff();

                    audioDarthVader.PlayEffect("force1.wav");
                    instance.WaitFor(S(4));

                    audioDarthVader.PlayEffect("saberoff.wav");
                    instance.WaitFor(S(0.7));
                    for (int sab = 0; sab < 16; sab++)
                    {
                        saberPixels.InjectRev(Color.Black, 0, instance.Token);
                        saberPixels.InjectRev(Color.Black, 0, instance.Token);
                        instance.WaitFor(S(0.01));
                    }
                    //elLightsaber.SetPower(false);
                    instance.WaitFor(S(2));

                    //lightJesus.TurnOff();
                    //light3wise.TurnOff();
                    //elLightsaber.TurnOff();
                    //pulsatingStar.Stop();
                    //elJesus.TurnOff();
                    //instance.WaitFor(S(2));
                })
                .TearDown(i =>
                {
                    audioMain.PauseTrack();
                });

            midiAkai.Note(midiChannel, 36).Subscribe(x =>
            {
                if (x)
                    subOlaf.Run();
            });

            midiAkai.Note(midiChannel, 37).Subscribe(x =>
            {
                if (x)
                    subR2D2.Run();
            });

            midiAkai.Note(midiChannel, 38).Subscribe(x =>
            {
                if (x)
                    stateMachine.GoToState(States.Music1);
                //                    audio2.PlayTrack("08 Feel the Light.wav");
            });

            midiAkai.Note(midiChannel, 39).Subscribe(x =>
            {
                if (x)
                {
                    lorFeelTheLight.Stop();
                    audioMain.PauseTrack();
                }
            });

            midiAkai.Note(midiChannel, 40).Subscribe(x =>
            {
                if (x)
                {
                    stateMachine.GoToState(States.SantaVideo);
                }
            });

            inOlaf.Output.Subscribe(x =>
            {
                if (x && hours.IsOpen)
                    subOlaf.Run();
            });

            inR2D2.Output.Subscribe(x =>
            {
                if (x && hours.IsOpen)
                    subR2D2.Run();
            });

            inRedButton.Output.Subscribe(x =>
            {
                if (x)
                {
                    if (hours.IsOpen)
                    {
                        if (stateMachine.CurrentState == States.Background)
                            stateMachine.GoToState(States.DarthVader);
                    }
                    else
                        audioDarthVader.PlayEffect("darthvader_lackoffaith.wav");
                }
            });

            inBlueButton.Output.Subscribe(x =>
            {
                if (x)
                {
                    if (hours.IsOpen)
                    {
                        subSnow.Run();
                        if (stateMachine.CurrentState == States.Background)
                            stateMachine.GoToState(States.Music2);
                    }
                    else
                        audioDarthVader.PlayEffect("darkside.wav");
                }
            });

            audioMain.AudioTrackStart += (o, e) =>
            {
                switch (e.FileName)
                {
                    case "08 Feel the Light.wav":
                        lorFeelTheLight.Start(27830);
                        break;

                    case "T.P.E. - 04 - Josh Groban - Believe.flac":
                        lorBelieve.Start();
                        break;
                }
            };

            audioMain.AudioTrackDone += (o, e) =>
            {
                //                Thread.Sleep(5000);
                //    audio2.PlayTrack("08 Feel the Light.wav");
            };

            inShowMachine.Output.Subscribe(x =>
            {
                snowMachine.SetValue(x);
                //                lightRedButton.SetBrightness(x ? 1.0 : 0.0);
                //if (x)
                //    stateMachine.GoToState(States.Music1);
            });

            in2.Output.Subscribe(x =>
            {
                if (x)
                    stateMachine.GoToIdle();
            });

            in3.Output.Subscribe(x =>
            {
                if (x)
                    stateMachine.GoToDefaultState();
            });

            ImportAndMapFeelTheLight();
            ImportAndMapBelieve();
        }