public override void Start() { buttonTest1.ActiveChanged += (sender, e) => { if (e.NewState) { testLight1.RunEffect(new Effect2.Fader(0.0, 1.0), S(1.0)); } else { if (testLight1.Brightness > 0) { testLight1.RunEffect(new Effect2.Fader(1.0, 0.0), S(1.0)); } } }; }
public override void Start() { hours.AddRange("5:00 pm", "11:00 pm"); bool.TryParse(Exec.GetKey("InflatablesRunning", false.ToString()), out inflatablesRunning); buttonOverrideHours.ActiveChanged += (i, e) => { if (e.NewState) { hours.SetForced(true); } else { hours.SetForced(null); } }; 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, 0.5); instance.WaitFor(S(0.2), true); } } }) .TearDown(() => { allPixels.TurnOff(); }); twinkleSeq .WhenExecuted .SetUp(() => allPixels.TurnOff()) .Execute(instance => { var rnd = new Random(); while (!instance.IsCancellationRequested) { allPixels.SetAll(Color.White, 0.5); instance.WaitFor(S(1.0), true); int pixel1 = rnd.Next(allPixels.Pixels); int pixel2 = rnd.Next(allPixels.Pixels); var task1 = allPixels.FadeToAsync(instance, pixel1, Color.Red, 1.0, S(2.0)); var task2 = allPixels.FadeToAsync(instance, pixel2, Color.Red, 1.0, S(2.0)); Task.WaitAll(task1, task2); instance.WaitFor(S(1.0), true); task1 = allPixels.FadeToAsync(instance, pixel1, Color.White, 0.5, S(1.0)); task2 = allPixels.FadeToAsync(instance, pixel2, Color.White, 0.5, S(1.0)); Task.WaitAll(task1, task2); } }) .TearDown(() => allPixels.TurnOff()); backgroundLoop .WhenExecuted .SetUp(() => { pulsatingEffect1.Start(); flickerEffect.Start(); switchButtonBlue.SetPower(true); switchButtonRed.SetPower(true); lightTreeUp.SetOnlyColor(Color.Red); faderIn.Restart(); Executor.Current.Execute(twinkleSeq); }) .TearDown(() => { Executor.Current.Cancel(twinkleSeq); switchButtonBlue.SetPower(false); switchButtonRed.SetPower(false); EverythingOff(); }); offHours1Seq .WhenExecuted .Execute(instance => { audioPlayer.PlayEffect("force1"); instance.WaitFor(S(4)); }); offHours2Seq .WhenExecuted .Execute(instance => { audioPlayer.PlayEffect("darkside"); instance.WaitFor(S(4)); }); music1Seq .WhenExecuted .SetUp(() => { audioPlayer.CueTrack("21. Christmas Canon Rock"); // Make sure it's ready System.Threading.Thread.Sleep(800); EverythingOff(); }) .Execute(instance => { audioPlayer.ResumeTrack(); var task = timeline1.Start(); try { task.Wait(instance.CancelToken); instance.WaitFor(S(10)); } finally { timeline1.Stop(); audioPlayer.PauseTrack(); } if (!instance.IsCancellationRequested) { instance.WaitFor(S(2)); } EverythingOff(); instance.WaitFor(S(2)); }) .TearDown(() => { EverythingOff(); }); starwarsCane .WhenExecuted .SetUp(() => { allPixels.TurnOff(); starwarsPixels.TurnOff(); }) .Execute(instance => { const int spacing = 4; while (!instance.CancelToken.IsCancellationRequested) { for (int i = 0; i < spacing; i++) { switch (i % spacing) { case 0: case 1: starwarsPixels.InjectRev(Color.Yellow, 1.0); break; case 2: case 3: starwarsPixels.InjectRev(Color.Orange, 0.2); break; } instance.WaitFor(S(0.1)); if (instance.IsCancellationRequested) { break; } } } }) .TearDown(() => starwarsPixels.TurnOff()); fatherSeq .WhenExecuted .Execute(instance => { EverythingOff(); Executor.Current.Execute(starwarsCane); audioPlayer.PlayTrack("01. Star Wars - Main Title"); //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); pulsatingStar.Start(); lightJesus.SetColor(Color.White, 0.3); light3wise.SetOnlyColor(Color.LightYellow); light3wise.RunEffect(new Effect2.Fader(0.0, 1.0), S(1.0)); lightVader.SetOnlyColor(Color.LightYellow); lightVader.RunEffect(new Effect2.Fader(0.0, 1.0), S(1.0)); instance.WaitFor(S(2.5)); //elLightsaber.SetPower(true); audioPlayer.PlayEffect("saberon"); for (int sab = 0; sab < 60; sab++) { saberPixels.Inject(Color.Red, 0.5); instance.WaitFor(S(0.01)); } // lightVader.SetColor(Color.Red, 1.0); audioPlayer.PlayEffect("father"); instance.WaitFor(S(4)); lightVader.TurnOff(); light3wise.TurnOff(); lightJesus.TurnOff(); pulsatingStar.Stop(); elJesus.TurnOff(); audioPlayer.PlayEffect("force1"); instance.WaitFor(S(4)); lightVader.TurnOff(); audioPlayer.PlayEffect("saberoff"); instance.WaitFor(S(0.7)); for (int sab = 0; sab < 30; sab++) { saberPixels.InjectRev(Color.Black, 0); saberPixels.InjectRev(Color.Black, 0); 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(() => { EverythingOff(); }); waveformSeq .WhenExecuted .SetUp(() => { audioPlayer.CueTrack("05. Frozen - Let It Go"); // Make sure it's ready System.Threading.Thread.Sleep(800); EverythingOff(); }) .Execute(i => { var timer = new Controller.HighPrecisionTimer(50, false); byte[] buffer; using (var fs = System.IO.File.OpenRead("Let It Go - Waveform 50ms.dat")) { buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); fs.Close(); } var cb = new ColorBrightness[allPixels.Pixels]; for (int cb_pos = 0; cb_pos < cb.Length; cb_pos++) { cb[cb_pos] = new ColorBrightness(Color.Turquoise, 0.0); } double lastValue = 0; timer.Tick += (o, e) => { int pos = (int)e.TotalTicks; if (pos >= buffer.Length) { e.Cancel = true; return; } double curValue = buffer[pos].GetDouble(); if (curValue > lastValue) { lastValue = curValue; } double value = lastValue; lastValue = (lastValue - 0.02).Limit(0.0, 1.0); const double d1 = 0.00; const double d2 = 0.15; const double d3 = 0.20; const double d4 = 0.25; lightHat1.Brightness = value.LimitAndScale(d1, 0.2); lightHat2.Brightness = value.LimitAndScale(d1, 0.2); lightHat3.Brightness = value.LimitAndScale(d2, 0.2); lightHat4.Brightness = value.LimitAndScale(d2, 0.2); lightTreeUp.Brightness = value.LimitAndScale(d3, 0.2); lightGarland1.Brightness = value.LimitAndScale(d3, 0.2); lightGarland2.Brightness = value.LimitAndScale(d3, 0.2); lightGarland3.Brightness = value.LimitAndScale(d3, 0.2); lightGarland4.Brightness = value.LimitAndScale(d3, 0.2); lightNet1.Brightness = value.LimitAndScale(d2, 0.2); lightNet2.Brightness = value.LimitAndScale(d2, 0.2); lightSnow1.Brightness = value.LimitAndScale(d3, 0.2); lightSnow2.Brightness = value.LimitAndScale(d3, 0.2); lightStairs1.Brightness = value.LimitAndScale(d1, 0.2); lightStairs2.Brightness = value.LimitAndScale(d1, 0.2); lightDeerSmall.Brightness = curValue; lightTopperLarge.Brightness = curValue; lightDeerLarge.Brightness = curValue; lightTopperSmall.Brightness = curValue; lightString1.Brightness = value.LimitAndScale(d4, 0.2); lightString2.Brightness = value.LimitAndScale(d4, 0.2); lightXmasTree.Brightness = value.LimitAndScale(d4, 0.2); lightStar.Brightness = value.LimitAndScale(d4, 0.2); int vuPos = (int)(cb.Length * value); for (int cb_pos = 0; cb_pos < cb.Length; cb_pos++) { cb[cb_pos].Brightness = cb_pos < vuPos ? 1.0 : 0.2; } allPixels.SetColors(0, cb); }; timer.Start(); audioPlayer.ResumeTrack(); timer.WaitUntilFinished(i); }) .TearDown(() => { EverythingOff(); }); buttonStartInflatables.ActiveChanged += (o, e) => { if (e.NewState && hours.IsOpen) { InflatablesRunning = true; switchDeerHuge.SetPower(true); switchSanta.SetPower(true); } }; this.oscServer.RegisterAction <int>("/osc/button1", (msg, data) => { if (data.Any() && data.First() == 1) { stateMachine.SetState(States.Vader); } }); this.oscServer.RegisterAction <int>("/osc/button2", (msg, data) => { if (data.Any() && data.First() == 1) { stateMachine.SetState(States.Music1); } }); this.oscServer.RegisterAction <int>("/osc/button3", (msg, data) => { if (data.Any() && data.First() == 1) { stateMachine.SetState(States.Music2); } }); this.oscServer.RegisterAction <int>("/osc/button4", (msg, data) => { if (data.Any() && data.First() == 1) { stateMachine.SetState(States.Background); } }); this.oscServer.RegisterAction <int>("/osc/button5", (msg, data) => { if (data.Any() && data.First() == 1) { audioPlayer.PlayEffect("darkside"); } }); this.oscServer.RegisterAction <int>("/osc/button6", (msg, data) => { if (data.Any() && data.First() == 1) { audioPlayer.PlayEffect("Darth Breathing"); } }); // Test Button buttonTest.ActiveChanged += (sender, e) => { // lightGarland4.Brightness = e.NewState ? 1.0 : 0.0; if (e.NewState) { Exec.Execute(waveformSeq); } else { Exec.Cancel(waveformSeq); } if (!e.NewState) { return; } //Exec.Cancel(candyCane); //allPixels.RunEffect(new Effect2.Fader(1.0, 0.0), S(2.0)).Wait(); //allPixels.SetAllOnlyColor(Color.Purple); //allPixels.RunEffect(new Effect2.Fader(0.0, 1.0), S(2.0)).Wait(); //allPixels.RunEffect(new Effect2.Fader(1.0, 0.0), S(2.0)).Wait(); //allPixels.SetAllOnlyColor(Color.Orange); //allPixels.RunEffect(new Effect2.Fader(0.0, 1.0), S(2.0)).Wait(); //allPixels.RunEffect(new Effect2.Fader(1.0, 0.0), S(2.0)).Wait(); //Exec.Execute(candyCane); }; buttonBlue.ActiveChanged += (o, e) => { if (!e.NewState) { return; } if (mute.HasValue && (DateTime.Now - mute.Value).TotalSeconds < 30) { return; } if (hours.IsOpen) { if (stateMachine.CurrentState == States.Music1 || stateMachine.CurrentState == States.Music2) { // Stop //stateMachine.SetState(States.Background); return; } switch (this.whichMusic++ % 2) { case 0: stateMachine.SetState(States.Music1); break; case 1: stateMachine.SetState(States.Music2); break; } } else { Exec.Execute(offHours1Seq); } mute = DateTime.Now; }; buttonRed.ActiveChanged += (o, e) => { if (!e.NewState) { return; } if (mute.HasValue && (DateTime.Now - mute.Value).TotalSeconds < 30) { return; } if (hours.IsOpen) { if (stateMachine.CurrentState == States.Vader) { return; } //stateMachine.SetState(States.Background); else { stateMachine.SetState(States.Vader); } } else { Exec.Execute(offHours2Seq); } mute = DateTime.Now; }; audioPlayer.AudioTrackDone += (o, e) => { // switchButtonBlue.SetPower(false); }; pulsatingEffect1 .AddDevice(lightStar); pulsatingStar .AddDevice(lightStar); flickerEffect .AddDevice(lightHat1) .AddDevice(lightHat2) .AddDevice(lightHat3) .AddDevice(lightHat4); hours.OpenHoursChanged += (i, e) => { if (e.IsOpenNow) { stateMachine.SetBackgroundState(States.Background); stateMachine.SetState(States.Background); //lightTreeUp.SetColor(Color.Red, 1.0); //lightSnow1.SetBrightness(1.0); //lightSnow2.SetBrightness(1.0); if (InflatablesRunning) { switchDeerHuge.SetPower(true); switchSanta.SetPower(true); } } else { if (buttonOverrideHours.Active) { return; } stateMachine.Hold(); stateMachine.SetBackgroundState(null); EverythingOff(); System.Threading.Thread.Sleep(200); switchDeerHuge.TurnOff(); switchSanta.TurnOff(); InflatablesRunning = false; } }; faderIn .AddDevice(lightGarland1) .AddDevice(lightGarland2) .AddDevice(lightGarland3) .AddDevice(lightGarland4) .AddDevice(lightStairs1) .AddDevice(lightStairs2) .AddDevice(lightXmasTree) .AddDevice(lightDeerSmall) .AddDevice(lightDeerLarge) .AddDevice(lightTopperLarge) .AddDevice(lightTopperSmall) .AddDevice(lightNet1) .AddDevice(lightNet2) .AddDevice(lightString1) .AddDevice(lightString2) .AddDevice(lightSnow1) .AddDevice(lightSnow2) .AddDevice(lightTreeUp); stateMachine.ForFromSequence(States.Background, backgroundLoop); stateMachine.ForFromSequence(States.Music1, music1Seq); stateMachine.ForFromSequence(States.Music2, waveformSeq); stateMachine.ForFromSequence(States.Vader, fatherSeq); hatLightState.For(0).Execute(i => lightHat1.RunEffect(new Effect2.Fader(1.0, 0.0), S(0.5))); hatLightState.For(1).Execute(i => lightHat2.RunEffect(new Effect2.Fader(1.0, 0.0), S(0.5))); hatLightState.For(2).Execute(i => lightHat3.RunEffect(new Effect2.Fader(1.0, 0.0), S(0.5))); hatLightState.For(3).Execute(i => lightHat4.RunEffect(new Effect2.Fader(1.0, 0.0), S(0.5))); hatLightState.For(4).Execute(i => lightHat3.RunEffect(new Effect2.Fader(1.0, 0.0), S(0.5))); hatLightState.For(5).Execute(i => lightHat2.RunEffect(new Effect2.Fader(1.0, 0.0), S(0.5))); //lightGarland1.Follow(hours); //lightGarland2.Follow(hours); //lightGarland3.Follow(hours); //lightGarland4.Follow(hours); //lightGarland5.Follow(hours); //lightXmasTree.Follow(hours); //lightStairs1.Follow(hours); //lightDeerSmall.Follow(hours); //lightDeerLarge.Follow(hours); //lightTopperLarge.Follow(hours); //lightTopperSmall.Follow(hours); //lightNet1.Follow(hours); //lightNet2.Follow(hours); //lightString1.Follow(hours); //lightString2.Follow(hours); //light3wise.Follow(hours); //lightVader.Follow(hours); //switchButtonBlue.Follow(hours); //switchButtonRed.Follow(hours); ConfigureMusic1(); }