commit 83

This commit is contained in:
Moritz Ruth 2025-03-21 18:33:15 +01:00
parent 890abb5600
commit 72363fcf5e
Signed by: moritzruth
GPG key ID: C9BBAB79405EE56D
21 changed files with 121 additions and 110 deletions

View file

@ -9,11 +9,12 @@ import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun ShowBuilderContext.act1() = act("1. Akt") { fun ShowBuilderContext.act1() = act("1. Akt") {
scene("Ouvertüre [4]") { scene("Ouvertüre [4]") {
step(StepCue.MusicStart("Ouvertüre", 10.seconds)) { step(StepCue.MusicStart("Ouvertüre", 1.minutes)) {
curtainState = CurtainState.CLOSED curtainState = CurtainState.CLOSED
props { props {
@ -96,12 +97,19 @@ fun ShowBuilderContext.act1() = act("1. Akt") {
} }
} }
step(StepCue.MusicStart("Umbau (Adel ist geil)", 10.seconds)) { step(StepCue.MusicStart("Umbau (Adel ist geil)", 1.minutes + 30.seconds)) {
actors { actors {
-"Hawkins / durch Mitte" -"Hawkins / durch Mitte"
-"Sekretärinnen / durch Mitte" -"Sekretärinnen / durch Mitte"
} }
curtainState = CurtainState.CLOSED
props {
it[PropPosition.BACKDROP] = "Irrenanstalt"
it[PropPosition.CENTER] = "Medikamenten-Schrank"
}
onRun { onRun {
FrontLights.all { it.brightness.off(6.seconds) } FrontLights.all { it.brightness.off(6.seconds) }
sidelight.brightness.off(6.seconds) sidelight.brightness.off(6.seconds)
@ -286,7 +294,7 @@ fun ShowBuilderContext.act1() = act("1. Akt") {
} }
} }
step(StepCue.MusicStart("Umbau (Duett)", 10.seconds)) {} step(StepCue.MusicStart("Umbau (Duett)", 1.minutes + 35.seconds)) {}
} }
scene("Kaffeeklatsch [24]") { scene("Kaffeeklatsch [24]") {

View file

@ -8,14 +8,14 @@ import de.moritzruth.theaterdsl.dmx.DmxValue
import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.persistentSetOf
class AdjFogFury3000(override val firstChannel: DmxAddress) : Device { class AdjFogFury3000(override val firstChannel: DmxAddress) : Device {
override val numberOfChannels = 4u override val numberOfChannels = 3u
val power = PercentageDV() val power = PercentageDV()
override val dvs = persistentSetOf(power) override val dvs = persistentSetOf(power)
override fun writeDmxData(writer: DmxDataWriter, isLightBehindCurtainOn: Boolean) { override fun writeDmxData(writer: DmxDataWriter, isLightBehindCurtainOn: Boolean) {
writer.writePercentage(power.getCurrentValue()) writer.writePercentage(power.getCurrentValue())
writer.writeRaw(DmxValue(255u)) // interval (ignored) writer.writeRaw(DmxValue(0u)) // interval (ignored)
writer.writeRaw(DmxValue(255u)) // duration = constant writer.writeRaw(DmxValue(255u)) // duration = constant
} }
} }

View file

@ -84,6 +84,7 @@ class CoemarProWash(override val firstChannel: DmxAddress, private val invertAng
writer.writeLowByte(pan) writer.writeLowByte(pan)
writer.writeLowByte(tilt) writer.writeLowByte(tilt)
writer.writeRaw(DmxValue(0u)) // pan/tilt speed = maximum writer.writeRaw(DmxValue(0u)) // pan/tilt speed = maximum
// TODO: Turn off lamp when not in use
writer.writeRaw(DmxValue(255u)) // fan speed and lamp control = no function writer.writeRaw(DmxValue(255u)) // fan speed and lamp control = no function
writer.writeRaw(colorWheelMode.getCurrentValue().getDmxValue()) writer.writeRaw(colorWheelMode.getCurrentValue().getDmxValue())
writer.writePercentage(cyan.getCurrentValue()) writer.writePercentage(cyan.getCurrentValue())
@ -92,6 +93,7 @@ class CoemarProWash(override val firstChannel: DmxAddress, private val invertAng
writer.writeRaw(DmxValue(0u)) // dimmer and color speed = maximum writer.writeRaw(DmxValue(0u)) // dimmer and color speed = maximum
writer.writeRaw(DmxValue(0u)) // colour macro = off writer.writeRaw(DmxValue(0u)) // colour macro = off
// TODO: Fix
// writer.writeRaw(DmxValue((beamAngle.getCurrentValue().value * 54 + 125).roundToInt().toUByte())) // writer.writeRaw(DmxValue((beamAngle.getCurrentValue().value * 54 + 125).roundToInt().toUByte()))
writer.writeRaw(DmxValue(0u)) writer.writeRaw(DmxValue(0u))

View file

@ -2,8 +2,6 @@ package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.BlinderBars import de.moritzruth.dracula_musical.device.BlinderBars
import de.moritzruth.dracula_musical.device.StairvilleSplb import de.moritzruth.dracula_musical.device.StairvilleSplb
import de.moritzruth.theaterdsl.show.CurtainState
import de.moritzruth.theaterdsl.show.PropPosition
import de.moritzruth.theaterdsl.show.SceneBuilderContext import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
@ -11,22 +9,11 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songAdelIstGeil() { fun SceneBuilderContext.songAdelIstGeil() {
// TODO lightStep(StepCue.MusicStart("Adel ist geil", 2.minutes + 40.seconds)) {
BlinderBars.all {
step(StepCue.MusicStart("Adel ist geil", 2.minutes + 15.seconds)) { it.brightness.fade(25.percent, 5.seconds)
curtainState = CurtainState.CLOSED it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, green
it.presetSpeed.static(40.percent)
props {
it[PropPosition.BACKDROP] = "Irrenanstalt"
it[PropPosition.CENTER] = "Medikamenten-Schrank"
}
onRun {
BlinderBars.all {
it.brightness.fade(25.percent, 5.seconds)
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, green
it.presetSpeed.static(40.percent)
}
} }
} }

View file

@ -14,7 +14,7 @@ private fun StairvilleTlb.pulseSlow() = brightness.pulse(1.5.seconds, 0.15.secon
private fun StairvilleTlb.pulseFast() = brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 100.percent) private fun StairvilleTlb.pulseFast() = brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 100.percent)
fun SceneBuilderContext.songDraculasZorn() { fun SceneBuilderContext.songDraculasZorn() {
step(StepCue.MusicStart("Draculas Zorn", 3.minutes + 50.seconds)) { step(StepCue.MusicStart("Draculas Zorn", 4.minutes + 30.seconds)) {
actors { actors {
+"Dracula / durchs Publikum" +"Dracula / durchs Publikum"
} }
@ -162,7 +162,7 @@ fun SceneBuilderContext.songDraculasZorn() {
} }
} }
lightStep(StepCue.Custom("Musik: Einsetzen der E-Gitarre")) { lightStep(StepCue.Custom("Musik: Tiefer Ton nach »brav«")) {
backlightBar.color.fade(Color(hue = 0.degrees, saturation = 100.percent), 2.seconds) backlightBar.color.fade(Color(hue = 0.degrees, saturation = 100.percent), 2.seconds)
backlightBar.brightness.fade(75.percent, 2.seconds) backlightBar.brightness.fade(75.percent, 2.seconds)
@ -217,14 +217,14 @@ fun SceneBuilderContext.songDraculasZorn() {
} }
lightStep(StepCue.Custom("Musik: Fill-in")) { lightStep(StepCue.Custom("Musik: Fill-in")) {
FrontLights.all { it.brightness.off(2.seconds) } FrontLights.all { it.brightness.off(3.seconds) }
sidelight.brightness.off(3.seconds) sidelight.brightness.off(4.seconds)
BlinderBars.all { BlinderBars.all {
it.preset.static(null) it.preset.static(null)
it.color.static(Color.WHITE) it.color.static(Color.WHITE)
it.brightness.pulseOnce(1.5.seconds, 3.seconds) it.brightness.pulseOnce(1.5.seconds, 4.seconds)
} }
} }
@ -245,7 +245,7 @@ fun SceneBuilderContext.songDraculasZorn() {
Washs.both { it.brightness.fade(100.percent, 2.seconds) } Washs.both { it.brightness.fade(100.percent, 2.seconds) }
} }
lightStep(StepCue.Custom("Musik: Einsetzen der E-Gitarre")) { lightStep(StepCue.Text("Alle", "…deiner Macht.", "letzte Silbe")) {
backlightBar.strobeSpeed.fade(80.percent, 3.seconds) backlightBar.strobeSpeed.fade(80.percent, 3.seconds)
BlinderBars.all { BlinderBars.all {

View file

@ -10,7 +10,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songDuettDraculaMina() { fun SceneBuilderContext.songDuettDraculaMina() {
step(StepCue.MusicStart("Duett: Dracula & Mina", 4.minutes + 30.seconds)) { step(StepCue.MusicStart("Duett: Dracula & Mina", 4.minutes + 10.seconds)) {
rightSpotTarget = "Mina" rightSpotTarget = "Mina"
rightSpotTarget = "Dracula" rightSpotTarget = "Dracula"
@ -29,7 +29,7 @@ fun SceneBuilderContext.songDuettDraculaMina() {
} }
} }
lightStep(StepCue.Custom("Musik: Strophe")) { lightStep(StepCue.Text("Dracula", "Ich kenne dich!")) {
FrontLights.all { it.brightness.off(15.seconds) } FrontLights.all { it.brightness.off(15.seconds) }
} }

View file

@ -10,7 +10,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songDuettMinaJonathan() { fun SceneBuilderContext.songDuettMinaJonathan() {
lightStep(StepCue.MusicStart("Duett", 3.minutes + 15.seconds)) { lightStep(StepCue.MusicStart("Duett", 3.minutes + 50.seconds)) {
FrontLights.all { it.brightness.fade(40.percent, 5.seconds) } FrontLights.all { it.brightness.fade(40.percent, 5.seconds) }
Washs.both { Washs.both {
it.pointAtCeiling() it.pointAtCeiling()
@ -19,7 +19,7 @@ fun SceneBuilderContext.songDuettMinaJonathan() {
} }
} }
lightStep(StepCue.Custom("Musik: Strophe")) { lightStep(StepCue.Text("Mina", "Ich hab seit gestern…", "Anfang")) {
BlinderBars.all { BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // dreamy, flowy, pink, warm it.preset.static(StairvilleSplb.Preset.STUB) // dreamy, flowy, pink, warm
it.presetSpeed.static(10.percent) it.presetSpeed.static(10.percent)

View file

@ -3,6 +3,7 @@ package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.* import de.moritzruth.dracula_musical.device.*
import de.moritzruth.theaterdsl.show.SceneBuilderContext import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.show.greedyCueStep
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
@ -10,7 +11,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songEsIstAngerichtet() { fun SceneBuilderContext.songEsIstAngerichtet() {
step(StepCue.MusicStart("Es ist angerichtet", 2.minutes + 30.seconds)) { step(StepCue.MusicStart("Es ist angerichtet", 2.minutes + 20.seconds)) {
actors { actors {
// TODO: Expand // TODO: Expand
+"Vampire" +"Vampire"
@ -76,11 +77,9 @@ fun SceneBuilderContext.songEsIstAngerichtet() {
backlightBar.brightness.pulse(1.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 50.percent) backlightBar.brightness.pulse(1.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 50.percent)
} }
lightStep(StepCue.Text("Vampire", "Aaah")) { greedyCueStep(StepCue.Text("Vampire", "Aaah"))
// Empty to prevent confusion with the next step
}
repeat(2) { repeat(3) {
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.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 50.percent) backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 50.percent)

View file

@ -5,10 +5,11 @@ import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songFinale() { fun SceneBuilderContext.songFinale() {
step(StepCue.MusicStart("Finale", 10.seconds)) { step(StepCue.MusicStart("Finale", 4.minutes)) {
actors { actors {
-"Mina" -"Mina"
-"Jonathan" -"Jonathan"

View file

@ -1,10 +1,7 @@
package de.moritzruth.dracula_musical.song package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.* import de.moritzruth.dracula_musical.device.*
import de.moritzruth.theaterdsl.show.CurtainState import de.moritzruth.theaterdsl.show.*
import de.moritzruth.theaterdsl.show.PropPosition
import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
@ -16,7 +13,7 @@ private fun StairvilleTlb.pulseSlow() = brightness.pulse(0.8.seconds, 0.1.second
private fun StairvilleTlb.pulseFast() = brightness.pulse(0.6.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 100.percent) private fun StairvilleTlb.pulseFast() = brightness.pulse(0.6.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 100.percent)
fun SceneBuilderContext.songFinaleErsterAkt() { fun SceneBuilderContext.songFinaleErsterAkt() {
step(StepCue.MusicStart("Finale (1. Akt)", 4.minutes)) { step(StepCue.MusicStart("Finale (1. Akt)", 4.minutes + 40.seconds)) {
onRun { onRun {
Washs.both { Washs.both {
it.pointAtAudience() it.pointAtAudience()
@ -116,6 +113,8 @@ fun SceneBuilderContext.songFinaleErsterAkt() {
} }
} }
greedyCueStep(StepCue.Text("Vampire", "Wir sollen wohl gar nichts haben!", "Anfang"))
lightStep(StepCue.Text("Vampire", "Unsre Kehlen sind verdorrt!", "Anfang")) { lightStep(StepCue.Text("Vampire", "Unsre Kehlen sind verdorrt!", "Anfang")) {
backlightBar.pulseSlow() backlightBar.pulseSlow()
backlightBar.color.fade(Color.WHITE, 0.4.seconds) backlightBar.color.fade(Color.WHITE, 0.4.seconds)
@ -175,6 +174,8 @@ fun SceneBuilderContext.songFinaleErsterAkt() {
} }
} }
greedyCueStep(StepCue.Text("Dracula", "…habt doch Geduld!", "Anfang"))
lightStep(StepCue.Text("Françoise", "Du sorgst für uns?", "Anfang")) { lightStep(StepCue.Text("Françoise", "Du sorgst für uns?", "Anfang")) {
backlightBar.breathe() backlightBar.breathe()
backlightBar.color.fade(Color.WHITE, 0.4.seconds) backlightBar.color.fade(Color.WHITE, 0.4.seconds)
@ -268,6 +269,8 @@ fun SceneBuilderContext.songFinaleErsterAkt() {
} }
} }
greedyCueStep(StepCue.Text("Dracula", "Viel schöner als er!", "Anfang"))
lightStep(StepCue.Text("Vampire", "Das ist uns egal!", "Anfang")) { lightStep(StepCue.Text("Vampire", "Das ist uns egal!", "Anfang")) {
backlightBar.brightness.fade(100.percent, 0.4.seconds) backlightBar.brightness.fade(100.percent, 0.4.seconds)
backlightBar.color.fade(Color.WHITE, 0.4.seconds) backlightBar.color.fade(Color.WHITE, 0.4.seconds)
@ -348,6 +351,8 @@ fun SceneBuilderContext.songFinaleErsterAkt() {
} }
} }
greedyCueStep(StepCue.Text("Vampire", "Das ist egal!", "Anfang"))
lightStep(StepCue.Text("Vampire", "Das ist egal!", "letzte Silbe")) { lightStep(StepCue.Text("Vampire", "Das ist egal!", "letzte Silbe")) {
sidelight.brightness.fade(start = 0.percent, end = 100.percent, duration = 0.4.seconds) sidelight.brightness.fade(start = 0.percent, end = 100.percent, duration = 0.4.seconds)
sidelight.strobeSpeed.static(0.percent) sidelight.strobeSpeed.static(0.percent)

View file

@ -9,7 +9,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songIrrenhaus() { fun SceneBuilderContext.songIrrenhaus() {
step(StepCue.MusicStart("Irrenhaus", 3.minutes)) { step(StepCue.MusicStart("Irrenhaus", 3.minutes + 10.seconds)) {
actors { actors {
+"Dr. Sewart / von rechts, 1. Tür" +"Dr. Sewart / von rechts, 1. Tür"
// TODO: Expand // TODO: Expand
@ -74,7 +74,7 @@ fun SceneBuilderContext.songIrrenhaus() {
backlightBar.brightness.off(2.seconds) backlightBar.brightness.off(2.seconds)
} }
lightStep(StepCue.Custom("Musik: Strophe")) { lightStep(StepCue.Text("Dr. Sewart", "Überall herrscht Größenwahn…", "Anfang")) {
Spots.right.brightness.fade(100.percent, 1.seconds) Spots.right.brightness.fade(100.percent, 1.seconds)
BlinderBars.all { BlinderBars.all {
@ -125,7 +125,7 @@ fun SceneBuilderContext.songIrrenhaus() {
backlightBar.brightness.fade(50.percent, 1.seconds) backlightBar.brightness.fade(50.percent, 1.seconds)
} }
lightStep(StepCue.Custom("Musik: Strophe")) { lightStep(StepCue.Text("Dr. Sewart", "Wer nicht völlig spinnt…", "Anfang")) {
Spots.right.brightness.fade(100.percent, 1.seconds) Spots.right.brightness.fade(100.percent, 1.seconds)
BlinderBars.all { BlinderBars.all {
@ -180,7 +180,9 @@ fun SceneBuilderContext.songIrrenhaus() {
} }
} }
lightStep(StepCue.Text("Alle", "Gott sei Dank!")) { lightStep(StepCue.Text("Alle", "Gott sei Dank!", "Anfang")) {
BlinderBars.all { it.presetSpeed.fade(80.percent, 4.seconds) }
Washs.both { Washs.both {
it.brightness.off(0.5.seconds) it.brightness.off(0.5.seconds)
it.pointAtAudience() it.pointAtAudience()

View file

@ -9,7 +9,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songKaffeeklatsch() { fun SceneBuilderContext.songKaffeeklatsch() {
step(StepCue.MusicStart("Kaffeeklatsch", 3.minutes)) { step(StepCue.MusicStart("Kaffeeklatsch", 2.minutes + 35.seconds)) {
BlinderBars.all { BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // idk it.preset.static(StairvilleSplb.Preset.STUB) // idk
it.presetSpeed.static(50.percent) it.presetSpeed.static(50.percent)

View file

@ -4,6 +4,7 @@ import de.moritzruth.dracula_musical.device.*
import de.moritzruth.theaterdsl.device.reset import de.moritzruth.theaterdsl.device.reset
import de.moritzruth.theaterdsl.show.SceneBuilderContext import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.show.greedyCueStep
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
@ -11,7 +12,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds 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 + 25.seconds)) {
sidelight.brightness.fade(30.percent, 15.seconds) sidelight.brightness.fade(30.percent, 15.seconds)
backlightBar.brightness.fade(40.percent, 15.seconds) backlightBar.brightness.fade(40.percent, 15.seconds)
backlightBar.color.static(Color(hue = 315.degrees, saturation = 20.percent)) backlightBar.color.static(Color(hue = 315.degrees, saturation = 20.percent))
@ -31,7 +32,7 @@ fun SceneBuilderContext.songLucy() {
} }
lightStep(StepCue.Custom("Musik: Nächster Beat")) { lightStep(StepCue.Custom("Musik: Nächster Beat")) {
backlightBar.brightness.pulseOnce(0.4.seconds, 2.5.seconds, end = 40.percent) backlightBar.brightness.pulseOnce(0.4.seconds, 4.seconds, end = 40.percent)
BlinderBars.all { BlinderBars.all {
it.brightness.pulseOnce(0.4.seconds, 2.5.seconds, peak = 75.percent) it.brightness.pulseOnce(0.4.seconds, 2.5.seconds, peak = 75.percent)
@ -52,19 +53,17 @@ fun SceneBuilderContext.songLucy() {
} }
lightStep(StepCue.Custom("Musik: Nächster Beat")) { lightStep(StepCue.Custom("Musik: Nächster Beat")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, end = 25.percent)} BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, end = 25.percent) }
Washs.left.brightness.sine(6.seconds, start = 0.percent) Washs.left.brightness.sine(6.seconds, start = 0.percent)
Washs.right.brightness.sine(6.seconds, start = 100.percent) Washs.right.brightness.sine(6.seconds, start = 100.percent)
} }
lightStep(StepCue.Custom("Musik: Strophe")) { lightStep(StepCue.Text("Lucy", "Du hast den besten Hintern…", "Anfang")) {
Tops.both { it.brightness.sine(8.seconds, 20.percent, 100.percent) } Tops.both { it.brightness.sine(8.seconds, 20.percent, 100.percent) }
} }
lightStep(StepCue.Text("Lucy", "Oh Nick…")) { greedyCueStep(StepCue.Text("Lucy", "Oh Nick…"))
// To prevent confusion with the next step
}
lightStep(StepCue.Text("Lucy", "oh Nick", "letzte Silbe")) { lightStep(StepCue.Text("Lucy", "oh Nick", "letzte Silbe")) {
Tops.both { it.brightness.pulseOnce(0.1.seconds, 1.seconds) } Tops.both { it.brightness.pulseOnce(0.1.seconds, 1.seconds) }
@ -82,8 +81,8 @@ fun SceneBuilderContext.songLucy() {
lightStep(StepCue.Custom("Musik: Langes Fill-in beginnt")) { lightStep(StepCue.Custom("Musik: Langes Fill-in beginnt")) {
BlinderBars.all { BlinderBars.all {
it.presetSpeed.fade(100.percent, 4.seconds) it.presetSpeed.fade(100.percent, 5.seconds)
it.brightness.fade(50.percent, 4.seconds) it.brightness.fade(50.percent, 5.seconds)
} }
} }
@ -129,16 +128,14 @@ fun SceneBuilderContext.songLucy() {
} }
} }
lightStep(StepCue.Custom("Nächster Beat")) { lightStep(StepCue.Custom("1. Beat")) {
BlinderBars.all { it.brightness.off(0.5.seconds) } BlinderBars.all { it.brightness.off(0.5.seconds) }
FrontLights.all { it.brightness.off(0.5.seconds) } FrontLights.all { it.brightness.off(0.5.seconds) }
} }
lightStep(StepCue.Custom("Nächster Beat")) { greedyCueStep(StepCue.Custom("2. Beat"))
// intentionally left blank
}
lightStep(StepCue.Custom("Nächster Beat")) { lightStep(StepCue.Custom("3. Beat")) {
Washs.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds) } Washs.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds) }
backlightBar.brightness.pulseOnce(0.1.seconds, 2.seconds) backlightBar.brightness.pulseOnce(0.1.seconds, 2.seconds)

View file

@ -6,13 +6,27 @@ import de.moritzruth.theaterdsl.show.PropPosition
import de.moritzruth.theaterdsl.show.SceneBuilderContext import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songMaskenball() { fun SceneBuilderContext.songMaskenball() {
step(StepCue.MusicStart("Maskenball", 2.minutes + 20.seconds)) { step(StepCue.MusicStart("Maskenball", 3.minutes + 10.seconds)) {
props {
it[PropPosition.BACKDROP] = "Dorfplatz"
}
}
step(StepCue.Custom("Musik: Vierter Glockenschlag")) {
curtainState = CurtainState.OPEN
onRun {
backlightBar.color.static(Color.DARK_BLUE)
backlightBar.brightness.fade(50.percent, 5.seconds)
}
}
step(StepCue.Custom("Musik: Einsetzen der Drums")) {
actors { actors {
+"Hawkins / von links" +"Hawkins / von links"
+"Eloïse / von links" +"Eloïse / von links"
@ -22,15 +36,10 @@ fun SceneBuilderContext.songMaskenball() {
+"Besucher des Maskenballs / von links & durch Mitte" +"Besucher des Maskenballs / von links & durch Mitte"
} }
curtainState = CurtainState.OPEN
props {
it[PropPosition.BACKDROP] = "Dorfplatz"
}
onRun { onRun {
backlightBar.color.static(Color(hue = 310.degrees, saturation = 80.percent)) backlightBar.brightness.off(4.seconds)
backlightBar.brightness.fade(40.percent, 5.seconds)
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
Tops.both { Tops.both {
it.startRoomMovement(5.0) it.startRoomMovement(5.0)
@ -46,7 +55,7 @@ fun SceneBuilderContext.songMaskenball() {
} }
} }
lightStep(StepCue.Custom("Musik: Einsetzen der Drums")) { lightStep(StepCue.Text("Alle", "Maskenball!", "Anfang")) {
backlightBar.color.cycle(8.seconds) backlightBar.color.cycle(8.seconds)
backlightBar.brightness.fade(80.percent, 5.seconds) backlightBar.brightness.fade(80.percent, 5.seconds)

View file

@ -11,7 +11,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songMittsommernacht() { fun SceneBuilderContext.songMittsommernacht() {
step(StepCue.MusicStart("Mittsommernacht", 4.minutes + 30.seconds)) { step(StepCue.MusicStart("Mittsommernacht", 5.minutes)) {
actors { actors {
// TODO: Expand // TODO: Expand
+"Einwohner / von links & durch Mitte" +"Einwohner / von links & durch Mitte"
@ -24,19 +24,8 @@ fun SceneBuilderContext.songMittsommernacht() {
it.brightness.fade(100.percent, 6.seconds) it.brightness.fade(100.percent, 6.seconds)
} }
Tops.both {
it.startRoomMovement(3.0)
it.brightness.fade(100.percent, 2.seconds)
it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.Rotate(10.percent))
it.prismMode.static(FuturelightDmh160.PrismMode.FACETS_8)
it.prismRotationSpeed.static(20.percent)
}
backlightBar.brightness.fade(75.percent, 2.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, 75.percent)
it.beamAngle.fade(0.percent, 2.seconds) it.beamAngle.fade(0.percent, 2.seconds)
it.pointAtCeiling(6.seconds) it.pointAtCeiling(6.seconds)
} }
@ -49,6 +38,9 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
lightStep(StepCue.Custom("Musik: Drums-Pattern wechselt")) { lightStep(StepCue.Custom("Musik: Drums-Pattern wechselt")) {
backlightBar.color.cycle(20.seconds)
backlightBar.brightness.fade(75.percent, 2.seconds)
BlinderBars.all { BlinderBars.all {
it.brightness.fade(25.percent, 1.seconds) it.brightness.fade(25.percent, 1.seconds)
it.white.static(0.percent) it.white.static(0.percent)
@ -57,11 +49,7 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
} }
lightStep(StepCue.Custom("Musik: Strophe")) { lightStep(StepCue.Text("Alle", "Heute sind die Gespenster los…", "Anfang")) {
Tops.both {
it.brightness.off(2.seconds)
}
BlinderBars.all { BlinderBars.all {
it.presetSpeed.static(50.percent) it.presetSpeed.static(50.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, warm it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, warm
@ -105,15 +93,9 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
} }
lightStep(StepCue.Custom("Musik: Refrain")) { lightStep(StepCue.Text("Alle", "…grusel, grusel, aaah", "letzte Silbe")) {
BlinderBars.all { backlightBar.brightness.fade(75.percent, 5.seconds)
it.brightness.fade(25.percent, 1.seconds) backlightBar.color.static(Color.WARM_WHITE)
it.presetSpeed.static(50.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, warm
}
backlightBar.brightness.fade(75.percent, 2.seconds)
backlightBar.color.cycle(12.seconds)
Washs.both { Washs.both {
it.pointAtStageCenter() it.pointAtStageCenter()
@ -121,6 +103,16 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
} }
lightStep(StepCue.Text("Alle", "Mittsommernacht!", "Anfang")) {
backlightBar.color.cycle(12.seconds)
BlinderBars.all {
it.brightness.fade(25.percent, 1.seconds)
it.presetSpeed.static(50.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, warm
}
}
lightStep(StepCue.Text("Alle", "Heute ist die Mittsommer…", "letzte Silbe")) { lightStep(StepCue.Text("Alle", "Heute ist die Mittsommer…", "letzte Silbe")) {
BlinderBars.all { BlinderBars.all {
it.brightness.fade(start = 40.percent, end = 0.percent, duration = 5.seconds) it.brightness.fade(start = 40.percent, end = 0.percent, duration = 5.seconds)
@ -133,7 +125,7 @@ fun SceneBuilderContext.songMittsommernacht() {
Washs.both { it.brightness.static(100.percent) } Washs.both { it.brightness.static(100.percent) }
} }
step(StepCue.Custom("Musik: 1. Hit")) { step(StepCue.Custom("Musik: 1. Beat")) {
actors { actors {
+"Dracula / durch Mitte" +"Dracula / durch Mitte"
+"Eloïse / durch Mitte" +"Eloïse / durch Mitte"
@ -146,15 +138,15 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
} }
lightStep(StepCue.Custom("Musik: 2. Hit")) { lightStep(StepCue.Custom("Musik: 2. Beat")) {
backlightBar.brightness.off(0.5.seconds) backlightBar.brightness.off(0.5.seconds)
} }
lightStep(StepCue.Custom("Musik: 3. Hit")) { lightStep(StepCue.Custom("Musik: 3. Beat")) {
Washs.both { it.brightness.off(0.5.seconds) } Washs.both { it.brightness.off(0.5.seconds) }
} }
lightStep(StepCue.Custom("Musik: 4. Hit")) { lightStep(StepCue.Custom("Musik: 4. Beat")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds, 100.percent) } BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds, 100.percent) }
Washs.both { Washs.both {
@ -162,7 +154,7 @@ fun SceneBuilderContext.songMittsommernacht() {
} }
} }
lightStep(StepCue.Custom("Musik: 5. Hit")) { lightStep(StepCue.Custom("Musik: 5. Beat")) {
BlinderBars.all { BlinderBars.all {
it.white.off() it.white.off()
it.color.static(Color(hue = 345.degrees)) it.color.static(Color(hue = 345.degrees))

View file

@ -13,7 +13,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songQuartett() { fun SceneBuilderContext.songQuartett() {
step(StepCue.MusicStart("Quartett", 3.minutes)) { step(StepCue.MusicStart("Quartett", 2.minutes + 40.seconds)) {
onRun { onRun {
Washs.both { Washs.both {
it.pointAtStageCenter() it.pointAtStageCenter()

View file

@ -11,7 +11,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songRepriseDuett() { fun SceneBuilderContext.songRepriseDuett() {
lightStep(StepCue.MusicStart("Reprise: Duett", 1.minutes + 15.seconds)) { lightStep(StepCue.MusicStart("Reprise: Duett", 2.minutes + 10.seconds)) {
Washs.both { Washs.both {
it.pointAtCeiling() it.pointAtCeiling()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.White) it.colorWheelMode.static(CoemarProWash.ColorWheelMode.White)

View file

@ -5,10 +5,11 @@ import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songRepriseMaskenball() { fun SceneBuilderContext.songRepriseMaskenball() {
step(StepCue.MusicStart("Reprise: Maskenball", 50.seconds)) { step(StepCue.MusicStart("Reprise: Maskenball", 1.minutes + 30.seconds)) {
actors { actors {
// TODO: Expand // TODO: Expand
+"Besucher des Maskenballs / durch Mitte" +"Besucher des Maskenballs / durch Mitte"

View file

@ -10,7 +10,7 @@ import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songStreitDerVampire() { fun SceneBuilderContext.songStreitDerVampire() {
lightStep(StepCue.MusicStart("Streit der Vampire", 1.minutes + 30.seconds)) { lightStep(StepCue.MusicStart("Streit der Vampire", 1.minutes + 40.seconds)) {
BlinderBars.all { BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // chase, single direction it.preset.static(StairvilleSplb.Preset.STUB) // chase, single direction
it.presetSpeed.static(40.percent) it.presetSpeed.static(40.percent)

View file

@ -27,6 +27,12 @@ interface SceneBuilderContext {
fun lightStep(cue: StepCue, runner: StepRunner) fun lightStep(cue: StepCue, runner: StepRunner)
} }
/**
* Inserts a step doing nothing.
* Intended to be for cases where the cue of the following step could be confused with the cue of this step if this step would not exist.
*/
fun SceneBuilderContext.greedyCueStep(cue: StepCue) {}
@TheaterDslMarker @TheaterDslMarker
interface StepDataBuilderContext { interface StepDataBuilderContext {
val props: PropsBuilderMap val props: PropsBuilderMap

View file

@ -2,6 +2,8 @@
<button <button
:class="[$style.root, isActive ? 'bg-green-800' : 'bg-green-600']" :class="[$style.root, isActive ? 'bg-green-800' : 'bg-green-600']"
class="px-5 py-2 active:bg-green-800 transition duration-200 font-bold text-4" class="px-5 py-2 active:bg-green-800 transition duration-200 font-bold text-4"
@pointerdown="e => emit('pointerdown', e)"
@pointerup="e => emit('pointerup', e)"
@click="e => emit('click', e)" @click="e => emit('click', e)"
> >
<slot/> <slot/>