commit 69

This commit is contained in:
Moritz Ruth 2025-03-11 00:22:58 +01:00
parent 2153b67d8f
commit 9114af9b2c
Signed by: moritzruth
GPG key ID: C9BBAB79405EE56D
11 changed files with 538 additions and 43 deletions

View file

@ -13,17 +13,6 @@ import kotlin.time.Duration.Companion.seconds
fun ShowBuilderContext.act1() = act("Erster Akt") { fun ShowBuilderContext.act1() = act("Erster Akt") {
scene("Ouvertüre") { scene("Ouvertüre") {
lightStep(StepCue.Custom("1%")) {
backlightBar.color.static(Color.WHITE)
backlightBar.brightness.static(1.percent)
}
for (i in 10.rangeTo(100) step 10) {
lightStep(StepCue.Custom("$i%")) {
backlightBar.brightness.static(i.percent)
}
}
step(StepCue.MusicStart("Ouvertüre", 10.seconds)) { step(StepCue.MusicStart("Ouvertüre", 10.seconds)) {
curtainState = CurtainState.CLOSED curtainState = CurtainState.CLOSED

View file

@ -1,11 +1,13 @@
package de.moritzruth.dracula_musical.act package de.moritzruth.dracula_musical.act
import de.moritzruth.dracula_musical.device.* import de.moritzruth.dracula_musical.device.*
import de.moritzruth.dracula_musical.song.songDuettDraculaMina import de.moritzruth.dracula_musical.song.*
import de.moritzruth.dracula_musical.song.songMaskenball import de.moritzruth.theaterdsl.show.CurtainState
import de.moritzruth.dracula_musical.song.songRepriseMaskenball import de.moritzruth.theaterdsl.show.PropPosition
import de.moritzruth.theaterdsl.show.ShowBuilderContext import de.moritzruth.theaterdsl.show.ShowBuilderContext
import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.show.StepCue
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.seconds import kotlin.time.Duration.Companion.seconds
@ -56,6 +58,8 @@ fun ShowBuilderContext.act2() = act("Zweiter Akt") {
} }
} }
step(StepCue.Text("Ascot", "Oberschwester!")) {}
step(StepCue.Text("Ascot", "Oberschwester!")) { step(StepCue.Text("Ascot", "Oberschwester!")) {
actors { actors {
-"Ascot / durch Mitte" -"Ascot / durch Mitte"
@ -93,14 +97,290 @@ fun ShowBuilderContext.act2() = act("Zweiter Akt") {
-"Kaffeetanten / durch Mitte" -"Kaffeetanten / durch Mitte"
-"Hawkins / durch Mitte" -"Hawkins / durch Mitte"
} }
onRun {
FrontLights.all { it.brightness.fade(75.percent, 10.seconds) }
backlightBar.brightness.fade(25.percent, 10.seconds)
Tops.both {
it.startRoomMovement(2.0)
it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.White)
}
}
} }
lightStep(StepCue.Custom("Lucy bedroht Dr. Sewart (mit Musik)")) { lightStep(StepCue.Custom("Van Helsing zückt das Kreuz (mit Musik)")) {
BlinderBars.all {
it.brightness.fade(100.percent, 2.seconds)
it.preset.static(StairvilleSplb.Preset.STUB) // switching, hectic
it.presetSpeed.static(100.percent)
}
Tops.both {
it.pointAtStageMiddleSingleCenterMarking()
it.strobeSpeed.rampDown(4.seconds)
it.brightness.static(100.percent)
}
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
}
step(StepCue.Custom("Lucy ist geflüchtet")) {
actors {
-"Lucy"
}
onRun {
Tops.both { it.brightness.off() }
BlinderBars.all { it.brightness.off(1.seconds) }
FrontLights.all { it.brightness.fade(75.percent, 1.seconds) }
}
}
songVanHelsing()
step(StepCue.Text("Van Helsing", "… stirbt sie einen qualvollen Tod.")) {
actors {
+"Hawkins"
}
}
step(StepCue.Text("Van Helsing", "Dann schnell!")) {
actors {
-"Van Helsing"
-"Dr. Sewart"
}
}
step(StepCue.Text("Hawkins", "… ein Bad nehmen vorher!")) {
actors {
-"Hawkins"
}
}
step(StepCue.MusicStart("Umbau (Adel ist geil)", 10.seconds)) {
curtainState = CurtainState.CLOSED
props {
it[PropPosition.BACKDROP] = "Irrenanstalt"
it[PropPosition.CENTER] = "Medikamenten-Schrank"
}
onRun {
FrontLights.center { it.brightness.off(10.seconds) }
backlightBar.brightness.off(15.seconds)
}
}
}
scene("Wiederholungstäter") {
step(StepCue.MusicEnd) {
actors {
+"Mina / von rechts, 2. Tür"
+"Ascot / von rechts, 2. Tür"
}
curtainState = CurtainState.OPEN
onRun {
FrontLights.center { it.brightness.fade(40.percent, 8.seconds) }
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(50.percent, 8.seconds)
}
}
step(StepCue.Text("Ascot", "… an der Nase herumführen!")) {
actors {
-"Mina / nach links"
-"Ascot / nach links"
+"Backe / durch Mitte"
+"Timmy / durch Mitte"
}
onRun {
FrontLights.center { it.brightness.off(8.seconds) }
}
}
step(StepCue.Text("Backe", "Nein, dir, du Pfeife!")) {
actors {
+"Ascot / von links"
}
onRun {
FrontLights.center { it.brightness.fade(40.percent, 5.seconds) }
}
}
step(StepCue.Text("Backe", "… und ruckzuck sind alle glücklich.")) {
actors {
-"Ascot / nach rechts, 1. Tür"
-"Backe / nach rechts, 1. Tür"
-"Timmy / nach rechts, 1. Tür"
+"Dracula / von rechts"
+"Renfield / hinter Fenster"
}
rightSpotTarget = "Dracula (rechts)"
}
lightStep(StepCue.Custom("Dracula erscheint")) {
Spots.right.brightness.fade(100.percent, 2.seconds)
}
step(StepCue.Text("Dracula", "Still wie eine Leiche. Idiot.")) {
actors {
-"Renfield / tot"
-"Dracula / nach rechts, 2. Tür"
+"Jonathan / von rechts, 1. Tür"
}
rightSpotTarget = null
onRun {
Spots.right.brightness.off(2.seconds)
}
}
}
scene("So viele Vampire!") {
step(StepCue.Text("Jonathan", "Ich bins! Jonathan!")) {
actors {
+"Eloïse / durch Mitte"
+"Françoise / durch Mitte"
+"Bernadette / durch Mitte"
+"Lucy / von links"
}
}
songQuartett()
step(StepCue.Custom("Die Vampire nähern sich Jonathan")) {
actors {
+"Van Helsing / durch Mitte"
+"Dr. Sewart / von rechts"
}
onRun {
Tops.both {
it.startRoomMovement(2.0)
it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.White)
}
}
}
lightStep(StepCue.Custom("Van Helsing zückt das Kreuz (mit Musik)")) {
Tops.both {
it.pointAtStageMiddleSingleCenterMarking()
it.strobeSpeed.rampDown(4.seconds)
it.brightness.static(100.percent)
}
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
backlightBar.brightness.pulseOnce(1.seconds, 3.seconds)
BlinderBars.all { BlinderBars.all {
it.brightness.fade(100.percent, 2.seconds) it.brightness.fade(100.percent, 2.seconds)
it.preset.static(StairvilleSplb.Preset.STUB) // switching, hectic it.preset.static(StairvilleSplb.Preset.STUB) // switching, hectic
it.presetSpeed.static(100.percent) it.presetSpeed.static(100.percent)
} }
} }
step(StepCue.Custom("Die Vampire sind geflüchtet")) {
actors {
-"Bernadette / nach links"
-"Eloïse / durch Mitte"
-"Françoise / nach rechts"
-"Lucy / nach rechts"
}
onRun {
BlinderBars.all { it.brightness.off(1.seconds) }
Tops.both { it.brightness.off() }
FrontLights.all { it.brightness.fade(75.percent, 1.seconds) }
}
}
step(StepCue.Custom("Van Helsing öffnet die Tür")) {
actors {
+"Dracula / hinter 2. Tür von rechts"
+"Mina / in Draculas Armen"
}
rightSpotTarget = "Dracula & Mina (2. Tür von rechts)"
onRun {
Spots.right.brightness.static(100.percent)
Tops.both { it.startRoomMovement(2.0) }
Washs.both {
it.pointAtCeiling()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite)
}
}
}
lightStep(StepCue.Custom("Van Helsing zückt das Kreuz (mit Musik)")) {
BlinderBars.all {
it.brightness.fade(100.percent, 2.seconds)
it.preset.static(StairvilleSplb.Preset.STUB) // switching, hectic
it.presetSpeed.static(100.percent)
}
Tops.both {
it.pointAtStageMiddleSingleCenterMarking()
it.strobeSpeed.rampDown(4.seconds)
it.brightness.static(100.percent)
}
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
Washs.both {
it.pointAtAudience(2.seconds)
it.brightness.rampUp(1.seconds)
}
}
step(StepCue.Custom("Dracula ist geflüchtet")) {
actors {
-"Dracula"
-"Mina"
}
onRun {
BlinderBars.all { it.brightness.off(1.seconds) }
Tops.both { it.brightness.off() }
Washs.both { it.brightness.off() }
FrontLights.all { it.brightness.fade(75.percent, 1.seconds) }
}
}
lightStep(StepCue.Custom("Musik: Einsetzen der Drums")) {
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // chase, back-and-forth, hectic
it.presetSpeed.static(40.percent)
it.brightness.fade(40.percent, 0.5.seconds)
}
}
step(StepCue.Text("Van Helsing", "Wir müssen sie finden! Schnell!")) {
actors {
-"Van Helsing / nach rechts, 1. Tür"
-"Dr. Sewart / nach rechts, 1. Tür"
-"Jonathan / nach rechts, 1. Tür"
}
curtainState = CurtainState.CLOSED // fast
onRun {
FrontLights.all { it.brightness.off(3.seconds) }
sidelight.brightness.off(3.seconds)
BlinderBars.all { it.brightness.off(2.seconds) }
}
}
} }
} }

View file

@ -62,13 +62,13 @@ class CoemarProWash(override val firstChannel: DmxAddress, private val invertAng
} }
fun pointAtCeiling(fadeDuration: Duration = Duration.ZERO) { fun pointAtCeiling(fadeDuration: Duration = Duration.ZERO) {
pan.fade(if (invertAngles) 300.degrees else 400.degrees, fadeDuration) // TODO: Fade von guests aus testen, soll über die Wand gehen pan.fade(360.degrees, fadeDuration)
tilt.fade(120.degrees, fadeDuration) tilt.fade(120.degrees, fadeDuration)
} }
fun pointAtAudience() { fun pointAtAudience(fadeDuration: Duration = Duration.ZERO) {
pan.static(360.degrees) pan.fade(360.degrees, fadeDuration)
tilt.static(240.degrees) tilt.fade(240.degrees, fadeDuration)
} }
override val dvs = persistentSetOf( override val dvs = persistentSetOf(

View file

@ -2,18 +2,23 @@ package de.moritzruth.dracula_musical.device
import de.moritzruth.theaterdsl.device.DeviceGroup import de.moritzruth.theaterdsl.device.DeviceGroup
import de.moritzruth.theaterdsl.dmx.DmxAddress import de.moritzruth.theaterdsl.dmx.DmxAddress
import de.moritzruth.theaterdsl.dmx.DmxValue
import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.persistentSetOf
object FrontLights { object FrontLights {
val left = DeviceGroup(SimpleDimmer(DmxAddress(1u)), SimpleDimmer(DmxAddress(2u))) private const val GAMMA = 4.0
val center = DeviceGroup(SimpleDimmer(DmxAddress(4u)), SimpleDimmer(DmxAddress(5u))) private val MINIMUM_VISIBLE_VALUE = DmxValue(40u)
val right = DeviceGroup(SimpleDimmer(DmxAddress(7u)), SimpleDimmer(DmxAddress(8u))) val left = DeviceGroup(SimpleDimmer(DmxAddress(1u), GAMMA, MINIMUM_VISIBLE_VALUE), SimpleDimmer(DmxAddress(2u), GAMMA, MINIMUM_VISIBLE_VALUE))
val center = DeviceGroup(SimpleDimmer(DmxAddress(4u), GAMMA, MINIMUM_VISIBLE_VALUE), SimpleDimmer(DmxAddress(5u), GAMMA, MINIMUM_VISIBLE_VALUE))
val right = DeviceGroup(SimpleDimmer(DmxAddress(7u), GAMMA, MINIMUM_VISIBLE_VALUE), SimpleDimmer(DmxAddress(8u), GAMMA, MINIMUM_VISIBLE_VALUE))
val all = left + center + right val all = left + center + right
} }
object Spots { object Spots {
val left = SimpleDimmer(DmxAddress(10u)) private const val GAMMA = 2.0
val right = SimpleDimmer(DmxAddress(11u)) private val MINIMUM_VISIBLE_VALUE = DmxValue(40u)
val left = SimpleDimmer(DmxAddress(10u), GAMMA, MINIMUM_VISIBLE_VALUE)
val right = SimpleDimmer(DmxAddress(11u), GAMMA, MINIMUM_VISIBLE_VALUE)
} }
object Tops { object Tops {

View file

@ -4,14 +4,24 @@ import de.moritzruth.theaterdsl.device.Device
import de.moritzruth.theaterdsl.device.PercentageDV import de.moritzruth.theaterdsl.device.PercentageDV
import de.moritzruth.theaterdsl.dmx.DmxAddress import de.moritzruth.theaterdsl.dmx.DmxAddress
import de.moritzruth.theaterdsl.dmx.DmxDataWriter import de.moritzruth.theaterdsl.dmx.DmxDataWriter
import de.moritzruth.theaterdsl.dmx.DmxValue
import de.moritzruth.theaterdsl.value.Percentage
import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.persistentSetOf
import kotlin.math.pow
import kotlin.math.roundToInt
class SimpleDimmer(channel: DmxAddress) : Device { class SimpleDimmer(channel: DmxAddress, private val gamma: Double = 1.0, private val minimumVisibleValue: DmxValue = DmxValue(0u)) : Device {
override val firstChannel = channel override val firstChannel = channel
override val numberOfChannels: UInt = 1u override val numberOfChannels: UInt = 1u
override fun writeDmxData(writer: DmxDataWriter, isLightBehindCurtainOn: Boolean) { override fun writeDmxData(writer: DmxDataWriter, isLightBehindCurtainOn: Boolean) {
writer.writePercentage(brightness.getCurrentValue()) val adjustedBrightness = Percentage(brightness.getCurrentValue().value.pow(gamma))
if (adjustedBrightness.value == 0.0) writer.writeRaw(DmxValue(0u))
else writer.writeRaw(
DmxValue(
adjustedBrightness.ofRange(minimumVisibleValue.value.toDouble()..DmxValue.VALUE_RANGE.endInclusive.toDouble()).roundToInt().toUByte()
)
)
} }
val brightness = PercentageDV() val brightness = PercentageDV()

View file

@ -43,7 +43,7 @@ fun SceneBuilderContext.songDraculasZorn() {
} }
} }
step(StepCue.Custom("Musik: Takt nach »Macht«")) { step(StepCue.Custom("Musik: Breakdown")) {
rightSpotTarget = "Dracula" rightSpotTarget = "Dracula"
onRun { onRun {
@ -58,7 +58,7 @@ fun SceneBuilderContext.songDraculasZorn() {
} }
lightStep(StepCue.Text("Eloïse", "Was?")) { lightStep(StepCue.Text("Eloïse", "Was?")) {
sidelight.brightness.fade(40.percent, 10.seconds) sidelight.brightness.fade(100.percent, 10.seconds)
FrontLights.all { it.brightness.fade(75.percent, 10.seconds) } FrontLights.all { it.brightness.fade(75.percent, 10.seconds) }
Washs.both { it.brightness.pulse(1.5.seconds, 0.1.seconds, 0.4.seconds) } Washs.both { it.brightness.pulse(1.5.seconds, 0.1.seconds, 0.4.seconds) }
} }
@ -90,7 +90,7 @@ fun SceneBuilderContext.songDraculasZorn() {
} }
lightStep(StepCue.Text("Bernadette", "Er ist bei uns eingebrochen", "Anfang")) { lightStep(StepCue.Text("Bernadette", "Er ist bei uns eingebrochen", "Anfang")) {
sidelight.brightness.fade(40.percent, 10.seconds) sidelight.brightness.fade(100.percent, 10.seconds)
backlightBar.pulseSlow() backlightBar.pulseSlow()
FrontLights.all { it.brightness.fade(75.percent, 10.seconds) } FrontLights.all { it.brightness.fade(75.percent, 10.seconds) }
Washs.both { it.brightness.pulse(1.5.seconds, 0.1.seconds, 0.4.seconds) } Washs.both { it.brightness.pulse(1.5.seconds, 0.1.seconds, 0.4.seconds) }
@ -139,8 +139,8 @@ fun SceneBuilderContext.songDraculasZorn() {
} }
lightStep(StepCue.Custom("Musik: Fill-in")) { lightStep(StepCue.Custom("Musik: Fill-in")) {
backlightBar.color.fade(Color.WARM_WHITE, 2.seconds) backlightBar.color.static(Color.WARM_WHITE)
backlightBar.brightness.fade(50.percent, 2.seconds) backlightBar.brightness.fade(50.percent, 4.seconds)
Washs.both { Washs.both {
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(20.percent)) it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(20.percent))
@ -166,7 +166,7 @@ fun SceneBuilderContext.songDraculasZorn() {
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)
sidelight.brightness.fade(50.percent, 10.seconds) sidelight.brightness.fade(100.percent, 10.seconds)
Tops.both { it.brightness.fade(100.percent, 1.5.seconds) } Tops.both { it.brightness.fade(100.percent, 1.5.seconds) }
FrontLights.all { it.brightness.off(2.seconds) } FrontLights.all { it.brightness.off(2.seconds) }
BlinderBars.all { it.brightness.off(1.5.seconds) } BlinderBars.all { it.brightness.off(1.5.seconds) }
@ -284,7 +284,7 @@ fun SceneBuilderContext.songDraculasZorn() {
lightStep(StepCue.Text("Alle", "Du bist unser…", "Anfang")) { lightStep(StepCue.Text("Alle", "Du bist unser…", "Anfang")) {
backlightBar.strobeSpeed.fade(10.percent, 2.seconds) backlightBar.strobeSpeed.fade(10.percent, 2.seconds)
sidelight.brightness.fade(30.percent, 1.seconds) sidelight.brightness.fade(40.percent, 1.seconds)
Washs.both { it.brightness.ramp(1.seconds, 100.percent, 50.percent) } Washs.both { it.brightness.ramp(1.seconds, 100.percent, 50.percent) }
} }

View file

@ -23,9 +23,9 @@ fun SceneBuilderContext.songDuettDraculaMina() {
sidelight.brightness.fade(50.percent, 50.seconds) sidelight.brightness.fade(50.percent, 50.seconds)
sidelight.color1.fadeRandomAround(25.degrees, 30.degrees, 10.seconds) sidelight.color1.fadeRandomAround(25.degrees, 30.degrees, 10.seconds)
sidelight.color2.fadeRandomAround(230.degrees, 30.degrees, 10.seconds) sidelight.color2.fadeRandomAround(230.degrees, 40.degrees, 10.seconds)
sidelight.color3.fadeRandomAround(25.degrees, 30.degrees, 10.seconds) sidelight.color3.fadeRandomAround(25.degrees, 30.degrees, 10.seconds)
sidelight.color4.fadeRandomAround(230.degrees, 30.degrees, 10.seconds) sidelight.color4.fadeRandomAround(230.degrees, 40.degrees, 10.seconds)
} }
} }
@ -80,14 +80,13 @@ fun SceneBuilderContext.songDuettDraculaMina() {
sidelight.brightness.off(6.seconds) sidelight.brightness.off(6.seconds)
backlightBar.color.static(Color.RED) backlightBar.color.static(Color.RED)
backlightBar.brightness.fade(100.percent, 6.seconds) backlightBar.brightness.pulseOnce(8.seconds, 6.seconds)
} }
lightStep(StepCue.MusicEnd) { lightStep(StepCue.MusicEnd) {
Spots.left.brightness.off(3.seconds) Spots.left.brightness.off(3.seconds)
backlightBar.brightness.pulse(1.8.seconds, 0.15.seconds, 0.2.seconds, startDelay = 0.seconds) backlightBar.brightness.pulse(1.8.seconds, 0.15.seconds, 0.2.seconds, peak = 40.percent, startDelay = 0.seconds)
sidelight.brightness.pulse(1.8.seconds, 0.15.seconds, 0.3.seconds, startDelay = 0.4.seconds)
Washs.both { it.brightness.pulse(1.8.seconds, 0.15.seconds, 0.3.seconds, startDelay = 0.4.seconds) } Washs.both { it.brightness.pulse(1.8.seconds, 0.15.seconds, 0.3.seconds, startDelay = 0.4.seconds) }
} }
} }

View file

@ -18,7 +18,7 @@ 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(1.8.seconds, 0.15.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent) backlightBar.brightness.pulse(1.8.seconds, 0.15.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 50.percent)
Washs.both { Washs.both {
it.pointAtStageCenter() it.pointAtStageCenter()
@ -49,8 +49,8 @@ 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(60.percent, 3.seconds)
backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent) backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent)
} }
lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) { lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) {
@ -83,7 +83,7 @@ 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.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 20.percent) backlightBar.brightness.pulse(0.5.seconds, 0.1.seconds, 0.2.seconds, startDelay = 0.seconds, peak = 40.percent)
} }
lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) { lightStep(StepCue.Text("Vampire", "…angerichtet!", "erste Silbe")) {

View file

@ -0,0 +1,59 @@
package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.CoemarProWash
import de.moritzruth.dracula_musical.device.Spots
import de.moritzruth.dracula_musical.device.Washs
import de.moritzruth.dracula_musical.device.backlightBar
import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songQuartett() {
step(StepCue.MusicStart("Quartett", 3.minutes)) {
onRun {
Washs.both {
it.pointAtStageCenter()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Violet)
}
}
leftSpotTarget = "Vampire (Ziel wechseln, wenn aus)"
rightSpotTarget = "Vampire (Ziel wechseln, wenn aus)"
}
lightStep(StepCue.Custom("Musik: Einsetzen des Klaviers")) {
backlightBar.color.fadeRandomAround(270.degrees, 50.degrees, 10.seconds)
backlightBar.brightness.fade(50.percent, 6.seconds)
Washs.both { it.brightness.fade(100.percent, 5.seconds) }
Spots.left.brightness.sine(16.seconds)
Spots.right.brightness.sine(12.seconds)
}
lightStep(StepCue.Text("Eloïse", "Findest du nur bei mir.")) {
Washs.both { it.brightness.off(3.seconds) }
}
lightStep(StepCue.Custom("Musik: Hoher Ton von Violine")) {
Spots.left.brightness.off(3.seconds)
Spots.right.brightness.off(3.seconds)
backlightBar.color.static(Color.RED)
backlightBar.brightness.pulse(1.8.seconds, 0.15.seconds, 0.2.seconds, peak = 40.percent, startDelay = 0.seconds)
Washs.both {
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red)
it.brightness.pulse(1.8.seconds, 0.15.seconds, 0.3.seconds, startDelay = 0.4.seconds)
}
}
step(StepCue.MusicEnd) {
leftSpotTarget = null
rightSpotTarget = null
}
}

View file

@ -52,7 +52,7 @@ fun SceneBuilderContext.songRepriseMaskenball() {
} }
backlightBar.color.fade(Color.WARM_WHITE, 0.5.seconds) backlightBar.color.fade(Color.WARM_WHITE, 0.5.seconds)
backlightBar.brightness.pulseOnce(2.seconds, 6.seconds, end = 30.percent) backlightBar.brightness.pulseOnce(2.seconds, 6.seconds, end = 50.percent)
BlinderBars.all { BlinderBars.all {
it.presetSpeed.fade(0.percent, 2.seconds) it.presetSpeed.fade(0.percent, 2.seconds)

View file

@ -0,0 +1,153 @@
package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.*
import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.Color
import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songVanHelsing() {
step(StepCue.MusicStart("Van Helsing", 2.minutes + 30.seconds)) {
rightSpotTarget = "Van Helsing"
onRun {
Spots.right.brightness.fade(100.percent, 20.seconds)
}
}
lightStep(StepCue.Text("Van Helsing", "Dann werde ich es Ihnen sagen.")) {
backlightBar.brightness.off(10.seconds)
FrontLights.left { it.brightness.off(10.seconds) }
FrontLights.center { it.brightness.fade(25.percent, 10.seconds) }
FrontLights.right { it.brightness.off(10.seconds) }
}
lightStep(StepCue.Text("Van Helsing", "Menschenblut…", "Anfang")) {
backlightBar.brightness.sine(0.75.seconds, minimum = 50.percent, maximum = 100.percent)
backlightBar.color.static(Color(hue = 200.degrees, saturation = 40.percent))
Tops.both {
it.startRoomMovement(5.0)
it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.DarkBlue)
it.prismMode.static(FuturelightDmh160.PrismMode.OPEN)
}
Washs.both {
it.pointAtCeiling()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.DarkBlue)
it.beamAngle.static(100.percent)
}
}
lightStep(StepCue.Custom("Musik: Beat nach »Kreatur des Bösen«")) {
BlinderBars.all {
it.preset.static(null)
it.color.reset()
it.white.static(100.percent)
it.brightness.pulseOnce(0.1.seconds, 0.3.seconds)
}
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds) }
}
lightStep(StepCue.Text("Van Helsing", "Ein höllischer Dämon ist hier!", "letzte Silbe")) {
BlinderBars.all { it.brightness.pulseOnce(2.seconds, 0.3.seconds, peak = 50.percent) }
Washs.both {
it.pointAtAudience(3.seconds)
it.brightness.pulseOnce(2.seconds, 0.3.seconds, peak = 60.percent)
}
}
lightStep(StepCue.Text("Van Helsing", "Ein Vampir!", "Anfang")) {
Washs.both { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red) }
}
lightStep(StepCue.Text("Van Helsing", "Ein Vampir!", "letzte Silbe")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 1.seconds, peak = 50.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 1.seconds, peak = 100.percent) }
}
lightStep(StepCue.Custom("Musik: Beat nach »Meute«")) {
BlinderBars.all {
it.preset.static(null)
it.color.reset()
it.white.static(100.percent)
it.brightness.pulseOnce(0.1.seconds, 0.3.seconds)
}
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds) }
Washs.both {
it.pointAtCeiling()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.DarkBlue)
}
}
lightStep(StepCue.Text("Van Helsing", "Ein höllischer Dämon ist hier!", "letzte Silbe")) {
BlinderBars.all { it.brightness.pulseOnce(2.seconds, 0.3.seconds, peak = 50.percent) }
Washs.both {
it.pointAtAudience(3.seconds)
it.brightness.pulseOnce(2.seconds, 0.3.seconds, peak = 60.percent)
}
}
lightStep(StepCue.Text("Van Helsing", "Ein Vampir!", "Anfang")) {
Washs.both { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red) }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
backlightBar.brightness.off(0.1.seconds)
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 50.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 100.percent) }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
backlightBar.brightness.pulseOnce(0.1.seconds, 0.6.seconds)
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 50.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 100.percent) }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
backlightBar.brightness.pulseOnce(0.1.seconds, 0.6.seconds)
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds) }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 50.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 100.percent) }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
backlightBar.brightness.pulseOnce(0.1.seconds, 0.6.seconds)
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds) }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 50.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.6.seconds, peak = 100.percent) }
Tops.both { it.pointAtStageMiddleSingleCenterMarking() }
}
lightStep(StepCue.Custom("Musik: Nächster Beat")) {
backlightBar.brightness.fade(100.percent, 0.1.seconds)
Tops.both { it.brightness.fade(100.percent, 0.1.seconds) }
Spots.right.brightness.off(2.seconds)
}
step(StepCue.MusicEnd) {
rightSpotTarget = null
onRun {
Tops.both { it.brightness.off(4.seconds) }
FrontLights.center { it.brightness.fade(75.percent, 10.seconds) }
backlightBar.brightness.fade(40.percent, 10.seconds)
backlightBar.color.fade(Color.WARM_WHITE, 10.seconds)
}
}
}