commit 61
This commit is contained in:
parent
7f33c42a1d
commit
84cc9ea2bc
10 changed files with 666 additions and 93 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,5 +2,6 @@ build/
|
||||||
/.gradle/
|
/.gradle/
|
||||||
/run/
|
/run/
|
||||||
|
|
||||||
|
/.kotlin/
|
||||||
/.idea/
|
/.idea/
|
||||||
/src/main/resources/ui/*
|
/src/main/resources/ui/*
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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(),
|
||||||
|
|
|
@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -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) }
|
||||||
|
}
|
||||||
|
}
|
207
src/main/kotlin/de/moritzruth/dracula_musical/song/Irrenhaus.kt
Normal file
207
src/main/kotlin/de/moritzruth/dracula_musical/song/Irrenhaus.kt
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package de.moritzruth.dracula_musical.song
|
||||||
|
|
||||||
|
import de.moritzruth.theaterdsl.show.SceneBuilderContext
|
||||||
|
|
||||||
|
fun SceneBuilderContext.songLucy() {
|
||||||
|
|
||||||
|
}
|
|
@ -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) }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Add table
Reference in a new issue