diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/act/Act1.kt b/src/main/kotlin/de/moritzruth/dracula_musical/act/Act1.kt index a395daa..68a9c2b 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/act/Act1.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/act/Act1.kt @@ -53,7 +53,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") { } 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.color1.fadeRandomAround(130.degrees, 5.degrees, 10.seconds) sidelight.color2.fadeRandomAround(60.degrees, 5.degrees, 9.seconds) @@ -121,11 +121,9 @@ fun ShowBuilderContext.act1() = act("Erster Akt") { curtainState = CurtainState.OPEN 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.colors.forEach { it.static(Color(hue = 180.degrees, saturation = 10.percent)) } - backlightBar.brightness.fade(50.percent, 6.seconds) - backlightBar.color.static(Color(hue = 280.degrees, saturation = 50.percent)) + sidelight.colors.forEach { it.static(Color.WARM_WHITE) } } } @@ -182,7 +180,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") { lightStep(StepCue.Custom("Gardine wird geöffnet")) { 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.")) { @@ -204,12 +202,12 @@ fun ShowBuilderContext.act1() = act("Erster Akt") { repeat(2) { lightStep(StepCue.Custom("Gardine wird geschlossen")) { 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")) { - FrontLights.all { it.brightness.fade(100.percent, 2.seconds) } - sidelight.brightness.off(2.seconds) + FrontLights.all { it.brightness.fade(100.percent, 1.seconds) } + sidelight.brightness.off(1.5.seconds) } } @@ -289,7 +287,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") { rightSpotTarget = "Dr. Sewart" 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) } } @@ -446,10 +444,10 @@ fun ShowBuilderContext.act1() = act("Erster Akt") { curtainState = CurtainState.OPEN onRun { - sidelight.color1.fadeRandomAround(230.degrees, 10.degrees, 10.seconds) - sidelight.color2.static(Color(hue = 230.degrees, saturation = 60.percent)) - sidelight.color3.static(Color(hue = 230.degrees, saturation = 10.percent)) - sidelight.color4.static(Color(hue = 230.degrees, saturation = 10.percent)) + sidelight.color1.fadeRandomAround(230.degrees, 30.degrees, 2.seconds) + sidelight.color2.fadeRandomAround(230.degrees, 35.degrees, 4.seconds) + sidelight.color3.static(Color(hue = 230.degrees, saturation = 20.percent)) + sidelight.color4.static(Color(hue = 230.degrees, saturation = 20.percent)) sidelight.brightness.fade(40.percent, 8.seconds) } } diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt index b334c94..3ab57e1 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt @@ -21,7 +21,8 @@ fun SceneBuilderContext.songDraculasZorn() { Spots.right.brightness.static(100.percent) 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) BlinderBars.all { @@ -42,6 +43,8 @@ fun SceneBuilderContext.songDraculasZorn() { rightSpotTarget = "Dracula" onRun { + backlightBar.brightness.pulse(1.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent) + BlinderBars.all { it.brightness.fade(10.percent, 1.seconds) it.presetSpeed.static(10.percent) diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/EsIstAngerichtet.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/EsIstAngerichtet.kt index 1df7fc8..b519961 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/EsIstAngerichtet.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/EsIstAngerichtet.kt @@ -18,24 +18,19 @@ fun SceneBuilderContext.songEsIstAngerichtet() { onRun { 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 { it.pointAtStageCenter() 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")) { - backlightBar.brightness.pulse(1.6.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 60.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) - } + 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) } BlinderBars.all { it.preset.static(StairvilleSplb.Preset.STUB) // red, chase, back-and-forth @@ -55,11 +50,11 @@ fun SceneBuilderContext.songEsIstAngerichtet() { repeat(2) { lightStep(StepCue.Text("Vampire", "Aaah")) { 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")) { - 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")) { @@ -78,17 +73,21 @@ fun SceneBuilderContext.songEsIstAngerichtet() { lightStep(StepCue.Text("Vampire", "Aaah")) { 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) { lightStep(StepCue.Text("Vampire", "Aaah")) { 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")) { - 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")) { @@ -107,7 +106,7 @@ fun SceneBuilderContext.songEsIstAngerichtet() { lightStep(StepCue.Text("Vampire", "Aaah")) { 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 { it.pointAtAudience() @@ -128,7 +127,7 @@ fun SceneBuilderContext.songEsIstAngerichtet() { lightStep(StepCue.Text("Vampire", "Aaah")) { 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) BlinderBars.all { it.brightness.off(5.seconds) } @@ -164,12 +163,12 @@ fun SceneBuilderContext.songEsIstAngerichtet() { } lightStep(StepCue.Custom("Nächster Beat")) { - backlightBar.color.fade(Color(hue = 0.degrees, saturation = 10.percent), 0.5.seconds) - backlightBar.brightness.fade(30.percent, 0.5.seconds) + backlightBar.color.fade(Color(hue = 0.degrees, saturation = 30.percent), 1.seconds) + backlightBar.brightness.fade(30.percent, 1.seconds) - sidelight.brightness.off(0.5.seconds) - Washs.both { it.brightness.off(0.5.seconds) } - BlinderBars.all { it.brightness.off(0.5.seconds) } + sidelight.brightness.off(1.seconds) + Washs.both { it.brightness.off(1.seconds) } + BlinderBars.all { it.brightness.off(1.seconds) } } lightStep(StepCue.MusicEnd) { diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/Irrenhaus.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/Irrenhaus.kt index 2042141..5b1762c 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/Irrenhaus.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/Irrenhaus.kt @@ -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) } Washs.both { 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) } @@ -69,7 +71,7 @@ fun SceneBuilderContext.songIrrenhaus() { } 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")) { @@ -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) } Washs.both { @@ -89,7 +91,7 @@ fun SceneBuilderContext.songIrrenhaus() { it.brightness.off(3.seconds) } - backlightBar.strobeSpeed.static(60.percent) + backlightBar.strobeSpeed.static(80.percent) backlightBar.brightness.fade(100.percent, 2.seconds) BlinderBars.all { @@ -100,6 +102,7 @@ fun SceneBuilderContext.songIrrenhaus() { lightStep(StepCue.Text("Alle", "Hurra", "letzte Silbe")) { FrontLights.all { it.brightness.off() } + backlightBar.strobeSpeed.static(0.percent) } lightStep(StepCue.Custom("Nächster Beat")) { @@ -139,7 +142,7 @@ fun SceneBuilderContext.songIrrenhaus() { it.brightness.off(3.seconds) } - backlightBar.strobeSpeed.static(60.percent) + backlightBar.strobeSpeed.static(80.percent) backlightBar.brightness.fade(100.percent, 2.seconds) BlinderBars.all { @@ -194,6 +197,8 @@ fun SceneBuilderContext.songIrrenhaus() { it.color.static(Color.WHITE) it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent) } + + backlightBar.brightness.off(3.seconds) } step(StepCue.MusicEnd) { diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/Lucy.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/Lucy.kt index 66e4b84..7521bbd 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/Lucy.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/Lucy.kt @@ -11,7 +11,10 @@ import kotlin.time.Duration.Companion.seconds fun SceneBuilderContext.songLucy() { 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 { it.pointAtCeiling() it.colorWheelMode.static(CoemarProWash.ColorWheelMode.White) @@ -69,6 +72,7 @@ fun SceneBuilderContext.songLucy() { lightStep(StepCue.Custom("Schlussschlag")) { // TODO + backlightBar.brightness.off(2.seconds) Washs.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds) } } diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/Mittsommernacht.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/Mittsommernacht.kt index f239a41..65b2f4c 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/Mittsommernacht.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/Mittsommernacht.kt @@ -36,7 +36,7 @@ fun SceneBuilderContext.songMittsommernacht() { } backlightBar.brightness.fade(75.percent, 2.seconds) - backlightBar.color.cycle(12.seconds) + backlightBar.color.cycle(20.seconds) Washs.both { 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 { it.brightness.fade(25.percent, 1.seconds) it.presetSpeed.static(50.percent) diff --git a/src/main/kotlin/de/moritzruth/theaterdsl/device/DynamicValue.kt b/src/main/kotlin/de/moritzruth/theaterdsl/device/DynamicValue.kt index efc271b..a9d3944 100644 --- a/src/main/kotlin/de/moritzruth/theaterdsl/device/DynamicValue.kt +++ b/src/main/kotlin/de/moritzruth/theaterdsl/device/DynamicValue.kt @@ -45,7 +45,7 @@ abstract class DoubleDV(private val initialStaticValue: Double) : DynamicValu val rampUpDuration: Duration, val rampDownDuration: Duration, val startDelay: Duration, - val peakValue: Double, + val peak: Double, val start: Double, val end: Double ) : State @@ -98,18 +98,18 @@ abstract class DoubleDV(private val initialStaticValue: Double) : DynamicValu var time = elapsedTime - s.startDelay if (time < Duration.ZERO) 0.0 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) { val progress = time / s.rampUpDuration - val delta = s.peakValue - s.start + val delta = s.peak - s.start (progress * delta + s.start) } else { time = time - s.rampUpDuration val progress = min(time / s.rampDownDuration, 1.0) - val delta = s.peakValue - s.end - (s.peakValue - progress * delta) + val delta = s.end - s.peak + (progress * delta + s.peak) } } } @@ -157,8 +157,8 @@ abstract class DoubleDV(private val initialStaticValue: Double) : DynamicValu state = State.Ramp(period, fromDomain(start), fromDomain(end)) } - fun rampUp(period: Duration) = ramp(period, minimumValue, maximumValue) - fun rampDown(period: Duration) = ramp(period, maximumValue, minimumValue) + fun rampUp(period: Duration, peak: T = maximumValue) = ramp(period, minimumValue, peak) + fun rampDown(period: Duration, peak: T = maximumValue) = ramp(period, peak, minimumValue) fun steps(steps: List, interval: Duration, startIndex: Int = 0) { state = State.Step(steps.map(this::fromDomain).toImmutableList(), interval, startIndex) @@ -180,8 +180,8 @@ abstract class DoubleDV(private val initialStaticValue: Double) : DynamicValu rampDownDuration: Duration, startDelay: Duration = Duration.ZERO, peak: T = maximumValue, - end: T = minimumValue, - start: T = getCurrentValue() + start: T = minimumValue, + end: T = minimumValue ) { state = State.Pulse(interval, rampUpDuration, rampDownDuration, startDelay, fromDomain(peak), fromDomain(start), fromDomain(end)) } diff --git a/src/main/kotlin/de/moritzruth/theaterdsl/value/Color.kt b/src/main/kotlin/de/moritzruth/theaterdsl/value/Color.kt index e0840ac..d6450bd 100644 --- a/src/main/kotlin/de/moritzruth/theaterdsl/value/Color.kt +++ b/src/main/kotlin/de/moritzruth/theaterdsl/value/Color.kt @@ -61,5 +61,7 @@ data class Color( companion object { val WHITE = Color(0.degrees, 0.percent, 100.percent) val BLACK = Color(0.degrees, 0.percent, 0.percent) + + val WARM_WHITE = Color(30.degrees, 60.percent, 100.percent) } } \ No newline at end of file