commit 65

This commit is contained in:
Moritz Ruth 2025-03-09 18:55:27 +01:00
parent 5331c895e0
commit 961cf720fb
Signed by: moritzruth
GPG key ID: C9BBAB79405EE56D
8 changed files with 64 additions and 53 deletions

View file

@ -53,7 +53,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
} }
scene("Ankunft in Huntington") { scene("Ankunft in Huntington") {
step(StepCue.Text("Mina", "Das ist also Huntington!")) { lightStep(StepCue.Text("Mina", "Das ist also Huntington!")) {
sidelight.brightness.fade(75.percent, 15.seconds) sidelight.brightness.fade(75.percent, 15.seconds)
sidelight.color1.fadeRandomAround(130.degrees, 5.degrees, 10.seconds) sidelight.color1.fadeRandomAround(130.degrees, 5.degrees, 10.seconds)
sidelight.color2.fadeRandomAround(60.degrees, 5.degrees, 9.seconds) sidelight.color2.fadeRandomAround(60.degrees, 5.degrees, 9.seconds)
@ -121,11 +121,9 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
curtainState = CurtainState.OPEN curtainState = CurtainState.OPEN
onRun { onRun {
FrontLights.all { it.brightness.fade(40.percent, 6.seconds) } FrontLights.all { it.brightness.fade(100.percent, 6.seconds) }
sidelight.brightness.fade(100.percent, 6.seconds) sidelight.brightness.fade(100.percent, 6.seconds)
sidelight.colors.forEach { it.static(Color(hue = 180.degrees, saturation = 10.percent)) } sidelight.colors.forEach { it.static(Color.WARM_WHITE) }
backlightBar.brightness.fade(50.percent, 6.seconds)
backlightBar.color.static(Color(hue = 280.degrees, saturation = 50.percent))
} }
} }
@ -182,7 +180,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
lightStep(StepCue.Custom("Gardine wird geöffnet")) { lightStep(StepCue.Custom("Gardine wird geöffnet")) {
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) } FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
sidelight.brightness.off(3.seconds) sidelight.brightness.off(1.seconds)
} }
step(StepCue.Text("Mr. Nickelby", "…als du die Vorhänge aufgemacht hast.")) { step(StepCue.Text("Mr. Nickelby", "…als du die Vorhänge aufgemacht hast.")) {
@ -204,12 +202,12 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
repeat(2) { repeat(2) {
lightStep(StepCue.Custom("Gardine wird geschlossen")) { lightStep(StepCue.Custom("Gardine wird geschlossen")) {
FrontLights.all { it.brightness.fade(40.percent, 2.seconds) } FrontLights.all { it.brightness.fade(40.percent, 2.seconds) }
sidelight.brightness.fade(80.percent, 2.seconds) sidelight.brightness.fade(80.percent, 1.seconds)
} }
lightStep(StepCue.Custom("Gardine wird geöffnet")) { lightStep(StepCue.Custom("Gardine wird geöffnet")) {
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) } FrontLights.all { it.brightness.fade(100.percent, 1.seconds) }
sidelight.brightness.off(2.seconds) sidelight.brightness.off(1.5.seconds)
} }
} }
@ -289,7 +287,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
rightSpotTarget = "Dr. Sewart" rightSpotTarget = "Dr. Sewart"
onRun { onRun {
sidelight.colors.forEach { it.static(Color(hue = 180.degrees, saturation = 10.percent)) } sidelight.colors.forEach { it.static(Color.WARM_WHITE) }
sidelight.brightness.fade(10.percent, 6.seconds) sidelight.brightness.fade(10.percent, 6.seconds)
} }
} }
@ -446,10 +444,10 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
curtainState = CurtainState.OPEN curtainState = CurtainState.OPEN
onRun { onRun {
sidelight.color1.fadeRandomAround(230.degrees, 10.degrees, 10.seconds) sidelight.color1.fadeRandomAround(230.degrees, 30.degrees, 2.seconds)
sidelight.color2.static(Color(hue = 230.degrees, saturation = 60.percent)) sidelight.color2.fadeRandomAround(230.degrees, 35.degrees, 4.seconds)
sidelight.color3.static(Color(hue = 230.degrees, saturation = 10.percent)) sidelight.color3.static(Color(hue = 230.degrees, saturation = 20.percent))
sidelight.color4.static(Color(hue = 230.degrees, saturation = 10.percent)) sidelight.color4.static(Color(hue = 230.degrees, saturation = 20.percent))
sidelight.brightness.fade(40.percent, 8.seconds) sidelight.brightness.fade(40.percent, 8.seconds)
} }
} }

View file

@ -21,7 +21,8 @@ fun SceneBuilderContext.songDraculasZorn() {
Spots.right.brightness.static(100.percent) Spots.right.brightness.static(100.percent)
backlightBar.color.fade(Color(hue = 0.degrees, saturation = 100.percent), 10.seconds) backlightBar.color.fade(Color(hue = 0.degrees, saturation = 100.percent), 10.seconds)
backlightBar.brightness.fade(20.percent, 10.seconds) backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent)
sidelight.brightness.off(5.seconds) sidelight.brightness.off(5.seconds)
BlinderBars.all { BlinderBars.all {
@ -42,6 +43,8 @@ fun SceneBuilderContext.songDraculasZorn() {
rightSpotTarget = "Dracula" rightSpotTarget = "Dracula"
onRun { onRun {
backlightBar.brightness.pulse(1.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent)
BlinderBars.all { BlinderBars.all {
it.brightness.fade(10.percent, 1.seconds) it.brightness.fade(10.percent, 1.seconds)
it.presetSpeed.static(10.percent) it.presetSpeed.static(10.percent)

View file

@ -18,24 +18,19 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
onRun { onRun {
backlightBar.color.static(Color(hue = 0.degrees, saturation = 80.percent)) backlightBar.color.static(Color(hue = 0.degrees, saturation = 80.percent))
backlightBar.brightness.pulse(2.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 30.percent) backlightBar.brightness.pulse(1.8.seconds, 0.15.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent)
Washs.both { Washs.both {
it.pointAtStageCenter() it.pointAtStageCenter()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red) it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red)
it.brightness.pulse(2.seconds, 0.1.seconds, 0.3.seconds, startDelay = 0.4.seconds, peak = 30.percent) it.brightness.pulse(1.8.seconds, 0.15.seconds, 0.3.seconds, startDelay = 0.4.seconds, peak = 30.percent)
} }
} }
} }
lightStep(StepCue.Custom("Musik: Drums setzen ein")) { lightStep(StepCue.Custom("Musik: Drums setzen ein")) {
backlightBar.brightness.pulse(1.6.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 60.percent) backlightBar.brightness.pulse(1.6.seconds, 0.15.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent)
Washs.both { it.brightness.pulse(1.6.seconds, 0.1.seconds, 0.3.seconds, startDelay = 0.4.seconds, peak = 100.percent) }
Washs.both {
it.pointAtStageCenter()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red)
it.brightness.pulse(1.6.seconds, 0.1.seconds, 0.3.seconds, startDelay = 0.4.seconds, peak = 100.percent)
}
BlinderBars.all { BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // red, chase, back-and-forth it.preset.static(StairvilleSplb.Preset.STUB) // red, chase, back-and-forth
@ -55,11 +50,11 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
repeat(2) { repeat(2) {
lightStep(StepCue.Text("Vampire", "Aaah")) { lightStep(StepCue.Text("Vampire", "Aaah")) {
sidelight.brightness.fade(80.percent, 3.seconds) sidelight.brightness.fade(80.percent, 3.seconds)
backlightBar.brightness.rampDown(0.6.seconds) backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent)
} }
lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) { lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) {
backlightBar.brightness.pulseOnce(0.1.seconds, 3.seconds, end = 20.percent) backlightBar.brightness.pulseOnce(0.1.seconds, 2.seconds, end = 20.percent)
} }
lightStep(StepCue.Text("Vampire", "…angerichtet!", "zweite Silbe")) { lightStep(StepCue.Text("Vampire", "…angerichtet!", "zweite Silbe")) {
@ -78,17 +73,21 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
lightStep(StepCue.Text("Vampire", "Aaah")) { lightStep(StepCue.Text("Vampire", "Aaah")) {
sidelight.brightness.fade(80.percent, 3.seconds) sidelight.brightness.fade(80.percent, 3.seconds)
backlightBar.brightness.rampDown(0.6.seconds) backlightBar.brightness.pulse(1.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent)
}
lightStep(StepCue.Text("Vampire", "Aaah")) {
// Empty to prevent confusion with the next step
} }
repeat(2) { repeat(2) {
lightStep(StepCue.Text("Vampire", "Aaah")) { lightStep(StepCue.Text("Vampire", "Aaah")) {
sidelight.brightness.fade(80.percent, 3.seconds) sidelight.brightness.fade(80.percent, 3.seconds)
backlightBar.brightness.rampDown(0.6.seconds) backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent)
} }
lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) { lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) {
backlightBar.brightness.pulseOnce(0.1.seconds, 3.seconds, end = 20.percent) backlightBar.brightness.pulseOnce(0.1.seconds, 2.seconds, end = 20.percent)
} }
lightStep(StepCue.Text("Vampire", "…angerichtet!", "zweite Silbe")) { lightStep(StepCue.Text("Vampire", "…angerichtet!", "zweite Silbe")) {
@ -107,7 +106,7 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
lightStep(StepCue.Text("Vampire", "Aaah")) { lightStep(StepCue.Text("Vampire", "Aaah")) {
sidelight.brightness.pulseOnce(2.seconds, 1.seconds, peak = 80.percent, end = 40.percent) sidelight.brightness.pulseOnce(2.seconds, 1.seconds, peak = 80.percent, end = 40.percent)
backlightBar.brightness.rampDown(0.6.seconds) backlightBar.brightness.pulse(1.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent)
Washs.both { Washs.both {
it.pointAtAudience() it.pointAtAudience()
@ -128,7 +127,7 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
lightStep(StepCue.Text("Vampire", "Aaah")) { lightStep(StepCue.Text("Vampire", "Aaah")) {
sidelight.brightness.off(7.seconds) sidelight.brightness.off(7.seconds)
backlightBar.strobeSpeed.fade(start = 60.percent, end = 85.percent, duration = 7.seconds) backlightBar.strobeSpeed.fade(start = 60.percent, end = 90.percent, duration = 7.seconds)
backlightBar.brightness.fade(start = 10.percent, end = 100.percent, duration = 7.seconds) backlightBar.brightness.fade(start = 10.percent, end = 100.percent, duration = 7.seconds)
BlinderBars.all { it.brightness.off(5.seconds) } BlinderBars.all { it.brightness.off(5.seconds) }
@ -164,12 +163,12 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
} }
lightStep(StepCue.Custom("Nächster Beat")) { lightStep(StepCue.Custom("Nächster Beat")) {
backlightBar.color.fade(Color(hue = 0.degrees, saturation = 10.percent), 0.5.seconds) backlightBar.color.fade(Color(hue = 0.degrees, saturation = 30.percent), 1.seconds)
backlightBar.brightness.fade(30.percent, 0.5.seconds) backlightBar.brightness.fade(30.percent, 1.seconds)
sidelight.brightness.off(0.5.seconds) sidelight.brightness.off(1.seconds)
Washs.both { it.brightness.off(0.5.seconds) } Washs.both { it.brightness.off(1.seconds) }
BlinderBars.all { it.brightness.off(0.5.seconds) } BlinderBars.all { it.brightness.off(1.seconds) }
} }
lightStep(StepCue.MusicEnd) { lightStep(StepCue.MusicEnd) {

View file

@ -39,10 +39,12 @@ fun SceneBuilderContext.songIrrenhaus() {
} }
} }
lightStep(StepCue.Text("Dr. Sewart", "Bei uns ist alles scheißegal", "während letzter Silbe")) { lightStep(StepCue.Text("Dr. Sewart", "Bei uns ist alles scheißegal", "letzte Silbe")) {
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) } FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
Washs.both { it.brightness.off(3.seconds) } Washs.both { it.brightness.off(3.seconds) }
BlinderBars.all { it.brightness.off(3.seconds) } BlinderBars.all { it.brightness.off(3.seconds) }
backlightBar.color.static(Color.WARM_WHITE)
backlightBar.brightness.fade(100.percent, 2.seconds) backlightBar.brightness.fade(100.percent, 2.seconds)
} }
@ -69,7 +71,7 @@ fun SceneBuilderContext.songIrrenhaus() {
} }
Washs.both { it.brightness.fade(100.percent, 1.seconds) } Washs.both { it.brightness.fade(100.percent, 1.seconds) }
backlightBar.brightness.fade(50.percent, 1.seconds) backlightBar.brightness.off(2.seconds)
} }
lightStep(StepCue.Custom("Strophe")) { lightStep(StepCue.Custom("Strophe")) {
@ -81,7 +83,7 @@ fun SceneBuilderContext.songIrrenhaus() {
} }
} }
lightStep(StepCue.Text("Dr. Sewart", "Wir wissen, wie das geht", "während letzter Silbe")) { lightStep(StepCue.Text("Dr. Sewart", "Wir wissen, wie das geht", "letzte Silbe")) {
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) } FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
Washs.both { Washs.both {
@ -89,7 +91,7 @@ fun SceneBuilderContext.songIrrenhaus() {
it.brightness.off(3.seconds) it.brightness.off(3.seconds)
} }
backlightBar.strobeSpeed.static(60.percent) backlightBar.strobeSpeed.static(80.percent)
backlightBar.brightness.fade(100.percent, 2.seconds) backlightBar.brightness.fade(100.percent, 2.seconds)
BlinderBars.all { BlinderBars.all {
@ -100,6 +102,7 @@ fun SceneBuilderContext.songIrrenhaus() {
lightStep(StepCue.Text("Alle", "Hurra", "letzte Silbe")) { lightStep(StepCue.Text("Alle", "Hurra", "letzte Silbe")) {
FrontLights.all { it.brightness.off() } FrontLights.all { it.brightness.off() }
backlightBar.strobeSpeed.static(0.percent)
} }
lightStep(StepCue.Custom("Nächster Beat")) { lightStep(StepCue.Custom("Nächster Beat")) {
@ -139,7 +142,7 @@ fun SceneBuilderContext.songIrrenhaus() {
it.brightness.off(3.seconds) it.brightness.off(3.seconds)
} }
backlightBar.strobeSpeed.static(60.percent) backlightBar.strobeSpeed.static(80.percent)
backlightBar.brightness.fade(100.percent, 2.seconds) backlightBar.brightness.fade(100.percent, 2.seconds)
BlinderBars.all { BlinderBars.all {
@ -194,6 +197,8 @@ fun SceneBuilderContext.songIrrenhaus() {
it.color.static(Color.WHITE) it.color.static(Color.WHITE)
it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent) it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent)
} }
backlightBar.brightness.off(3.seconds)
} }
step(StepCue.MusicEnd) { step(StepCue.MusicEnd) {

View file

@ -11,7 +11,10 @@ import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songLucy() { fun SceneBuilderContext.songLucy() {
lightStep(StepCue.MusicStart("Lucy", 2.minutes + 45.seconds)) { lightStep(StepCue.MusicStart("Lucy", 2.minutes + 45.seconds)) {
backlightBar.color.fade(Color(hue = 315.degrees), 15.seconds) sidelight.brightness.fade(30.percent, 15.seconds)
backlightBar.brightness.fade(40.percent, 15.seconds)
backlightBar.color.static(Color(hue = 315.degrees))
Washs.both { Washs.both {
it.pointAtCeiling() it.pointAtCeiling()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.White) it.colorWheelMode.static(CoemarProWash.ColorWheelMode.White)
@ -69,6 +72,7 @@ fun SceneBuilderContext.songLucy() {
lightStep(StepCue.Custom("Schlussschlag")) { lightStep(StepCue.Custom("Schlussschlag")) {
// TODO // TODO
backlightBar.brightness.off(2.seconds)
Washs.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds) } Washs.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds) }
} }

View file

@ -36,7 +36,7 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
backlightBar.brightness.fade(75.percent, 2.seconds) backlightBar.brightness.fade(75.percent, 2.seconds)
backlightBar.color.cycle(12.seconds) backlightBar.color.cycle(20.seconds)
Washs.both { Washs.both {
it.brightness.pulseOnce(2.seconds, 5.seconds, 100.percent) it.brightness.pulseOnce(2.seconds, 5.seconds, 100.percent)
@ -108,7 +108,7 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
} }
lightStep(StepCue.Custom("Refrain beginnt")) { lightStep(StepCue.Custom("Refrain")) {
BlinderBars.all { BlinderBars.all {
it.brightness.fade(25.percent, 1.seconds) it.brightness.fade(25.percent, 1.seconds)
it.presetSpeed.static(50.percent) it.presetSpeed.static(50.percent)

View file

@ -45,7 +45,7 @@ abstract class DoubleDV<T>(private val initialStaticValue: Double) : DynamicValu
val rampUpDuration: Duration, val rampUpDuration: Duration,
val rampDownDuration: Duration, val rampDownDuration: Duration,
val startDelay: Duration, val startDelay: Duration,
val peakValue: Double, val peak: Double,
val start: Double, val start: Double,
val end: Double val end: Double
) : State ) : State
@ -98,18 +98,18 @@ abstract class DoubleDV<T>(private val initialStaticValue: Double) : DynamicValu
var time = elapsedTime - s.startDelay var time = elapsedTime - s.startDelay
if (time < Duration.ZERO) 0.0 if (time < Duration.ZERO) 0.0
else { else {
time = (time.inWholeMilliseconds.toDouble() / s.interval.inWholeMilliseconds).mod(1.0).milliseconds time = time.inWholeMilliseconds.toDouble().mod(s.interval.inWholeMilliseconds.toDouble()).milliseconds
if (time <= s.rampUpDuration) { if (time <= s.rampUpDuration) {
val progress = time / s.rampUpDuration val progress = time / s.rampUpDuration
val delta = s.peakValue - s.start val delta = s.peak - s.start
(progress * delta + s.start) (progress * delta + s.start)
} else { } else {
time = time - s.rampUpDuration time = time - s.rampUpDuration
val progress = min(time / s.rampDownDuration, 1.0) val progress = min(time / s.rampDownDuration, 1.0)
val delta = s.peakValue - s.end val delta = s.end - s.peak
(s.peakValue - progress * delta) (progress * delta + s.peak)
} }
} }
} }
@ -157,8 +157,8 @@ abstract class DoubleDV<T>(private val initialStaticValue: Double) : DynamicValu
state = State.Ramp(period, fromDomain(start), fromDomain(end)) state = State.Ramp(period, fromDomain(start), fromDomain(end))
} }
fun rampUp(period: Duration) = ramp(period, minimumValue, maximumValue) fun rampUp(period: Duration, peak: T = maximumValue) = ramp(period, minimumValue, peak)
fun rampDown(period: Duration) = ramp(period, maximumValue, minimumValue) fun rampDown(period: Duration, peak: T = maximumValue) = ramp(period, peak, minimumValue)
fun steps(steps: List<T>, interval: Duration, startIndex: Int = 0) { fun steps(steps: List<T>, interval: Duration, startIndex: Int = 0) {
state = State.Step(steps.map(this::fromDomain).toImmutableList(), interval, startIndex) state = State.Step(steps.map(this::fromDomain).toImmutableList(), interval, startIndex)
@ -180,8 +180,8 @@ abstract class DoubleDV<T>(private val initialStaticValue: Double) : DynamicValu
rampDownDuration: Duration, rampDownDuration: Duration,
startDelay: Duration = Duration.ZERO, startDelay: Duration = Duration.ZERO,
peak: T = maximumValue, peak: T = maximumValue,
end: T = minimumValue, start: T = minimumValue,
start: T = getCurrentValue() end: T = minimumValue
) { ) {
state = State.Pulse(interval, rampUpDuration, rampDownDuration, startDelay, fromDomain(peak), fromDomain(start), fromDomain(end)) state = State.Pulse(interval, rampUpDuration, rampDownDuration, startDelay, fromDomain(peak), fromDomain(start), fromDomain(end))
} }

View file

@ -61,5 +61,7 @@ data class Color(
companion object { companion object {
val WHITE = Color(0.degrees, 0.percent, 100.percent) val WHITE = Color(0.degrees, 0.percent, 100.percent)
val BLACK = Color(0.degrees, 0.percent, 0.percent) val BLACK = Color(0.degrees, 0.percent, 0.percent)
val WARM_WHITE = Color(30.degrees, 60.percent, 100.percent)
} }
} }