public XmasScene2(IEnumerable<string> args, System.Collections.Specialized.NameValueCollection settings)
{
hours = new OperatingHours("Hours");
if (!args.Contains("TEST"))
{
hours.AddRange("5:00 pm", "10:00 pm");
hours.AddRange("5:00 am", "7:00 am");
}
lightNetRight = new Dimmer("Net Right");
lightGarlandRight = new Dimmer("Garland Right");
lightHatsRight = new Dimmer("Hats Right");
lightTreesRight = new Dimmer("Trees Right");
lightReindeers = new Dimmer("Reindeers");
lightIcicles = new Dimmer("Icicles");
lightNetLeft = new Dimmer("Net Left");
lightTree = new Dimmer("Tree");
lightGarlandLeft = new Dimmer("Garland Left");
lightUnused1 = new Dimmer("Unused 1");
lightUnused2 = new Dimmer("Unused 2");
lightJesus = new StrobeColorDimmer("Jesus");
lightCeiling1 = new StrobeColorDimmer("Ceiling 1");
lightCeiling2 = new StrobeColorDimmer("Ceiling 2");
lightCeiling3 = new StrobeColorDimmer("Ceiling 3");
lightVader = new StrobeColorDimmer("Vader");
buttonLightRed = new Switch("Button Red");
buttonLightBlue = new Switch("Button Blue");
elLightsaber = new Switch("Lightsaber");
elJesus = new Switch("Jesus Halo");
bigReindeer = new Switch("Big Reindeer");
buttonBlue = new DigitalInput("Button Blue");
buttonRed = new DigitalInput("Button Red");
buttonStartReindeer = new DigitalInput("Start Reindeer");
timeline = new Controller.Timeline<string>(1);
stateMachine = new Controller.EnumStateMachine<States>("Main");
candyCane = new Controller.Sequence("Candy Cane");
starwarsCane = new Controller.Sequence("Starwars Cane");
backgroundLoop = new Controller.Sequence("Background");
musicSeq = new Controller.Sequence("Christmas Canon");
buttonSeq = new Controller.Sequence("Buttons");
fatherSeq = new Controller.Sequence("Father");
breathSeq = new Controller.Sequence("Breath");
laserSeq = new Controller.Sequence("Laser");
allPixels = new VirtualPixel1D(100);
pulsatingEffect1 = new Effect.Pulsating(S(2), 0.3, 1.0, false);
pulsatingEffect2 = new Effect.Pulsating(S(2), 0.3, 1.0, false);
popOutPiano = new Effect.PopOut(S(0.4));
popOutDrums = new Effect.PopOut(S(0.4));
popOutDrumsFast = new Effect.PopOut(S(0.3));
popOutChord = new Effect.PopOut(S(0.4));
popOutSolo = new Effect.PopOut(S(0.3));
popOutSolo2 = new Effect.PopOut(S(0.2));
popOutChoir = new Effect.PopOut(S(1.0));
popOutVoice = new Effect.PopOut(S(1.0));
popOutVocal2 = new Effect.PopOut(S(2.0));
popOutVocalLong = new Effect.PopOut(S(5.0));
popOutEnd = new Effect.PopOut(S(5.0));
popOutPiano
.AddDevice(lightIcicles);
popOutDrums
.AddDevice(lightReindeers)
.AddDevice(lightHatsRight);
popOutDrumsFast
.AddDevice(lightCeiling1)
.AddDevice(allPixels);
popOutChord
.AddDevice(lightTree)
.AddDevice(lightCeiling2)
.AddDevice(lightCeiling3);
popOutSolo
.AddDevice(lightNetLeft)
.AddDevice(lightNetRight)
.AddDevice(lightCeiling1)
.AddDevice(lightCeiling3)
.SetPriority(2);
popOutSolo2
.AddDevice(lightCeiling1)
.AddDevice(lightCeiling3)
.SetPriority(2);
popOutChoir
.AddDevice(lightGarlandRight)
.AddDevice(lightTreesRight)
.AddDevice(lightCeiling1);
popOutVoice
.AddDevice(lightGarlandLeft)
.AddDevice(lightCeiling3);
popOutVocal2
.AddDevice(lightReindeers)
.AddDevice(allPixels)
.SetPriority(10);
popOutVocalLong
.AddDevice(lightNetRight)
.AddDevice(lightGarlandRight)
.AddDevice(lightHatsRight)
.SetPriority(10);
popOutEnd
.AddDevice(lightIcicles)
.AddDevice(lightReindeers)
.AddDevice(lightHatsRight)
.AddDevice(lightCeiling1)
.AddDevice(lightCeiling2)
.AddDevice(lightCeiling3)
.AddDevice(lightGarlandRight)
.AddDevice(lightGarlandLeft)
.AddDevice(lightTreesRight)
.AddDevice(lightNetRight)
.AddDevice(lightNetLeft)
.AddDevice(allPixels)
.SetPriority(100);
timeline.AddMs(0, "INIT");
timeline.PopulateFromCSV("Christmas Canon Rock All Labels.csv");
int state = 0;
int halfSolo = 0;
timeline.TimelineTrigger += (sender, e) =>
{
switch (e.Step)
{
case 62:
// First drum
state = 1;
allPixels.TurnOff();
break;
case 69:
state = 2;
lightCeiling2.SetOnlyColor(Color.Green);
lightCeiling3.SetOnlyColor(Color.Blue);
break;
case 136:
// First solo
state = 3;
allPixels.TurnOff();
lightCeiling2.SetOnlyColor(Color.White);
lightCeiling3.SetOnlyColor(Color.Red);
break;
case 265:
// First choir
allPixels.TurnOff();
state = 4;
break;
case 396:
// Vocal 2
state = 5;
allPixels.SetAllOnlyColor(Color.Blue);
break;
case 497:
// Second solo
state = 6;
allPixels.TurnOff();
lightCeiling2.SetOnlyColor(Color.White);
lightCeiling3.SetOnlyColor(Color.Red);
break;
case 561:
// End second solo
state = 7;
allPixels.TurnOff();
break;
case 585:
// End third solo
state = 8;
allPixels.TurnOff();
break;
case 721:
// End third solo
state = 9;
allPixels.TurnOff();
break;
}
switch (e.Code)
{
case "INIT":
state = 0;
halfSolo = 0;
lightCeiling1.SetColor(Color.White, 0);
lightCeiling2.SetColor(Color.Blue, 0);
lightCeiling3.SetColor(Color.Red, 0);
break;
case "N1":
popOutPiano.Pop(0.4);
if (state == 0)
allPixels.Inject(Color.Red, 0.5);
break;
case "N2":
popOutPiano.Pop(0.6);
if (state == 0)
allPixels.Inject(Color.White, 0.5);
break;
case "N3":
popOutPiano.Pop(0.8);
if (state == 0)
allPixels.Inject(Color.Blue, 0.5);
break;
case "N4":
popOutPiano.Pop(1.0);
if (state == 0)
allPixels.Inject(Color.Black, 0.0);
break;
case "Base":
popOutDrums.Pop(1.0);
if (state < 3)
{
allPixels.SetAllOnlyColor(Color.Purple);
popOutDrumsFast.Pop(1.0);
}
break;
case "Cymbal":
popOutDrums.Pop(1.0);
if (state < 3)
{
allPixels.SetAllOnlyColor(Color.Green);
popOutDrumsFast.Pop(1.0);
}
break;
case "Chord":
popOutChord.Pop(1.0);
break;
case "Solo":
popOutSolo.Pop(1.0);
if ((halfSolo++ % 2) == 0)
popOutSolo2.Pop(0.8);
if (state == 3 || state == 6 || state == 8)
{
Color pixCol = Color.Black;
switch (e.Step % 4)
{
case 0:
pixCol = Color.Red;
break;
case 1:
pixCol = Color.Yellow;
break;
case 2:
pixCol = Color.Blue;
break;
case 3:
pixCol = Color.Pink;
break;
}
allPixels.Inject(pixCol, 1.0);
}
break;
case "Choir":
popOutChoir.Pop(1.0);
break;
case "Voice":
popOutVoice.Pop(1.0);
break;
case "Vocal2":
popOutVocal2.Pop(1.0);
break;
case "Long":
popOutVocalLong.Pop(1.0);
break;
case "LongUp":
// TODO
break;
case "Down":
// TODO
break;
case "End":
EverythingOff();
popOutEnd.Pop(1.0);
break;
default:
log.Info("Unhandled code: " + e.Code);
break;
}
};
audioPlayer = new Physical.NetworkAudioPlayer(
settings["NetworkAudioPlayerIP"],
int.Parse(settings["NetworkAudioPlayerPort"]));
}