commit 61

This commit is contained in:
Moritz Ruth 2025-03-08 17:48:34 +01:00
parent 7f33c42a1d
commit 84cc9ea2bc
Signed by: moritzruth
GPG key ID: C9BBAB79405EE56D
10 changed files with 666 additions and 93 deletions

1
.gitignore vendored
View file

@ -2,5 +2,6 @@ build/
/.gradle/ /.gradle/
/run/ /run/
/.kotlin/
/.idea/ /.idea/
/src/main/resources/ui/* /src/main/resources/ui/*

View file

@ -1,9 +1,16 @@
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.songAdelIstGeil
import de.moritzruth.dracula_musical.song.songIrrenhaus
import de.moritzruth.dracula_musical.song.songLucy
import de.moritzruth.dracula_musical.song.songMittsommernacht
import de.moritzruth.theaterdsl.show.CurtainState import de.moritzruth.theaterdsl.show.CurtainState
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
@ -15,7 +22,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
Washs.both { Washs.both {
it.pointAtAudience() it.pointAtAudience()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite)
it.beamAngle.static(0.percent) it.beamAngle.static(100.percent)
} }
} }
@ -27,64 +34,146 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
rightSpotTarget = "Erzähler / Mitte der Vorbühne" rightSpotTarget = "Erzähler / Mitte der Vorbühne"
onRun { onRun {
spotRight.brightness.fade(100.percent, 2.seconds) Spots.right.brightness.fade(100.percent, 2.seconds)
} }
} }
step(StepCue.Text("Erzähler", "Der Mittsommernacht.")) { step(StepCue.Text("Erzähler", "Der Mittsommernacht.")) {
actors {
-"Erzähler"
}
rightSpotTarget = null rightSpotTarget = null
onRun { onRun {
spotRight.brightness.off(1.seconds) Spots.right.brightness.off(1.seconds)
}
}
}
scene("Mittsommernacht") {
songMittsommernacht()
}
scene("Ankunft in Huntington") {
step(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)
sidelight.color3.fadeRandomAround(130.degrees, 5.degrees, 12.seconds)
sidelight.color4.fadeRandomAround(60.degrees, 5.degrees, 11.seconds)
}
}
scene("Mrs. Hawkins Feierabend") {
step(StepCue.Text("Lucy", "Heute gehört Mister Harker uns.", "Ende")) {
actors {
-"Mina"
-"Lucy"
-"Jonathan"
+"Mrs. Hawkins"
// TODO: Expand
+"Sekretärinnen"
}
props {
it[PropPosition.CENTER] = "Mrs. Hawkins Stuhl"
} }
} }
step(StepCue.MusicStart("Mittsommernacht", 10.seconds)) { step(StepCue.Text("Sekretärin 1", "Ashton und Ashton 6 Pfund glatt…")) {
actors { actors {
// TODO: Expand +"Renfield"
+"Einwohner von Huntington" }
}
songAdelIstGeil()
step(StepCue.Text("Renfield", "Ich bin schon weg.")) {
actors {
-"Renfield"
}
}
step(StepCue.MusicStart("Umbau (Adel ist geil)", 10.seconds)) {
actors {
-"Mrs. Hawkins"
-"Sekretärinnen"
}
curtainState = CurtainState.CLOSED
props {
it[PropPosition.CENTER] = null
}
onRun {
FrontLights.all { it.brightness.off(6.seconds) }
sidelight.brightness.off(6.seconds)
}
}
}
scene("Die Irrenanstalt") {
step(StepCue.MusicEnd) {
actors {
+"Mrs. Ascot"
+"Mina"
} }
curtainState = CurtainState.OPEN curtainState = CurtainState.OPEN
onRun { onRun {
Tops.both { FrontLights.all { it.brightness.fade(40.percent, 6.seconds) }
it.startRoomMovement(3.0) sidelight.brightness.fade(100.percent, 6.seconds)
it.brightness.fade(100.percent, 2.seconds) sidelight.colors.forEach { it.static(Color(hue = 180.degrees, saturation = 10.percent)) }
it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.Rotate(10.percent)) backlightBar.brightness.fade(50.percent, 6.seconds)
it.prismMode.static(FuturelightDmh160.PrismMode.FACETS_8) backlightBar.color.static(Color(hue = 280.degrees, saturation = 50.percent))
it.prismRotationSpeed.static(20.percent)
}
backlightBar.brightness.fade(100.percent, 2.seconds)
backlightBar.color.cycle(12.seconds)
Washs.both {
it.brightness.fade(100.percent, 2.seconds)
it.beamAngle.fade(100.percent, 2.seconds)
it.pointAtCeiling(6.seconds)
}
BlinderBars.all {
it.white.static(100.percent)
it.brightness.pulseOnce(3.seconds, 5.seconds, 75.percent)
}
} }
} }
lightStep(StepCue.Custom("Schlagzeug-Pattern wechselt")) { step(StepCue.Text("Mrs. Ascot", "Da kommt der Rest der Familie!")) {
BlinderBars.all { actors {
it.white.static(0.percent) +"Oberschwester"
it.presetSpeed.static(20.percent) // TODO: Expand
it.preset.static(StairvilleSplb.Preset.STUB) +"Pflegeteam"
} }
} }
lightStep(StepCue.Custom("Strophe beginnt")) { songIrrenhaus()
BlinderBars.all {
it.presetSpeed.static(50.percent) step(StepCue.Text("Oberschwester", "Sonst kriegst du sie als Zäpfchen!")) {
it.preset.static(StairvilleSplb.Preset.STUB) actors {
-"Oberschwester"
-"Die Irren"
+"Renfield"
+"Vermieterin"
+"Wärter 1"
+"Wärter 2"
}
}
step(StepCue.Text("Dr. Sewart", "Ich liebe meinen Job!")) {
actors {
-"Renfield"
-"Vermieterin"
-"Wärter 1"
-"Wärter 2"
-"Dr. Sewart"
-"Mrs. Ascot"
}
}
step(StepCue.Custom("Mina öffnet die Tür")) {
actors {
+"Mr. Nickelby"
+"Mrs. Nickelby"
+"Tochter Nickelby"
} }
} }
} }
scene("Blockflötenkreis") {
songLucy()
}
} }

View file

@ -11,8 +11,10 @@ object FrontLights {
val all = left + center + right val all = left + center + right
} }
val spotLeft = SimpleDimmer(DmxAddress(10u)) object Spots {
val spotRight = SimpleDimmer(DmxAddress(11u)) val left = SimpleDimmer(DmxAddress(10u))
val right = SimpleDimmer(DmxAddress(11u))
}
object Tops { object Tops {
val left = FuturelightDmh160(DmxAddress(37u), false) val left = FuturelightDmh160(DmxAddress(37u), false)
@ -39,8 +41,8 @@ val fogMachine = AdjFogFury3000(DmxAddress(117u))
val devices = persistentSetOf( val devices = persistentSetOf(
*FrontLights.all.toTypedArray(), *FrontLights.all.toTypedArray(),
spotLeft, Spots.left,
spotRight, Spots.right,
*Tops.both.toTypedArray(), *Tops.both.toTypedArray(),
*Washs.both.toTypedArray(), *Washs.both.toTypedArray(),
*BlinderBars.all.toTypedArray(), *BlinderBars.all.toTypedArray(),

View file

@ -11,13 +11,6 @@ import de.moritzruth.theaterdsl.value.degrees
import de.moritzruth.theaterdsl.value.percent import de.moritzruth.theaterdsl.value.percent
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentSetOf import kotlinx.collections.immutable.persistentSetOf
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlin.random.Random
import kotlin.time.Duration
import kotlin.time.Duration.Companion.milliseconds
class StairvilleClb4(override val firstChannel: DmxAddress) : Device { class StairvilleClb4(override val firstChannel: DmxAddress) : Device {
override val numberOfChannels: UInt = 14u override val numberOfChannels: UInt = 14u
@ -65,44 +58,4 @@ class StairvilleClb4(override val firstChannel: DmxAddress) : Device {
strobeSpeed, strobeSpeed,
*colors.toTypedArray() *colors.toTypedArray()
) )
private val classroomColor = Color(40.degrees, saturation = 90.percent, brightness = 100.percent)
fun fadeColorsToClassroomFromDarkness(duration: Duration) {
sidelight.colors.forEach { it.static(classroomColor.copy(brightness = 0.percent)) }
fadeColorsToClassroom(duration)
}
fun fadeColorsToClassroom(duration: Duration) {
sidelight.color1.fade(color1.getCurrentValue().copy(brightness = 0.percent), duration)
sidelight.color2.fade(classroomColor, duration = duration)
sidelight.color3.fade(classroomColor, duration = duration)
sidelight.color4.fade(classroomColor, duration = duration)
}
fun CoroutineScope.moveColorsPinkAndBlue() {
val pink = Color(320.degrees)
val blue = Color(220.degrees)
colors.forEachIndexed { index, color ->
launch {
if (index % 2 == 0) {
val duration = Random.nextInt(500, 3000).milliseconds
color.fade(blue, duration)
delay(duration)
}
while (isActive) {
val firstDuration = Random.nextInt(500, 3000).milliseconds
color.fade(pink, firstDuration)
delay(firstDuration)
val secondDuration = Random.nextInt(500, 3000).milliseconds
color.fade(blue, secondDuration)
delay(secondDuration)
}
}
}
}
} }

View file

@ -0,0 +1,25 @@
package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.BlinderBars
import de.moritzruth.dracula_musical.device.StairvilleSplb
import de.moritzruth.theaterdsl.show.SceneBuilderContext
import de.moritzruth.theaterdsl.show.StepCue
import de.moritzruth.theaterdsl.value.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songAdelIstGeil() {
// TODO
lightStep(StepCue.MusicStart("Adel ist geil", 2.minutes + 15.seconds)) {
BlinderBars.all {
it.brightness.fade(25.percent, 5.seconds)
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, green
it.presetSpeed.static(40.percent)
}
}
step(StepCue.MusicEnd) {
BlinderBars.all { it.brightness.off(1.seconds) }
}
}

View file

@ -0,0 +1,207 @@
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.percent
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
fun SceneBuilderContext.songIrrenhaus() {
step(StepCue.MusicStart("Irrenhaus", 3.minutes)) {
actors {
+"Dr. Sewart"
// TODO: Expand
+"Die Irren"
}
rightSpotTarget = "Dr. Sewart"
onRun {
Spots.right.brightness.fade(100.percent, 5.seconds)
Washs.both { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent)) }
}
}
lightStep(StepCue.Custom("Musik: Fill-in")) {
Washs.both { it.brightness.fade(100.percent, 2.seconds) }
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, chaotic
it.brightness.fade(30.percent, 2.seconds)
}
Tops.both {
it.startRoomMovement(8.0)
it.prismRotationSpeed.static(0.percent)
it.prismMode.static(FuturelightDmh160.PrismMode.FROST)
it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.Yellow)
}
}
lightStep(StepCue.Text("Dr. Sewart", "Bei uns ist alles scheißegal", "während letzter 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.brightness.fade(100.percent, 2.seconds)
}
lightStep(StepCue.Text("Alle", "Hurra", "letzte Silbe")) {
FrontLights.all { it.brightness.off() }
Spots.right.brightness.off()
}
lightStep(StepCue.Custom("Nächster Beat")) {
FrontLights.all { it.brightness.pulseOnce(0.seconds, 0.5.seconds, peak = 100.percent, end = 60.percent) }
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent) }
BlinderBars.all {
it.preset.static(null)
it.white.static(100.percent)
it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent)
}
}
lightStep(StepCue.Text("Alle", "Wir sind bescheuert!", "Ende")) {
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, chaotic
it.brightness.fade(40.percent, 1.seconds)
}
Washs.both { it.brightness.fade(100.percent, 1.seconds) }
backlightBar.brightness.fade(50.percent, 1.seconds)
}
lightStep(StepCue.Custom("Strophe")) {
Spots.right.brightness.fade(100.percent, 1.seconds)
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // flowy, chaotic
it.brightness.fade(25.percent, 1.seconds)
}
}
lightStep(StepCue.Text("Dr. Sewart", "Wir wissen, wie das geht", "während letzter Silbe")) {
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
Washs.both {
it.strobeSpeed.static(60.percent)
it.brightness.off(3.seconds)
}
backlightBar.strobeSpeed.static(60.percent)
backlightBar.brightness.fade(100.percent, 2.seconds)
BlinderBars.all {
it.presetSpeed.static(80.percent)
it.brightness.off(3.seconds)
}
}
lightStep(StepCue.Text("Alle", "Hurra", "letzte Silbe")) {
FrontLights.all { it.brightness.off() }
}
lightStep(StepCue.Custom("Nächster Beat")) {
FrontLights.all { it.brightness.pulseOnce(0.seconds, 0.5.seconds, peak = 100.percent, end = 60.percent) }
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent) }
BlinderBars.all {
it.preset.static(null)
it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent)
}
}
lightStep(StepCue.Text("Alle", "Wir sind bescheuert!", "Ende")) {
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, chaotic
it.brightness.fade(40.percent, 1.seconds)
}
Washs.both { it.brightness.fade(100.percent, 1.seconds) }
backlightBar.brightness.fade(50.percent, 1.seconds)
}
lightStep(StepCue.Custom("Strophe")) {
Spots.right.brightness.fade(100.percent, 1.seconds)
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // flowy, chaotic
it.brightness.fade(25.percent, 1.seconds)
}
}
lightStep(StepCue.Text("Dr. Sewart", "Wir warten schon auf dich!", "während letzter Silbe")) {
FrontLights.all { it.brightness.fade(100.percent, 2.seconds) }
Washs.both {
it.strobeSpeed.static(60.percent)
it.brightness.off(3.seconds)
}
backlightBar.strobeSpeed.static(60.percent)
backlightBar.brightness.fade(100.percent, 2.seconds)
BlinderBars.all {
it.presetSpeed.static(80.percent)
it.brightness.off(3.seconds)
}
}
lightStep(StepCue.Text("Alle", "Hurra", "letzte Silbe")) {
FrontLights.all { it.brightness.off() }
backlightBar.strobeSpeed.off()
}
lightStep(StepCue.Custom("Nächster Beat")) {
FrontLights.all { it.brightness.pulseOnce(0.seconds, 0.5.seconds, peak = 100.percent, end = 60.percent) }
Tops.both { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent) }
BlinderBars.all {
it.preset.static(null)
it.brightness.pulseOnce(0.1.seconds, 0.5.seconds, 100.percent)
}
}
lightStep(StepCue.Text("Alle", "Wir sind bescheuert!", "Ende")) {
BlinderBars.all {
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, chaotic
it.brightness.fade(40.percent, 1.seconds)
}
Washs.both { it.brightness.fade(100.percent, 1.seconds) }
backlightBar.brightness.fade(50.percent, 1.seconds)
Tops.both {
it.pointAtStageMiddleSingleCenterMarking()
}
}
lightStep(StepCue.Text("Alle", "Gott sei Dank!")) {
Washs.both {
it.brightness.off(0.5.seconds)
it.pointAtAudience()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite)
}
}
lightStep(StepCue.Custom("Schlussschlag")) {
FrontLights.all { it.brightness.static(100.percent) }
Tops.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent) }
Washs.both { it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent) }
BlinderBars.all {
it.preset.static(null)
it.color.static(Color.WHITE)
it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent)
}
}
step(StepCue.MusicEnd) {
rightSpotTarget = null
onRun {
FrontLights.all { it.brightness.fade(40.percent, 5.seconds) }
Spots.right.brightness.off(5.seconds)
}
}
}

View file

@ -0,0 +1,7 @@
package de.moritzruth.dracula_musical.song
import de.moritzruth.theaterdsl.show.SceneBuilderContext
fun SceneBuilderContext.songLucy() {
}

View file

@ -0,0 +1,291 @@
package de.moritzruth.dracula_musical.song
import de.moritzruth.dracula_musical.device.*
import de.moritzruth.theaterdsl.show.CurtainState
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.songMittsommernacht() {
step(StepCue.MusicStart("Mittsommernacht", 4.minutes + 30.seconds)) {
actors {
+"Mina"
+"Lucy"
+"Jonathan"
// TODO: Expand
+"Einwohner von Huntington"
}
curtainState = CurtainState.OPEN
onRun {
FrontLights.all {
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(12.seconds)
Washs.both {
it.brightness.pulseOnce(2.seconds, 5.seconds, 100.percent)
it.beamAngle.fade(0.percent, 2.seconds)
it.pointAtCeiling(6.seconds)
}
BlinderBars.all {
it.white.static(100.percent)
it.brightness.pulseOnce(3.seconds, 5.seconds, 75.percent)
}
}
}
lightStep(StepCue.Custom("Schlagzeug-Pattern wechselt")) {
BlinderBars.all {
it.brightness.fade(25.percent, 1.seconds)
it.white.static(0.percent)
it.presetSpeed.static(20.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // flowy, warm
}
}
lightStep(StepCue.Custom("Strophe beginnt")) {
Tops.both {
it.brightness.off(2.seconds)
}
BlinderBars.all {
it.presetSpeed.static(50.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // jumpy, warm
}
}
// TODO: Fix speaker
step(StepCue.Text("Girl 1", "Hilfe, das Kuschel-Monster!", "Anfang")) {
rightSpotTarget = "verängstigte Mädchen (Mitte der Bühne)"
onRun {
Spots.right.brightness.static(100.percent)
FrontLights.all {
it.brightness.static(25.percent)
}
backlightBar.color.fadeRandomAround(0.degrees, 5.degrees, 2.seconds)
backlightBar.brightness.fade(50.percent, 1.seconds)
BlinderBars.all {
it.brightness.off(1.seconds)
it.presetSpeed.static(5.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // back-and-forth
}
}
}
// TODO: Fix speaker
step(StepCue.Text("Girls", "Bitte tut uns nichts!", "Ende")) {
rightSpotTarget = null
onRun {
Spots.right.brightness.off(2.seconds)
FrontLights.all {
it.brightness.fade(100.percent, 8.seconds)
}
backlightBar.brightness.off(6.seconds)
}
}
lightStep(StepCue.Custom("Refrain beginnt")) {
BlinderBars.all {
it.brightness.fade(25.percent, 1.seconds)
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 {
it.pointAtStageCenter()
it.beamAngle.static(100.percent)
}
}
lightStep(StepCue.Text("Alle", "Heute ist die Mittsommer…", "letzte Silbe")) {
BlinderBars.all {
it.brightness.fade(start = 40.percent, end = 0.percent, duration = 5.seconds)
it.white.static(100.percent)
it.preset.static(null)
}
backlightBar.color.static(Color(hue = 40.degrees, saturation = 50.percent))
Washs.both { it.brightness.static(100.percent) }
}
step(StepCue.Custom("Musik: 1. Hit")) {
actors {
+"Dracula"
// TODO: Expand
+"Vampirgirls"
}
onRun {
FrontLights.all { it.brightness.off() }
}
}
lightStep(StepCue.Custom("Musik: 2. Hit")) {
backlightBar.brightness.off(0.5.seconds)
}
lightStep(StepCue.Custom("Musik: 3. Hit")) {
Washs.both { it.brightness.off(0.5.seconds) }
}
lightStep(StepCue.Custom("Musik: 4. Hit")) {
BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 0.3.seconds, 100.percent) }
Washs.both {
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.Red)
}
}
lightStep(StepCue.Custom("Musik: 5. Hit")) {
BlinderBars.all {
it.white.off()
it.color.static(Color(hue = 345.degrees))
it.brightness.pulseOnce(0.1.seconds, 2.seconds, 100.percent)
}
backlightBar.color.static(Color(hue = 240.degrees))
backlightBar.brightness.fade(75.percent, 3.seconds)
Washs.both { it.brightness.fade(100.percent, 3.seconds) }
}
step(StepCue.Text("Vampirgirls", "Süße Damen")) {
leftSpotTarget = "Vampirgirls (sprunghaft hin und her)"
rightSpotTarget = "Vampirgirls (sprunghaft hin und her)"
onRun {
Spots.left.brightness.static(50.percent)
Spots.right.brightness.static(50.percent)
BlinderBars.all {
it.color.reset()
it.brightness.fade(25.percent, 1.seconds)
it.preset.static(StairvilleSplb.Preset.STUB) // chase, red
it.presetSpeed.static(80.percent)
}
}
}
step(StepCue.Text("Vampirgirls", "Wir warten auf euch", "Anfang")) {
rightSpotTarget = null
onRun {
Spots.right.brightness.off(3.seconds)
Washs.both { it.brightness.off(2.seconds) }
BlinderBars.all {
it.presetSpeed.fade(5.percent, 2.seconds)
it.brightness.fade(60.percent, 10.seconds)
}
}
}
step(StepCue.Text("Vampirgirls", "Schloss Dracula", "Anfang")) {
onRun {
Spots.left.brightness.fade(100.percent, 3.seconds)
backlightBar.brightness.fade(100.percent, 3.seconds)
Washs.both {
it.pointAtAudience()
it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite)
}
}
}
step(StepCue.Text("Vampirgirls", "Schloss Dracula", "Ende")) {
actors {
-"Dracula"
-"Vampirgirls"
}
leftSpotTarget = null
onRun {
Spots.left.brightness.off()
backlightBar.brightness.off(1.seconds)
BlinderBars.all { it.brightness.off(1.seconds) }
}
}
lightStep(StepCue.Custom("Die Bewohner entfreezen")) {
FrontLights.all { it.brightness.fade(100.percent, 1.seconds) }
Tops.both { it.brightness.fade(100.percent, 2.seconds) }
backlightBar.brightness.fade(75.percent, 2.seconds)
backlightBar.color.cycle(12.seconds)
Washs.both {
it.brightness.pulseOnce(2.seconds, 5.seconds, 100.percent)
it.beamAngle.fade(0.percent, 2.seconds)
it.pointAtCeiling(6.seconds)
}
BlinderBars.all {
it.brightness.fade(30.percent, 3.seconds)
it.presetSpeed.static(20.percent)
it.preset.static(StairvilleSplb.Preset.STUB) // flowy, warm
}
}
lightStep(StepCue.Text("Alle", "In der Mittsommernacht!", "Anfang")) {
Tops.both { it.brightness.off(3.seconds) }
backlightBar.brightness.off(3.seconds)
BlinderBars.all { it.brightness.off(3.seconds) }
}
lightStep(StepCue.Custom("Musik: 1. Hit")) {
backlightBar.color.static(Color(hue = 40.degrees))
backlightBar.brightness.fade(100.percent, 0.2.seconds)
Washs.both { it.brightness.fade(100.percent, 0.2.seconds) }
}
lightStep(StepCue.Custom("Musik: 2. Hit")) {
BlinderBars.all {
it.white.static(100.percent)
it.preset.static(null)
it.brightness.pulseOnce(0.2.seconds, 2.seconds, 100.percent)
}
backlightBar.brightness.off(3.seconds)
Washs.both { it.brightness.off(3.seconds) }
}
step(StepCue.MusicEnd) {
actors {
-"Einwohner von Huntington"
}
onRun {
FrontLights.all { it.brightness.fade(50.percent, 3.seconds) }
}
}
}

View file

@ -150,8 +150,8 @@ abstract class DoubleDV<T>(private val initialStaticValue: Double) : DynamicValu
steps(persistentListOf(a, b), interval, startIndex) steps(persistentListOf(a, b), interval, startIndex)
} }
fun pulseOnce(rampUpDuration: Duration, rampDownDuration: Duration, peakValue: T = maximumValue, end: T = minimumValue, start: T = getCurrentValue()) { fun pulseOnce(rampUpDuration: Duration, rampDownDuration: Duration, peak: T = maximumValue, end: T = minimumValue, start: T = getCurrentValue()) {
state = State.PulseOnce(rampUpDuration, rampDownDuration, fromDomain(peakValue), fromDomain(start), fromDomain(end)) state = State.PulseOnce(rampUpDuration, rampDownDuration, fromDomain(peak), fromDomain(start), fromDomain(end))
} }
} }
@ -198,9 +198,7 @@ class ColorDV(private val initialStaticValue: Color = Color.WHITE) : DynamicValu
val deltaBrightness = end.brightness.value - start.brightness.value val deltaBrightness = end.brightness.value - start.brightness.value
} }
data class Cycle(val start: Color, val interval: Duration) : State { data class Cycle(val start: Color, val interval: Duration) : State
}
data class FadeRandomAround(val hue: Angle, val deviation: Angle, val interval: Duration) : State data class FadeRandomAround(val hue: Angle, val deviation: Angle, val interval: Duration) : State
} }

View file

@ -8,7 +8,7 @@
<div class="w-4/7 flex flex-col space-y-4"> <div class="w-4/7 flex flex-col space-y-4">
<StageTopDownView class="h-full"/> <StageTopDownView class="h-full"/>
<MessageDisplay class="h-30"/> <MessageDisplay class="h-30"/>
</div>vue </div>
</div> </div>
<MusicProgressBar class="h-15"/> <MusicProgressBar class="h-15"/>
</div> </div>