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/
|
||||
/run/
|
||||
|
||||
/.kotlin/
|
||||
/.idea/
|
||||
/src/main/resources/ui/*
|
||||
|
|
|
@ -1,9 +1,16 @@
|
|||
package de.moritzruth.dracula_musical.act
|
||||
|
||||
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.PropPosition
|
||||
import de.moritzruth.theaterdsl.show.ShowBuilderContext
|
||||
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.seconds
|
||||
|
||||
|
@ -15,7 +22,7 @@ fun ShowBuilderContext.act1() = act("Erster Akt") {
|
|||
Washs.both {
|
||||
it.pointAtAudience()
|
||||
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"
|
||||
|
||||
onRun {
|
||||
spotRight.brightness.fade(100.percent, 2.seconds)
|
||||
Spots.right.brightness.fade(100.percent, 2.seconds)
|
||||
}
|
||||
}
|
||||
|
||||
step(StepCue.Text("Erzähler", "Der Mittsommernacht.")) {
|
||||
actors {
|
||||
-"Erzähler"
|
||||
}
|
||||
|
||||
rightSpotTarget = null
|
||||
|
||||
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 {
|
||||
// TODO: Expand
|
||||
+"Einwohner von Huntington"
|
||||
+"Renfield"
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
onRun {
|
||||
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(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)
|
||||
}
|
||||
FrontLights.all { it.brightness.fade(40.percent, 6.seconds) }
|
||||
sidelight.brightness.fade(100.percent, 6.seconds)
|
||||
sidelight.colors.forEach { it.static(Color(hue = 180.degrees, saturation = 10.percent)) }
|
||||
backlightBar.brightness.fade(50.percent, 6.seconds)
|
||||
backlightBar.color.static(Color(hue = 280.degrees, saturation = 50.percent))
|
||||
}
|
||||
}
|
||||
|
||||
lightStep(StepCue.Custom("Schlagzeug-Pattern wechselt")) {
|
||||
BlinderBars.all {
|
||||
it.white.static(0.percent)
|
||||
it.presetSpeed.static(20.percent)
|
||||
it.preset.static(StairvilleSplb.Preset.STUB)
|
||||
step(StepCue.Text("Mrs. Ascot", "Da kommt der Rest der Familie!")) {
|
||||
actors {
|
||||
+"Oberschwester"
|
||||
// TODO: Expand
|
||||
+"Pflegeteam"
|
||||
}
|
||||
}
|
||||
|
||||
lightStep(StepCue.Custom("Strophe beginnt")) {
|
||||
BlinderBars.all {
|
||||
it.presetSpeed.static(50.percent)
|
||||
it.preset.static(StairvilleSplb.Preset.STUB)
|
||||
songIrrenhaus()
|
||||
|
||||
step(StepCue.Text("Oberschwester", "Sonst kriegst du sie als Zäpfchen!")) {
|
||||
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 spotLeft = SimpleDimmer(DmxAddress(10u))
|
||||
val spotRight = SimpleDimmer(DmxAddress(11u))
|
||||
object Spots {
|
||||
val left = SimpleDimmer(DmxAddress(10u))
|
||||
val right = SimpleDimmer(DmxAddress(11u))
|
||||
}
|
||||
|
||||
object Tops {
|
||||
val left = FuturelightDmh160(DmxAddress(37u), false)
|
||||
|
@ -39,8 +41,8 @@ val fogMachine = AdjFogFury3000(DmxAddress(117u))
|
|||
|
||||
val devices = persistentSetOf(
|
||||
*FrontLights.all.toTypedArray(),
|
||||
spotLeft,
|
||||
spotRight,
|
||||
Spots.left,
|
||||
Spots.right,
|
||||
*Tops.both.toTypedArray(),
|
||||
*Washs.both.toTypedArray(),
|
||||
*BlinderBars.all.toTypedArray(),
|
||||
|
|
|
@ -11,13 +11,6 @@ import de.moritzruth.theaterdsl.value.degrees
|
|||
import de.moritzruth.theaterdsl.value.percent
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
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 {
|
||||
override val numberOfChannels: UInt = 14u
|
||||
|
@ -65,44 +58,4 @@ class StairvilleClb4(override val firstChannel: DmxAddress) : Device {
|
|||
strobeSpeed,
|
||||
*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)
|
||||
}
|
||||
|
||||
fun pulseOnce(rampUpDuration: Duration, rampDownDuration: Duration, peakValue: T = maximumValue, end: T = minimumValue, start: T = getCurrentValue()) {
|
||||
state = State.PulseOnce(rampUpDuration, rampDownDuration, fromDomain(peakValue), fromDomain(start), fromDomain(end))
|
||||
fun pulseOnce(rampUpDuration: Duration, rampDownDuration: Duration, peak: T = maximumValue, end: T = minimumValue, start: T = getCurrentValue()) {
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<div class="w-4/7 flex flex-col space-y-4">
|
||||
<StageTopDownView class="h-full"/>
|
||||
<MessageDisplay class="h-30"/>
|
||||
</div>vue
|
||||
</div>
|
||||
</div>
|
||||
<MusicProgressBar class="h-15"/>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Reference in a new issue