public override void Start()
{
pulsatingEffect1.AddDevice(lightHatsRight);
pulsatingEffect2
.AddDevice(lightCeiling1)
.AddDevice(lightCeiling2)
.AddDevice(lightCeiling3);
candyCane
.WhenExecuted
.SetUp(() => allPixels.TurnOff())
.Execute(instance =>
{
const int spacing = 4;
while (true)
{
for (int i = 0; i < spacing; i++)
{
allPixels.Inject((i % spacing) == 0 ? Color.Red : Color.White, 1.0);
instance.WaitFor(S(0.2), true);
}
}
})
.TearDown(() => allPixels.TurnOff());
starwarsCane
.WhenExecuted
.Execute(instance =>
{
const int spacing = 4;
allPixels.TurnOff();
while (!instance.CancelToken.IsCancellationRequested)
{
for (int i = 0; i < spacing; i++)
{
switch (i % spacing)
{
case 0:
case 1:
allPixels.InjectRev(Color.Yellow, 1.0);
break;
case 2:
case 3:
allPixels.InjectRev(Color.Orange, 0.2);
break;
}
instance.WaitFor(S(0.1));
if (instance.IsCancellationRequested)
{
break;
}
}
}
allPixels.TurnOff();
});
backgroundLoop
.WhenExecuted
.SetUp(() =>
{
pulsatingEffect1.Start();
lightGarlandLeft.Brightness = 1;
lightGarlandRight.Brightness = 1;
lightIcicles.Brightness = 1;
lightTreesRight.Brightness = 1;
lightHatsRight.Brightness = 1;
lightNetLeft.Brightness = 0.5;
lightNetRight.Brightness = 0.5;
lightReindeers.Brightness = 1;
lightTree.Brightness = 1;
lightCeiling1.SetColor(Color.Red, 0.5);
lightCeiling2.SetColor(Color.Red, 0.5);
lightCeiling3.SetColor(Color.Red, 0.5);
Executor.Current.Execute(candyCane);
})
.TearDown(() =>
{
Executor.Current.Cancel(candyCane);
EverythingOff();
});
musicSeq
.Loop
.WhenExecuted
.SetUp(() =>
{
audioPlayer.CueTrack("21 Christmas Canon Rock");
// Make sure it's ready
System.Threading.Thread.Sleep(800);
EverythingOff();
})
.Execute(instance =>
{
audioPlayer.PlayTrack();
var task = timeline.Start();
try
{
task.Wait(instance.CancelToken);
instance.WaitFor(S(10));
}
finally
{
timeline.Stop();
audioPlayer.PauseTrack();
}
if (!instance.IsCancellationRequested)
{
instance.WaitFor(S(2));
}
EverythingOff();
instance.WaitFor(S(2), true);
Executor.Current.Execute(backgroundLoop);
instance.WaitFor(S(30));
Executor.Current.Cancel(backgroundLoop);
EverythingOff();
instance.WaitFor(S(1));
})
.TearDown(() =>
{
EverythingOff();
});
buttonSeq
.Loop
.WhenExecuted
.Execute(instance =>
{
buttonLightBlue.SetPower(true);
buttonLightRed.SetPower(false);
instance.WaitFor(S(0.2));
buttonLightBlue.SetPower(false);
buttonLightRed.SetPower(true);
instance.WaitFor(S(0.2));
})
.TearDown(() =>
{
buttonLightBlue.SetPower(false);
buttonLightRed.SetPower(false);
});
fatherSeq
.WhenExecuted
.Execute(instance =>
{
Executor.Current.Execute(starwarsCane);
EverythingOff();
audioPlayer.CueTrack("01 Star Wars_ Main Title");
// Make sure it's ready
instance.WaitFor(S(0.5));
audioPlayer.PlayTrack();
lightCeiling1.SetOnlyColor(Color.Yellow);
lightCeiling2.SetOnlyColor(Color.Yellow);
lightCeiling3.SetOnlyColor(Color.Yellow);
pulsatingEffect2.Start();
instance.WaitFor(S(16));
pulsatingEffect2.Stop();
audioPlayer.PauseTrack();
Executor.Current.Cancel(starwarsCane);
allPixels.TurnOff();
instance.WaitFor(S(0.5));
elJesus.SetPower(true);
lightJesus.SetColor(Color.White, 0.3);
instance.WaitFor(S(1.5));
elLightsaber.SetPower(true);
audioPlayer.PlayEffect("saberon");
instance.WaitFor(S(1));
lightVader.SetColor(Color.Red, 1.0);
audioPlayer.PlayEffect("father");
instance.WaitFor(S(3));
lightVader.TurnOff();
audioPlayer.PlayEffect("saberoff");
instance.WaitFor(S(0.5));
elLightsaber.SetPower(false);
instance.WaitFor(S(1));
lightJesus.TurnOff();
elLightsaber.TurnOff();
elJesus.TurnOff();
});
breathSeq
.WhenExecuted
.Execute(instance =>
{
audioPlayer.PlayEffect("Darth Breathing");
instance.WaitFor(S(4));
});
laserSeq
.WhenExecuted
.SetUp(() =>
{
allPixels.TurnOff();
})
.Execute(instance =>
{
audioPlayer.PlayEffect("lazer");
var cb = new ColorBrightness[6];
cb[0] = new ColorBrightness(Color.Black, 1.0);
cb[1] = new ColorBrightness(Color.Red, 1.0);
cb[2] = new ColorBrightness(Color.Orange, 1.0);
cb[3] = new ColorBrightness(Color.Yellow, 1.0);
cb[4] = new ColorBrightness(Color.Blue, 1.0);
cb[5] = new ColorBrightness(Color.White, 1.0);
for (int i = -6; i < allPixels.Pixels; i++)
{
allPixels.SetColors(i, cb);
System.Threading.Thread.Sleep(25);
}
instance.WaitFor(S(1));
})
.TearDown(() =>
{
allPixels.TurnOff();
});
stateMachine.ForFromSequence(States.Background, backgroundLoop);
stateMachine.ForFromSequence(States.Music, musicSeq);
stateMachine.ForFromSequence(States.Vader, fatherSeq);
// Start Reindeer
buttonStartReindeer.ActiveChanged += (sender, e) =>
{
if (!e.NewState)
{
return;
}
if (hours.IsOpen)
{
bigReindeer.SetPower(true);
}
else
{
TestAllPixels(Color.Red, 1.0, S(1));
TestAllPixels(Color.Red, 0.5, S(1));
TestAllPixels(Color.Green, 1.0, S(1));
TestAllPixels(Color.Green, 0.5, S(1));
TestAllPixels(Color.Blue, 1.0, S(1));
TestAllPixels(Color.Blue, 0.5, S(1));
TestAllPixels(Color.Purple, 1.0, S(1));
TestAllPixels(Color.Purple, 0.5, S(1));
TestAllPixels(Color.White, 1.0, S(1));
TestAllPixels(Color.White, 0.5, S(1));
allPixels.TurnOff();
}
};
// Red Button
buttonRed.ActiveChanged += (sender, e) =>
{
if (!e.NewState)
{
return;
}
if (hours.IsOpen)
{
stateMachine.SetMomentaryState(States.Vader);
}
else
{
Executor.Current.Execute(laserSeq);
}
};
// Blue Button
buttonBlue.ActiveChanged += (sender, e) =>
{
if (!e.NewState)
{
return;
}
if (hours.IsOpen)
{
if (stateMachine.CurrentState == States.Background)
{
stateMachine.SetMomentaryState(States.Music);
}
}
else
{
Executor.Current.Execute(breathSeq);
}
};
// Hours
hours.OpenHoursChanged += (sender, e) =>
{
if (e.IsOpenNow)
{
stateMachine.SetState(States.Background);
Executor.Current.Execute(buttonSeq);
}
else
{
Executor.Current.Cancel(buttonSeq);
stateMachine.Hold();
bigReindeer.SetPower(false);
}
};
}