public Xmas2016(IEnumerable<string> args)
{
hours.AddRange("4:00 pm", "10:00 pm");
hours.Output.Log("Hours");
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];
}
}
pulsatingStar.ConnectTo(lightHangingStar);
pulsatingEffectOlaf.ConnectTo(lightOlaf);
pulsatingEffectPoppy.ConnectTo(lightPoppy);
pulsatingEffectR2D2.ConnectTo(lightR2D2);
pulsatingEffectGeneral.ConnectTo(lightHangingStar);
pulsatingEffectGeneral.ConnectTo(lightOlaf);
pulsatingEffectGeneral.ConnectTo(lightR2D2);
pulsatingEffectGeneral.ConnectTo(lightPoppy);
pulsatingEffectGeneral.ConnectTo(lightTreeStars);
pulsatingEffectGeneral.ConnectTo(lightVader, Utils.AdditionalData(Color.Red));
pulsatingPinSpot.ConnectTo(lightPinSpot, Utils.AdditionalData(Color.Red));
pulsatingEffectTree.ConnectTo(pixelsTree, Utils.AdditionalData(treeColors[0]));
pulsatingEffectTree.ConnectTo(pixelsBetweenTrees, Utils.AdditionalData(treeColors[0]));
pulsatingEffectTree.NewIterationAction = i =>
{
Color newColor = treeColors[i % treeColors.Length];
pulsatingEffectTree.SetAdditionalData(pixelsTree, Utils.AdditionalData(newColor));
pulsatingEffectTree.SetAdditionalData(pixelsBetweenTrees, Utils.AdditionalData(newColor));
};
expanderServer.AddInstance("ec30b8eda95b4c5cab46bf630d74810e", expanderLocal);
expanderServer.AddInstance("ed86c3dc166f41ee86626897ba039ed2", expanderLedmx); // rpi-eb0092ca
expanderServer.AddInstance("76d09e6032d54e77aafec90e1fc4b35b", expanderHiFi); // rpi-eb428ef1
expanderServer.AddInstance("4ea781ef257442edb524493da8f52220", expanderVideo1); // rpi-eba6cbc7
expanderServer.AddInstance("999861affa294fd7bbf0601505e9ae09", expanderSnow); // rpi-ebd43a38
expanderServer.AddInstance("e41d2977931d4887a9417e8adcd87306", expanderControlPanel); // rpi-eb6a047c
expanderLedmx.DigitalInputs[6].Connect(inPoppy);
expanderLedmx.DigitalInputs[5].Connect(inR2D2);
expanderLedmx.DigitalInputs[4].Connect(inOlaf);
expanderSnow.DigitalOutputs[6].Connect(snowMachine);
expanderControlPanel.DigitalInputs[0].Connect(controlButtonWhite, true);
expanderControlPanel.DigitalInputs[1].Connect(controlButtonYellow, true);
expanderControlPanel.DigitalInputs[2].Connect(controlButtonBlue, true);
expanderControlPanel.DigitalInputs[3].Connect(controlButtonGreen, true);
expanderControlPanel.DigitalInputs[4].Connect(controlButtonBlack, true);
expanderControlPanel.DigitalInputs[5].Connect(controlButtonRed, true);
expanderLedmx.Connect(audioLedmx);
expanderHiFi.Connect(audioHiFi);
expanderSnow.Connect(audioDarthVader);
expanderVideo1.Connect(audioVideo1);
blackOut.ConnectTo(Exec.Blackout);
whiteOut.ConnectTo(Exec.Whiteout);
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 =>
{
airReindeerBig.SetValue(x);
});
stateMachine.ForFromSubroutine(States.Background, subBackground);
stateMachine.ForFromSubroutine(States.MusicChristmasCanon, subMusicChristmasCanon);
stateMachine.ForFromSubroutine(States.MusicBelieve, subMusicBelieve);
stateMachine.ForFromSubroutine(States.MusicSarajevo, subMusicSarajevo);
stateMachine.ForFromSubroutine(States.MusicHolyNight, subMusicHolyNight);
stateMachine.ForFromSubroutine(States.MusicCarol, subMusicCarol);
stateMachine.ForFromSubroutine(States.SantaVideo, subSantaVideo);
stateMachine.ForFromSubroutine(States.DarthVader, subStarWars);
hours
.ControlsMasterPower(laser)
.ControlsMasterPower(airR2D2Olaf)
.ControlsMasterPower(airSantaPoppy1)
.ControlsMasterPower(airSnowman)
.ControlsMasterPower(airTree)
.ControlsMasterPower(airSantaPopup);
buttonStartInflatables.Output.Subscribe(x =>
{
if (x && hours.IsOpen)
{
inflatablesRunning.OnNext(true);
Exec.SetKey("InflatablesRunning", "True");
}
});
laserActivated.WhenOutputChanges(x =>
{
laser.SetValue(x);
});
buttonTest.WhenOutputChanges(x =>
{
});
buttonReset.WhenOutputChanges(x =>
{
if (x)
stateMachine.GoToDefaultState();
});
acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 0, 50, reverse: true), SacnUniverseLED50, 1);
acnOutput.Connect(new Physical.Pixel1D(pixelsRoofEdge, 50, 100), SacnUniverseLED100, 1);
acnOutput.Connect(new Physical.Pixel1D(pixelsTree, 0, 50), SacnUniverseLEDTree50, 1);
acnOutput.Connect(new Physical.Pixel1D(pixelsBetweenTrees, 0, 50), SacnUniversePixelString1, 1);
//acnOutput.Connect(new Physical.Pixel1D(pixelsTree, 0, 50), SacnUniversePixelString2, 1);
acnOutput.Connect(new Physical.Pixel1D(pixelsGround, 0, 50), SacnUniversePixelGround, 1);
acnOutput.Connect(new Physical.Pixel1D(pixelsHeart, 0, 50), SacnUniversePixelString4, 1);
var pixelMapping2D = Framework.Utility.PixelMapping.GeneratePixelMapping(20, 10, pixelOrder: Framework.Utility.PixelOrder.HorizontalSnakeBottomLeft);
acnOutput.Connect(new Physical.Pixel2D(pixelsMatrix, pixelMapping2D), SacnUniversePixelMatrix, 1);
acnOutput.Connect(new Physical.Pixel1D(saberPixels), SacnUniversePixelSaber, 1);
acnOutput.Connect(new Physical.Pixel1D(haloPixels), SacnUniversePixelSaber, 100);
acnOutput.Connect(new Physical.GenericDimmer(airReindeerBig, 10), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(airR2D2Olaf, 33), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightHat1, 21), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightHat2, 22), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightHat3, 23), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightHat4, 24), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightStairRail1, 19), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightStairRail2, 38), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightRail1, 20), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightRail2, 28), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightRail3, 29), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightRail4, 66), SacnUniverseLedmx);
acnOutput.Connect(new Physical.MarcGamutParH7(lightVader, 310), SacnUniverseLedmx);
acnOutput.Connect(new Physical.RGBStrobe(lightFlood1, 60), SacnUniverseEdmx4);
acnOutput.Connect(new Physical.MarcGamutParH7(lightFlood2, 330), SacnUniverseEdmx4);
acnOutput.Connect(new Physical.RGBStrobe(lightFlood3, 70), SacnUniverseLedmx);
acnOutput.Connect(new Physical.RGBStrobe(lightFlood4, 40), SacnUniverseLedmx);
acnOutput.Connect(new Physical.MarcGamutParH7(lightFlood5, 340), SacnUniverseLedmx);
acnOutput.Connect(new Physical.RGBStrobe(lightFlood4, 40), SacnUniverseLedmx);
acnOutput.Connect(new Physical.MarcGamutParH7(lightFlood5, 340), SacnUniverseLedmx);
acnOutput.Connect(new Physical.RGBStrobe(lightFlood6, 80), SacnUniverseLedmx);
acnOutput.Connect(new Physical.MarcGamutParH7(lightFlood7, 300), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(laser, 1), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightOlaf, 128), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(airSnowman, 133), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(airTree, 9), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightInflatableTree, 10), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightSnowman, 131), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightSanta, 132), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightPoppy, 134), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightSantaPopup, 263), SacnUniverseEdmx4);
acnOutput.Connect(new Physical.MonopriceMovingHeadLight12chn(movingHead, 200), SacnUniverseEdmx4);
acnOutput.Connect(new Physical.GenericDimmer(lightReindeerBig, 65), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightStairs1, 64), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightStairs2, 25), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightStairs3, 2), SacnUniverseRenard18);
acnOutput.Connect(new Physical.MonopriceRGBWPinSpot(lightPinSpot, 20), SacnUniverseEdmx4);
acnOutput.Connect(new Physical.GenericDimmer(lightTreeStars, 39), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightR2D2, 37), SacnUniverseRenard18);
//acnOutput.Connect(new Physical.GenericDimmer(lightNet5, 11), SacnUniverseRenardBig);
//acnOutput.Connect(new Physical.GenericDimmer(lightNet6, 19), SacnUniverseRenardBig);
acnOutput.Connect(new Physical.GenericDimmer(airSantaPopup, 15), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(airSantaPoppy1, 30), SacnUniverseRenard18);
//acnOutput.Connect(new Physical.GenericDimmer(lightNet7, 22), SacnUniverseRenardBig);
acnOutput.Connect(new Physical.GenericDimmer(hazerFanSpeed, 500), SacnUniverseEdmx4);
acnOutput.Connect(new Physical.GenericDimmer(hazerHazeOutput, 501), SacnUniverseEdmx4);
// acnOutput.Connect(new Physical.GenericDimmer(lightStairs2, 25), SacnUniverseRenardBig);
acnOutput.Connect(new Physical.GenericDimmer(lightXmasTree, 11), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightReindeers, 40), SacnUniverseRenard18);
// acnOutput.Connect(new Physical.GenericDimmer(lightStairs1, 1), SacnUniverseRenardSmall);
//acnOutput.Connect(new Physical.GenericDimmer(lightNet2, 2), SacnUniverseRenardSmall);
acnOutput.Connect(new Physical.GenericDimmer(lightNet1, 5), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet2, 6), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet3, 7), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightTopper1, 3), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightTopper2, 4), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightHangingStar, 8), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet4, 26), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet5, 27), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet6, 34), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet7, 35), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet8, 36), SacnUniverseRenard18);
acnOutput.Connect(new Physical.GenericDimmer(lightNet9, 50), SacnUniverseLedmx);
acnOutput.Connect(new Physical.GenericDimmer(lightNet10, 51), SacnUniverseLedmx);
//acnOutput.Connect(new Physical.GenericDimmer(lightNet3, 4), SacnUniverseRenardSmall);
//acnOutput.Connect(new Physical.GenericDimmer(lightNet4, 5), SacnUniverseRenardSmall);
//acnOutput.Connect(new Physical.GenericDimmer(lightTopper1, 7), SacnUniverseRenardSmall);
//acnOutput.Connect(new Physical.GenericDimmer(lightTopper2, 8), SacnUniverseRenardSmall);
faderR.WhenOutputChanges(v => { SetManualColor(); });
faderG.WhenOutputChanges(v => { SetManualColor(); });
faderB.WhenOutputChanges(v => { SetManualColor(); });
faderBright.WhenOutputChanges(v => { SetManualColor(); });
faderPan.Output.Subscribe(p =>
{
movingHead.SetPan(p * 540, null);
});
faderTilt.Output.Subscribe(t =>
{
movingHead.SetTilt(t * 270, null);
});
hours.Output.Subscribe(x =>
{
if (x)
{
stateMachine.SetDefaultState(States.Background);
stateMachine.GoToDefaultState();
}
else
{
//if (buttonOverrideHours.Active)
// return;
stateMachine.SetDefaultState(null);
stateMachine.GoToIdle();
// Needed?
System.Threading.Thread.Sleep(200);
if (Initialized)
{
inflatablesRunning.OnNext(false);
Exec.SetKey("InflatablesRunning", "False");
}
}
});
subBackground
.AutoAddDevices(lockPriority: 100)
.RunAction(i =>
{
lightStairs1.SetBrightness(1);
lightStairs2.SetBrightness(1);
lightStairs3.SetBrightness(1);
lightReindeerBig.SetBrightness(1);
pulsatingEffectGeneral.Start();
pulsatingEffectTree.Start();
pulsatingPinSpot.Start();
lightNet1.SetBrightness(1);
lightNet2.SetBrightness(1);
lightNet3.SetBrightness(1);
lightNet4.SetBrightness(1);
lightNet5.SetBrightness(1);
lightNet6.SetBrightness(1);
lightNet7.SetBrightness(1);
lightNet8.SetBrightness(1);
lightNet9.SetBrightness(1);
lightNet10.SetBrightness(1);
lightTopper1.SetBrightness(1);
lightTopper2.SetBrightness(1);
lightInflatableTree.SetBrightness(1);
lightXmasTree.SetValue(true);
lightStairRail1.SetBrightness(1);
lightStairRail2.SetBrightness(1);
lightRail1.SetBrightness(1);
lightRail2.SetBrightness(1);
lightRail3.SetBrightness(1);
lightRail4.SetBrightness(1);
lightSanta.SetBrightness(1);
lightSantaPopup.SetBrightness(1);
lightSnowman.SetBrightness(1);
lightHat1.SetBrightness(1);
lightHat2.SetBrightness(1);
lightHat3.SetBrightness(1);
lightHat4.SetBrightness(1);
lightReindeers.SetBrightness(1);
//lightVader.SetColor(Color.Red, 1);
lightFlood1.SetColor(Color.Red, 1);
lightFlood2.SetColor(Color.Red, 1);
lightFlood3.SetColor(Color.Red, 1);
lightFlood4.SetColor(Color.Red, 1);
lightFlood5.SetColor(Color.Red, 1);
lightFlood6.SetColor(Color.Red, 1);
lightFlood7.SetColor(Color.Red, 1);
saberPixels.SetColor(Color.Red, 0.4, i.Token);
subRandomSantaVideo.Run();
subCandyCane.Run();
subHeart.Run();
dmxPlayback.Run();
i.WaitUntilCancel();
})
.TearDown(i =>
{
dmxPlayback.Stop();
Exec.Cancel(subHeart);
Exec.Cancel(subCandyCane);
Exec.Cancel(subRandomSantaVideo);
pulsatingEffectGeneral.Stop();
pulsatingPinSpot.Stop();
pulsatingEffectTree.Stop();
});
subCandyCane
.LockWhenRunning(pixelsRoofEdge)
.LockWhenRunning(pixelsGround)
.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);
pixelsGround.Inject((x % spacing) == 0 ? Color.Red : Color.White, 0.5, i.Token);
i.WaitFor(S(0.30), true);
}
}
});
subHeart
.LockWhenRunning(pixelsHeart)
.RunAction(i =>
{
var levels = new double[]
{
0.1,
0.2,
0.3,
0.4,
0.6,
0.8,
0.9,
1.0,
0.9,
0.8,
0.6,
0.4,
0.3,
0.2,
};
while (true)
{
for (int x = 0; x < levels.Length; x++)
{
double brightness = levels[x];
pixelsHeart.Inject(Color.Red, brightness, i.Token);
i.WaitFor(S(0.50), true);
}
}
});
subSnow
.RunAction(ins =>
{
pulsatingPinSpot.SetAdditionalData(lightPinSpot, Utils.AdditionalData(Color.White));
snowMachine.SetValue(true);
ins.WaitFor(S(15));
})
.TearDown(i =>
{
pulsatingPinSpot.SetAdditionalData(lightPinSpot, Utils.AdditionalData(Color.Red));
snowMachine.SetValue(false);
});
subStarWarsCane
.LockWhenRunning(
pixelsRoofEdge,
pixelsGround,
pixelsBetweenTrees,
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);
pixelsGround.Inject(Color.Yellow, 1.0, instance.Token);
pixelsBetweenTrees.Inject(Color.Yellow, 1.0, instance.Token);
pixelsMatrix.InjectRow(Color.Yellow, 1.0, instance.Token);
break;
case 2:
case 3:
pixelsRoofEdge.InjectRev(Color.Orange, 0.2, instance.Token);
pixelsGround.Inject(Color.Orange, 0.2, instance.Token);
pixelsBetweenTrees.Inject(Color.Orange, 0.2, instance.Token);
pixelsMatrix.InjectRow(Color.Orange, 0.2, instance.Token);
break;
}
instance.WaitFor(S(0.1));
if (instance.IsCancellationRequested)
break;
}
}
});
subMovingHead
.RunAction(ins =>
{
while (!ins.IsCancellationRequested)
{
ins.WaitFor(S(0.1));
}
});
subMusicChristmasCanon
.LockWhenRunning(lightSantaPopup, movingHead, lightXmasTree)
.RunAction(ins =>
{
lightSantaPopup.SetBrightness(1);
movingHead.SetColor(Color.Red, 1);
lightXmasTree.SetValue(true);
audioHiFi.PlayTrack("21. Christmas Canon Rock.wav");
ins.WaitFor(S(300));
}).TearDown(i =>
{
lorChristmasCanon.Stop();
audioHiFi.PauseTrack();
});
subMusicBelieve
.LockWhenRunning(lightSantaPopup, movingHead, lightXmasTree, hazerFanSpeed, hazerHazeOutput)
.RunAction(ins =>
{
lightSantaPopup.SetBrightness(1);
movingHead.SetColor(Color.Red, 1);
lightXmasTree.SetValue(true);
hazerFanSpeed.SetBrightness(0.3);
hazerHazeOutput.SetBrightness(0.1);
audioHiFi.PlayTrack("T.P.E. - 04 - Josh Groban - Believe.flac");
ins.WaitFor(S(260));
}).TearDown(i =>
{
lorBelieve.Stop();
audioHiFi.PauseTrack();
});
subMusicSarajevo
.LockWhenRunning(lightSantaPopup, movingHead, lightXmasTree)
.RunAction(ins =>
{
lightSantaPopup.SetBrightness(1);
movingHead.SetColor(Color.Red, 1);
lightXmasTree.SetValue(true);
audioHiFi.PlayTrack("04 Christmas Eve _ Sarajevo (Instrum.wav");
ins.WaitFor(S(200));
}).TearDown(i =>
{
lorSarajevo.Stop();
audioHiFi.PauseTrack();
});
subMusicHolyNight
.LockWhenRunning(lightSantaPopup, movingHead, lightXmasTree)
.RunAction(ins =>
{
lightSantaPopup.SetBrightness(1);
movingHead.SetColor(Color.Red, 1);
lightXmasTree.SetValue(true);
audioHiFi.PlayTrack("01 O Come All Ye Faithful _ O Holy N.wav");
ins.WaitFor(S(260));
}).TearDown(i =>
{
lorHolyNight.Stop();
audioHiFi.PauseTrack();
});
subMusicCarol
.LockWhenRunning(lightSantaPopup, movingHead, lightXmasTree)
.RunAction(ins =>
{
lightSantaPopup.SetBrightness(1);
movingHead.SetColor(Color.Red, 1);
lightXmasTree.SetValue(true);
audioHiFi.PlayTrack("09 Carol of the Bells (Instrumental).wav");
ins.WaitFor(S(160));
}).TearDown(i =>
{
lorCarol.Stop();
audioHiFi.PauseTrack();
});
subSantaVideo
.LockWhenRunning(laser, lightSantaPopup, movingHead, lightXmasTree)
.RunAction(i =>
{
laser.SetValue(false);
lightSantaPopup.SetBrightness(1);
movingHead.SetColor(Color.Red, 1);
lightXmasTree.SetValue(true);
switch (random.Next(3))
{
case 0:
// NBC_WeWishYou_Holl_H 1:22
expanderVideo1.SendSerial(0, new byte[] { 4 });
Task.Delay(5000).ContinueWith(t => lorJingleBells.Start(duration: S(68)));
i.WaitFor(S(80));
break;
case 1:
// NBC_DeckTheHalls_Holl_H 1:31
expanderVideo1.SendSerial(0, new byte[] { 5 });
Task.Delay(5000).ContinueWith(t => lorJingleBells.Start(duration: S(78)));
i.WaitFor(S(90));
break;
case 2:
// NBC_JingleBells_Holl_H 1:31
expanderVideo1.SendSerial(0, new byte[] { 6 });
Task.Delay(5000).ContinueWith(t => lorJingleBells.Start(duration: S(83)));
i.WaitFor(S(90));
break;
}
})
.TearDown(i =>
{
laser.SetValue(true);
lorJingleBells.Stop();
expanderVideo1.SendSerial(0, new byte[] { 100 });
});
subRandomSantaVideo
.RunAction(i =>
{
while (!i.IsCancellationRequested)
{
switch (random.Next(4))
{
case 0:
// Nothing
i.WaitFor(S(60));
break;
case 1:
expanderVideo1.SendSerial(0, new byte[] { 1 });
i.WaitFor(S(70));
break;
case 2:
expanderVideo1.SendSerial(0, new byte[] { 2 });
i.WaitFor(S(100));
break;
case 3:
expanderVideo1.SendSerial(0, new byte[] { 3 });
i.WaitFor(S(60));
break;
}
}
}).TearDown(i =>
{
expanderVideo1.SendSerial(0, new byte[] { 100 });
});
subPoppy
.RunAction(i =>
{
pulsatingEffectPoppy.Start(100);
audioVideo1.PlayNewEffect("Trolls Sounds of Silence.wav");
i.WaitFor(S(46));
pulsatingEffectPoppy.Stop();
});
subOlaf
.RunAction(i =>
{
pulsatingEffectOlaf.Start(100);
audioLedmx.PlayNewEffect("WarmHugs.wav", 0.0, 1.0);
i.WaitFor(S(10));
pulsatingEffectOlaf.Stop();
});
subR2D2
.RunAction(i =>
{
pulsatingEffectR2D2.Start(100);
audioLedmx.PlayNewEffect("Im C3PO.wav", 1.0, 0.0);
i.WaitFor(S(4));
audioLedmx.PlayNewEffect("Processing R2D2.wav", 0.5, 0.0);
i.WaitFor(S(5));
pulsatingEffectR2D2.Stop();
});
subStarWars
.LockWhenRunning(
saberPixels,
haloPixels,
lightVader,
lightR2D2,
lightHangingStar,
laser)
.RunAction(instance =>
{
laser.SetValue(false);
//Exec.Cancel(subCandyCane);
subStarWarsCane.Run();
lightR2D2.SetBrightness(1.0, instance.Token);
audioHiFi.PlayTrack("01. Star Wars - Main Title.wav");
instance.WaitFor(S(16));
var haloJob = haloPixels.Chaser(new IData[] {
Utils.Data(Color.White, 1.0),
Utils.Data(Color.White, 0.7),
Utils.Data(Color.White, 0.5),
Utils.Data(Color.White, 0.3)
}, 4, token: instance.Token);
pulsatingStar.Start();
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 = 0; sab < 33; sab++)
{
saberPixels.Inject(Color.Red, 0.5, instance.Token);
instance.WaitFor(S(0.01));
}
instance.WaitFor(S(1));
audioHiFi.PauseTrack();
lightVader.SetColor(Color.Red, 1.0, instance.Token);
audioDarthVader.PlayEffect("father.wav");
instance.WaitFor(S(5));
audioDarthVader.PlayEffect("force1.wav");
instance.WaitFor(S(4));
lightVader.SetBrightness(0.0, instance.Token);
audioDarthVader.PlayEffect("saberoff.wav");
instance.WaitFor(S(0.7));
for (int sab = 0; sab < 17; sab++)
{
saberPixels.InjectRev(Color.Black, 0, instance.Token);
saberPixels.InjectRev(Color.Black, 0, instance.Token);
instance.WaitFor(S(0.01));
}
Exec.StopManagedTask(haloJob);
pulsatingStar.Stop();
instance.WaitFor(S(2));
})
.TearDown(i =>
{
laser.SetValue(true);
audioHiFi.PauseTrack();
});
inOlaf.Output.Subscribe(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState == States.Background)
subOlaf.Run();
});
inR2D2.Output.Subscribe(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState == States.Background)
subR2D2.Run();
});
inPoppy.Output.Subscribe(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState == States.Background)
subPoppy.Run();
});
controlButtonWhite.WhenOutputChanges(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState != States.DarthVader)
subSnow.Run();
});
controlButtonYellow.WhenOutputChanges(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState == States.Background)
stateMachine.GoToState(States.DarthVader);
});
controlButtonBlue.WhenOutputChanges(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState == States.Background)
stateMachine.GoToState(States.MusicBelieve);
});
controlButtonGreen.WhenOutputChanges(x =>
{
if (x && hours.IsOpen && stateMachine.CurrentState == States.Background)
stateMachine.GoToState(States.MusicHolyNight);
});
controlButtonBlack.WhenOutputChanges(x =>
{
if (x)
{
if (hours.IsOpen)
{
if (stateMachine.CurrentState == States.Background)
stateMachine.GoToState(States.MusicSarajevo);
}
else
{
audioDarthVader.PlayEffect("force1.wav");
}
}
});
controlButtonRed.WhenOutputChanges(x =>
{
if (x)
{
if (hours.IsOpen)
{
if (stateMachine.CurrentState == States.Background)
stateMachine.GoToState(States.SantaVideo);
}
else
{
audioDarthVader.PlayEffect("darthvader_powerofthedarkside.wav");
}
}
});
controlButtonRed.IsHeld.Subscribe(x =>
{
if (x)
this.stateMachine.GoToDefaultState();
});
audioHiFi.AudioTrackStart += (o, e) =>
{
switch (e.FileName)
{
case "21. Christmas Canon Rock.wav":
lorChristmasCanon.Start();
break;
case "T.P.E. - 04 - Josh Groban - Believe.flac":
lorBelieve.Start();
break;
case "04 Christmas Eve _ Sarajevo (Instrum.wav":
lorSarajevo.Start();
break;
case "01 O Come All Ye Faithful _ O Holy N.wav":
lorHolyNight.Start();
break;
case "09 Carol of the Bells (Instrumental).wav":
lorCarol.Start();
break;
}
};
inShowMachine.Output.Subscribe(x =>
{
snowMachine.SetValue(x);
});
ImportAndMapChristmasCanon();
ImportAndMapBelieve();
ImportAndMapJingleBells();
ImportAndMapSarajevo();
ImportAndMapHolyNight();
ImportAndMapCarol();
ConfigureMIDI();
ConfigureOSC();
}