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();
}