From c8c4b6e175cad01c1d34a10f8d4f307d7f99a44f Mon Sep 17 00:00:00 2001 From: Moritz Ruth Date: Tue, 13 Jun 2023 18:10:57 +0200 Subject: [PATCH] commit #31 --- .../de/moritzruth/lampenfieber/Props.kt | 61 +++++ .../de/moritzruth/lampenfieber/act/First.kt | 14 +- .../de/moritzruth/lampenfieber/act/Fourth.kt | 256 ++---------------- .../de/moritzruth/lampenfieber/act/Second.kt | 2 + .../de/moritzruth/lampenfieber/act/Third.kt | 159 ++--------- .../de/moritzruth/lampenfieber/song/Richy.kt | 149 ++++++++++ .../lampenfieber/song/RopeSkippingTanz.kt | 153 +++++++++++ .../lampenfieber/song/SchauMichMit.kt | 121 +++++++++ 8 files changed, 524 insertions(+), 391 deletions(-) create mode 100644 src/main/kotlin/de/moritzruth/lampenfieber/Props.kt create mode 100644 src/main/kotlin/de/moritzruth/lampenfieber/song/Richy.kt create mode 100644 src/main/kotlin/de/moritzruth/lampenfieber/song/RopeSkippingTanz.kt create mode 100644 src/main/kotlin/de/moritzruth/lampenfieber/song/SchauMichMit.kt diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/Props.kt b/src/main/kotlin/de/moritzruth/lampenfieber/Props.kt new file mode 100644 index 0000000..9d49c04 --- /dev/null +++ b/src/main/kotlin/de/moritzruth/lampenfieber/Props.kt @@ -0,0 +1,61 @@ +package de.moritzruth.lampenfieber + +import de.moritzruth.theaterdsl.show.PropPosition +import de.moritzruth.theaterdsl.show.PropsBuilderMap + +object PropConfigurations { + fun empty(props: PropsBuilderMap) { + PropPosition.values().forEach { + props[it] = null + } + } + + fun classroom(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "grüne + bemalte + grüne Rückwand" + props[PropPosition.LEFT] = "7 Stühle" + props[PropPosition.RIGHT] = "7 Stühle, Plakat" + props[PropPosition.PROSCENIUM_LEFT] = "E-Piano mit Stuhl" + } + + fun tvRoom(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "2 schwarze Wände" + props[PropPosition.RIGHT] = "Sofa" + } + + fun casting(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "grüne Wand" + props[PropPosition.LEFT] = "grüne Wand" + props[PropPosition.CENTER] = "Casting-Schild" + props[PropPosition.RIGHT] = "schwarze Wand" + props[PropPosition.PROSCENIUM_LEFT] = "E-Piano mit Stuhl" + } + + fun calling(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "schwarze Wand" + props[PropPosition.LEFT] = "grüne Wand, Stuhl bei Markierung" + props[PropPosition.RIGHT] = "grüne Wand, Stuhl bei Markierung" + } + + fun bathroom(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "Duschvorhang + Toilette + Toilette + Duschvorhang" + props[PropPosition.LEFT] = "Waschbecken, Hocker, Spiegel" + props[PropPosition.RIGHT] = "Waschbecken, Hocker, Spiegel" + } + + fun richy(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "2 blaue Wände" + props[PropPosition.LEFT] = "3 Stühle" + props[PropPosition.RIGHT] = "2 Stühle" + } + + fun backstage(props: PropsBuilderMap) { + empty(props) + props[PropPosition.BACKDROP] = "grüne + schwarze + grüne Rückwand" + } +} diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/act/First.kt b/src/main/kotlin/de/moritzruth/lampenfieber/act/First.kt index 9f0c883..d750489 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/act/First.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/act/First.kt @@ -1,8 +1,8 @@ package de.moritzruth.lampenfieber.act +import de.moritzruth.lampenfieber.PropConfigurations import de.moritzruth.lampenfieber.device.* 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 @@ -18,9 +18,7 @@ fun ShowBuilderContext.firstAct() = act("Erster Akt") { @Suppress("DuplicatedCode") scene("Intro") { step(StepCue.MusicStart("Lampenfieber", 5.minutes + 30.seconds)) { - props { - it[PropPosition.BACKDROP] = "Klassenraum" - } + props(PropConfigurations::classroom) onRun { Washs.both.forEach { @@ -36,7 +34,6 @@ fun ShowBuilderContext.firstAct() = act("Erster Akt") { Tops.both.forEach { it.startRoomMovement(5.5) } } - @Suppress("DuplicatedCode") lightStep(StepCue.Custom("Gitarren-Ton")) { launch { delay(500) @@ -144,7 +141,6 @@ fun ShowBuilderContext.firstAct() = act("Erster Akt") { } onRun { - // Nebel, rot-orange faden FrontLights.center.forEach { it.brightness.fade(20.percent, 10.seconds) } bar.brightness.fade(50.percent, 10.seconds) @@ -177,8 +173,6 @@ fun ShowBuilderContext.firstAct() = act("Erster Akt") { } step(StepCue.MusicEnd) { - curtainState = CurtainState.CLOSED - actors { -"Richy" -"Christine" @@ -193,10 +187,6 @@ fun ShowBuilderContext.firstAct() = act("Erster Akt") { scene("Szene 2") { step(StepCue.Light(StepCue.Light.State.OFF, false)) { - props { - it[PropPosition.LEFT] = "Klavier mit Hocker" - } - actors { +"David / sitzt am Klavier" +"Klavierlehrerin / steht neben David" diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt b/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt index c4bf760..9b42749 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt @@ -1,8 +1,10 @@ package de.moritzruth.lampenfieber.act +import de.moritzruth.lampenfieber.PropConfigurations import de.moritzruth.lampenfieber.device.* +import de.moritzruth.lampenfieber.song.songRichy +import de.moritzruth.lampenfieber.song.songSchauMichMit 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 @@ -84,109 +86,7 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { } } - step(StepCue.MusicStart("Schau mich mit anderen Augen an", 10.minutes)) { - actors { - -"Bianca / nach rechts" - } - - onRun { - spotLeft.brightness.off(5.seconds) - spotRight.brightness.off(5.seconds) - - sideLight.moveColorsPinkAndBlue() - - Washs.left.brightness.switch(0.percent, 100.percent, 1.seconds, false) - Washs.right.brightness.switch(100.percent, 0.percent, 1.seconds, false) - - Tops.both { it.brightness.fade(100.percent, 1.seconds) } - } - } - - lightStep(StepCue.Custom("Bridge")) { - bar.color.static(Color(50.degrees)) - bar.brightness.fade(100.percent, 200.milliseconds) - - sideLight.colors.forEach { it.fade(Color(50.degrees), 100.milliseconds) } - - Washs.both { it.brightness.off() } - Tops.both { it.startRoomMovement(2.0) } - } - - lightStep(StepCue.Custom("Refrain")) { - bar.color.fadeRandomAround(50.degrees, 10.degrees, 2.seconds) - bar.brightness.fade(100.percent, 200.milliseconds) - - Tops.both { it.brightness.sine(8.seconds, minimum = 50.percent) } - - sideLight.colors.forEach { - launch { - val downDuration = 1000.milliseconds - val upDuration = 400.milliseconds - - while (isActive) { - delay(Random.nextInt(0, 3000).milliseconds) - - it.fade(Color(50.degrees, brightness = 0.percent), downDuration) - delay(downDuration) - - it.fade(Color(50.degrees, brightness = 100.percent), upDuration) - delay(upDuration) - } - } - } - } - - lightStep(StepCue.Custom("Strophe (mit dem ersten Wort)")) { - val interval = 800.milliseconds - - bar.brightness.switch(0.percent, 100.percent, interval, false) - - sideLight.brightness.switch(100.percent, 0.percent, interval, false) - sideLight.colors.forEach { it.static(Color(60.degrees, saturation = 10.percent)) } - - Washs.both { it.strobeSpeed.static(80.percent) } - Tops.both { it.brightness.off(200.milliseconds) } - } - - // 3:06 - lightStep(StepCue.Custom("Pause nach »rotiere«")) { - bar.brightness.off(500.milliseconds) - sideLight.brightness.off(500.milliseconds) - } - - lightStep(StepCue.Custom("Refrain")) { - sideLight.moveColorsPinkAndBlue() - sideLight.brightness.static(100.percent) - - Washs.both { it.brightness.static(100.percent) } - Tops.both { - it.startRoomMovement(8.0) - it.brightness.static(100.percent) - } - } - - step(StepCue.MusicEnd) { - actors { - -"Tina / nach links" - -"Sandra / nach rechts" - } - - onRun { - sideLight.brightness.off(500.milliseconds) - - Washs.both { - it.brightness.off(500.milliseconds) - it.strobeSpeed.off() - it.cyan.off() - it.magenta.off() - } - - Tops.both { - it.pointAtStageMiddleSingleCenterMarking() - it.brightness.off(500.milliseconds) - } - } - } + songSchauMichMit() // Schau-mich-an-Tanz entfällt } @@ -197,6 +97,8 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { } step(StepCue.Curtain(CurtainState.CLOSED, false)) { + props(PropConfigurations::richy) + actors { +"Tina / von der linken Treppe" +"Sandra / von der rechten Treppe" @@ -313,20 +215,16 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { spotRight.brightness.fade(25.percent, 10.seconds) Washs.both.forEach { it.brightness.fade(75.percent, 15.seconds) } - } - lightStep(StepCue.Custom("Nach etwa einer Minute")) { - Washs.both.forEach { it.brightness.fade(100.percent, 20.seconds) } + launch { + delay(1.minutes) + Washs.both.forEach { it.brightness.fade(100.percent, 20.seconds) } + } } } scene("Szene 5") { step(StepCue.MusicEnd) { - props { - it[PropPosition.LEFT] = "Zwei Stühle" - it[PropPosition.RIGHT] = "Zwei Stühle" - } - actors { +"Richy" +"Sandra" @@ -346,137 +244,13 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { } } - step(StepCue.MusicStart("Richy", 3.minutes)) { - onRun { - Washs.both { - it.magenta.static(0.percent) - it.pointAtCeiling() - it.beamAngle.fade(100.percent, 20.seconds, start = 0.percent) - it.brightness.fade(100.percent, 10.seconds) - } - - FrontLights.all { it.brightness.fade(0.percent, 30.seconds) } - } - } - - lightStep(StepCue.Text("Mädchen", "Ach, ist es nicht fürchterlich")) { - Washs.both.forEach { - it.pointAtGuests() - it.brightness.off(1.seconds) - } - } - - // 0:40 - lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { - Washs.both.forEach { - it.brightness.static(100.percent) - it.strobeSpeed.static(50.percent) - } - } - - lightStep(StepCue.Custom("Nächster Takt-Anfang")) { - Washs.both.forEach { - it.strobeSpeed.static(0.percent) - it.pointAtCeiling() - } - - Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) - Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) - } - - // 1:00 - lightStep(StepCue.Custom("Crash-Becken")) { - Washs.both.forEach { it.brightness.off(200.milliseconds) } - } - - lightStep(StepCue.Custom("+2 Takte")) { - bar.brightness.sine(4.seconds, 20.percent, 50.percent) - bar.color.static(Color(40.degrees, 25.percent)) - - Washs.both { - it.brightness.fade(100.percent, 200.milliseconds) - it.beamAngle.sine(4.seconds, start = 100.percent) - } - } - - // 1:24 - lightStep(StepCue.Custom("Crash-Becken")) { - Washs.both { it.brightness.off(200.seconds) } - } - - lightStep(StepCue.Custom("+1 Takt")) { - Washs.both { - it.pointAtGuests() - it.beamAngle.fade(100.percent, 500.milliseconds) - it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) - } - } - - lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { - Washs.both { - it.brightness.static(100.percent) - it.strobeSpeed.static(50.percent) - } - } - - // 1:28 - lightStep(StepCue.Custom("Nächster Takt-Anfang")) { - Washs.both { - it.brightness.pulseOnce(200.milliseconds, 1.seconds) - it.strobeSpeed.static(0.percent) - } - - bar.brightness.pulseOnce(200.milliseconds, 1.seconds) - } - - // 1:51 - lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { - Washs.both { - it.brightness.static(100.percent) - it.strobeSpeed.static(50.percent) - } - } - - lightStep(StepCue.Custom("Nächster Takt-Anfang")) { - Washs.both { - it.strobeSpeed.static(0.percent) - it.pointAtCeiling() - } - - Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) - Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) - } - - lightStep(StepCue.Custom("Hi-Hat-Kuppe wird malträtiert")) { - bar.brightness.sine(2.seconds, 20.percent, 50.percent) - } - - lightStep(StepCue.Custom("Breakdown am Ende")) { - bar.brightness.fade(100.percent, 200.milliseconds) - bar.color.fade(Color(0.degrees), 200.milliseconds) - - FrontLights.all { it.brightness.off() } - Washs.both { it.brightness.off(200.milliseconds) } - - launch { - delay(200) - Washs.both { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) } - } - } - - step(StepCue.Custom("Schlussschlag")) { - curtainState = CurtainState.CLOSED - - onRun { - bar.brightness.pulseOnce(200.milliseconds, 1.seconds) - FrontLights.all { it.brightness.pulseOnce(0.milliseconds, 3.seconds) } - Washs.both { it.brightness.pulseOnce(0.milliseconds, 1.seconds) } - } - } + songRichy() } scene("Szene 6") { step(StepCue.MusicEnd) { + props(PropConfigurations::classroom) + actors { -"Richy" -"Sandra" @@ -484,6 +258,8 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { -"Eva" } + curtainState = CurtainState.CLOSED + rightSpotTarget = "Paula & David (rechts)" onRun { @@ -597,6 +373,8 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { } step(StepCue.MusicEnd) { + props(PropConfigurations::backstage) + actors { -"Paula" -"David" diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/act/Second.kt b/src/main/kotlin/de/moritzruth/lampenfieber/act/Second.kt index e9081af..e9f8e24 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/act/Second.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/act/Second.kt @@ -1,5 +1,6 @@ package de.moritzruth.lampenfieber.act +import de.moritzruth.lampenfieber.PropConfigurations import de.moritzruth.lampenfieber.device.* import de.moritzruth.theaterdsl.show.CurtainState import de.moritzruth.theaterdsl.show.ShowBuilderContext @@ -16,6 +17,7 @@ import kotlin.time.Duration.Companion.seconds fun ShowBuilderContext.secondAct() = act("Zweiter Akt") { scene("Szene 1") { step(StepCue.MusicStart("Umbaumusik", 10.minutes)) { + props(PropConfigurations::tvRoom) } } diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/act/Third.kt b/src/main/kotlin/de/moritzruth/lampenfieber/act/Third.kt index 9675f6d..ac1157a 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/act/Third.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/act/Third.kt @@ -1,15 +1,14 @@ package de.moritzruth.lampenfieber.act +import de.moritzruth.lampenfieber.PropConfigurations import de.moritzruth.lampenfieber.device.* +import de.moritzruth.lampenfieber.song.songRopeSkippingTanz import de.moritzruth.theaterdsl.show.CurtainState 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 kotlinx.coroutines.delay -import kotlinx.coroutines.launch -import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds @@ -17,8 +16,13 @@ import kotlin.time.Duration.Companion.seconds fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { scene("Szene 1") { step(StepCue.Stub) { + // TODO: Alles, was hier passiert. + + props(PropConfigurations::casting) + actors { +"Richy" + +"David" } onRun { @@ -77,7 +81,9 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { } } - step(StepCue.Light(StepCue.Light.State.OFF, false)) { + step(StepCue.Curtain(CurtainState.CLOSED, false)) { + props(PropConfigurations::classroom) + actors { -"David" -"Paula" @@ -92,6 +98,7 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { step(StepCue.MusicStart("Tischballett", 10.minutes)) { actors { +"David" + +"Paula" } curtainState = CurtainState.OPEN @@ -158,6 +165,8 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { scene("Szene 6") { step(StepCue.MusicStart("Umbaumusik", 10.minutes)) { + props(PropConfigurations::calling) + onRun { Tops.both.forEach { it.pointAtStageMiddleOffCenterMarking() @@ -168,14 +177,13 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { step(StepCue.MusicEnd) { actors { - +"Kathi / steht links bei Markierung" - +"Maria / steht rechts bei Markierung" + +"Kathi / sitzt links" + +"Maria / sitzt rechts" } curtainState = CurtainState.OPEN onRun { - // irgendwann kommt Musik Tops.left.brightness.fade(100.percent, 3.seconds) } } @@ -184,138 +192,7 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { Tops.right.brightness.fade(100.percent, 3.seconds) } - step(StepCue.MusicStart("Rope-Skipping-Tanz", 3.minutes)) { - onRun { - Washs.both.forEach { - it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) - it.beamAngle.static(0.percent) - } - } - } - - lightStep(StepCue.Custom("Erster Klavier-Ton")) { - Washs.both.forEach { - it.beamAngle.fade(100.percent, 500.milliseconds) - it.brightness.pulseOnce(200.milliseconds, 1300.milliseconds) - } - } - - lightStep(StepCue.Custom("Nächster Klavier-Ton")) { - Washs.both.forEach { - it.beamAngle.sine(6.seconds) - it.brightness.pulseOnce(100.milliseconds, 500.milliseconds) - } - } - - repeat(10) { - lightStep(StepCue.Custom("Nächster Klavier-Ton")) { - Washs.both.forEach { it.brightness.pulseOnce(100.milliseconds, 500.milliseconds) } - } - } - - lightStep(StepCue.Custom("Nächster Klavier-Ton")) { - Washs.both.forEach { - it.brightness.fade(100.percent, 200.milliseconds) - it.beamAngle.fade(0.percent, 200.milliseconds) - } - } - - lightStep(StepCue.Custom("Nächster Klavier-Ton")) { - Washs.left.beamAngle.sine(2.seconds, start = 0.percent) - Washs.right.beamAngle.sine(2.seconds, start = 100.percent) - } - - lightStep(StepCue.Custom("5× gleicher Klavier-Ton")) { - Washs.both.forEach { - it.pointAtGuests() - it.beamAngle.fade(100.percent, 500.milliseconds) - it.brightness.fade(0.percent, 1.seconds) - } - } - - lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { - Washs.both.forEach { - it.brightness.static(100.percent) - it.strobeSpeed.static(50.percent) - } - } - - lightStep(StepCue.Custom("Nächster Takt-Anfang")) { - Washs.both.forEach { - it.brightness.static(100.percent) - it.strobeSpeed.static(0.percent) - it.pointAtCeiling() - } - - Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) - Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) - } - - lightStep(StepCue.Custom("Crash-Becken, Klavier-Solo")) { - Washs.both.forEach { it.brightness.off(200.milliseconds) } - } - - lightStep(StepCue.Custom("+2 Takte")) { - FrontLights.all.forEach { it.brightness.fade(50.percent, 30.seconds) } - bar.brightness.sine(4.seconds, 20.percent, 50.percent) - bar.color.static(Color(40.degrees, 25.percent)) - - Washs.both.forEach { - it.brightness.fade(100.percent, 200.milliseconds) - it.beamAngle.sine(4.seconds, start = 100.percent) - } - } - - lightStep(StepCue.Custom("Crash-Becken, Klavier-Solo")) { - Washs.both.forEach { it.brightness.fade(0.percent, 200.seconds) } - } - - lightStep(StepCue.Custom("+1 Takt")) { - Washs.both.forEach { - it.pointAtGuests() - it.beamAngle.fade(100.percent, 500.milliseconds) - it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) - } - } - - lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { - Washs.both.forEach { - it.brightness.static(100.percent) - it.strobeSpeed.static(50.percent) - } - } - - lightStep(StepCue.Custom("Nächster Takt-Anfang")) { - Washs.both.forEach { - it.brightness.static(100.percent) - it.strobeSpeed.static(0.percent) - it.pointAtCeiling() - } - - Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) - Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) - } - - lightStep(StepCue.Custom("Hi-Hat-Kuppe wird malträtiert")) { - bar.brightness.sine(2.seconds, 20.percent, 50.percent) - } - - lightStep(StepCue.Custom("Breakdown am Ende")) { - bar.brightness.fade(25.percent, 200.milliseconds) - FrontLights.all.forEach { it.brightness.off() } - Washs.both.forEach { it.brightness.off(200.milliseconds) } - - launch { - delay(200) - Washs.both.forEach { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) } - } - } - - lightStep(StepCue.Custom("Schlussschlag")) { - bar.brightness.pulseOnce(200.milliseconds, 1.seconds) - FrontLights.all.forEach { it.brightness.pulseOnce(0.milliseconds, 1.seconds) } - Washs.both.forEach { it.brightness.pulseOnce(0.milliseconds, 1.seconds) } - } + songRopeSkippingTanz() } scene("Szene 7") { @@ -332,7 +209,7 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { } onRun { - FrontLights.all.forEach { it.brightness.fade(50.percent, 8.seconds) } + FrontLights.all.forEach { it.brightness.fade(75.percent, 8.seconds) } } } } @@ -401,6 +278,8 @@ fun ShowBuilderContext.thirdAct() = act("Dritter Akt") { } step(StepCue.MusicEnd) { + props(PropConfigurations::bathroom) + actors { -"Paula" -"Maria" diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/song/Richy.kt b/src/main/kotlin/de/moritzruth/lampenfieber/song/Richy.kt new file mode 100644 index 0000000..ccba50a --- /dev/null +++ b/src/main/kotlin/de/moritzruth/lampenfieber/song/Richy.kt @@ -0,0 +1,149 @@ +package de.moritzruth.lampenfieber.song + +import de.moritzruth.lampenfieber.device.CoemarProWash +import de.moritzruth.lampenfieber.device.FrontLights +import de.moritzruth.lampenfieber.device.Washs +import de.moritzruth.lampenfieber.device.bar +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 kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.minutes +import kotlin.time.Duration.Companion.seconds + +fun SceneBuilderContext.songRichy() { + step(StepCue.MusicStart("Richy", 3.minutes)) { + onRun { + Washs.both { + it.magenta.static(0.percent) + it.pointAtCeiling() + it.beamAngle.fade(100.percent, 20.seconds, start = 0.percent) + it.brightness.fade(100.percent, 10.seconds) + } + + FrontLights.all { it.brightness.fade(0.percent, 30.seconds) } + } + } + + lightStep(StepCue.Text("Mädchen", "Ach, ist es nicht fürchterlich")) { + Washs.both.forEach { + it.pointAtGuests() + it.brightness.off(1.seconds) + } + } + + // 0:40 + lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { + Washs.both.forEach { + it.brightness.static(100.percent) + it.strobeSpeed.static(50.percent) + } + } + + lightStep(StepCue.Custom("Nächster Takt-Anfang")) { + Washs.both.forEach { + it.strobeSpeed.static(0.percent) + it.pointAtCeiling() + } + + Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) + Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) + } + + // 1:00 + lightStep(StepCue.Custom("Crash-Becken")) { + Washs.both.forEach { it.brightness.off(200.milliseconds) } + } + + lightStep(StepCue.Custom("+2 Takte")) { + bar.brightness.sine(4.seconds, 20.percent, 50.percent) + bar.color.static(Color(40.degrees, 25.percent)) + + Washs.both { + it.brightness.fade(100.percent, 200.milliseconds) + it.beamAngle.sine(4.seconds, start = 100.percent) + } + } + + // 1:24 + lightStep(StepCue.Custom("Crash-Becken")) { + Washs.both { it.brightness.off(200.seconds) } + } + + lightStep(StepCue.Custom("+1 Takt")) { + Washs.both { + it.pointAtGuests() + it.beamAngle.fade(100.percent, 500.milliseconds) + it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) + } + } + + lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { + Washs.both { + it.brightness.static(100.percent) + it.strobeSpeed.static(50.percent) + } + } + + // 1:28 + lightStep(StepCue.Custom("Nächster Takt-Anfang")) { + Washs.both { + it.brightness.pulseOnce(200.milliseconds, 1.seconds) + it.strobeSpeed.static(0.percent) + } + + bar.brightness.pulseOnce(200.milliseconds, 1.seconds) + } + + // 1:51 + lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { + Washs.both { + it.brightness.static(100.percent) + it.strobeSpeed.static(50.percent) + } + } + + lightStep(StepCue.Custom("Nächster Takt-Anfang")) { + Washs.both { + it.strobeSpeed.static(0.percent) + it.pointAtCeiling() + } + + Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) + Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) + } + + lightStep(StepCue.Custom("Hi-Hat-Kuppe wird malträtiert")) { + bar.brightness.sine(2.seconds, 20.percent, 50.percent) + } + + lightStep(StepCue.Custom("Breakdown am Ende")) { + bar.brightness.fade(100.percent, 200.milliseconds) + bar.color.fade(Color(0.degrees), 200.milliseconds) + + FrontLights.all { it.brightness.off() } + Washs.both { it.brightness.off(200.milliseconds) } + + launch { + delay(200) + Washs.both { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) } + } + } + + step(StepCue.Custom("Schlussschlag")) { + curtainState = CurtainState.CLOSED + + onRun { + bar.brightness.pulseOnce(200.milliseconds, 1.seconds) + FrontLights.all { it.brightness.pulseOnce(0.milliseconds, 3.seconds) } + Washs.both { it.brightness.pulseOnce(0.milliseconds, 1.seconds) } + } + } + + // + Ende in der nächsten Szene +} \ No newline at end of file diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/song/RopeSkippingTanz.kt b/src/main/kotlin/de/moritzruth/lampenfieber/song/RopeSkippingTanz.kt new file mode 100644 index 0000000..0d49b6d --- /dev/null +++ b/src/main/kotlin/de/moritzruth/lampenfieber/song/RopeSkippingTanz.kt @@ -0,0 +1,153 @@ +package de.moritzruth.lampenfieber.song + +import de.moritzruth.lampenfieber.device.CoemarProWash +import de.moritzruth.lampenfieber.device.FrontLights +import de.moritzruth.lampenfieber.device.Washs +import de.moritzruth.lampenfieber.device.bar +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 kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.minutes +import kotlin.time.Duration.Companion.seconds + +fun SceneBuilderContext.songRopeSkippingTanz() { + step(StepCue.MusicStart("Rope-Skipping-Tanz", 3.minutes)) { + onRun { + Washs.both.forEach { + it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) + it.beamAngle.static(0.percent) + } + } + } + + lightStep(StepCue.Custom("Erster Klavier-Ton")) { + Washs.both.forEach { + it.beamAngle.fade(100.percent, 500.milliseconds) + it.brightness.pulseOnce(200.milliseconds, 1300.milliseconds) + } + } + + lightStep(StepCue.Custom("Nächster Klavier-Ton")) { + Washs.both.forEach { + it.beamAngle.sine(6.seconds) + it.brightness.pulseOnce(100.milliseconds, 500.milliseconds) + } + } + + repeat(10) { + lightStep(StepCue.Custom("Nächster Klavier-Ton")) { + Washs.both.forEach { it.brightness.pulseOnce(100.milliseconds, 500.milliseconds) } + } + } + + lightStep(StepCue.Custom("Nächster Klavier-Ton")) { + Washs.both.forEach { + it.brightness.fade(100.percent, 200.milliseconds) + it.beamAngle.fade(0.percent, 200.milliseconds) + } + } + + lightStep(StepCue.Custom("Nächster Klavier-Ton")) { + Washs.left.beamAngle.sine(2.seconds, start = 0.percent) + Washs.right.beamAngle.sine(2.seconds, start = 100.percent) + } + + lightStep(StepCue.Custom("5× gleicher Klavier-Ton")) { + Washs.both.forEach { + it.pointAtGuests() + it.beamAngle.fade(100.percent, 500.milliseconds) + it.brightness.fade(0.percent, 1.seconds) + } + } + + lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { + Washs.both.forEach { + it.brightness.static(100.percent) + it.strobeSpeed.static(50.percent) + } + } + + lightStep(StepCue.Custom("Nächster Takt-Anfang")) { + Washs.both.forEach { + it.brightness.static(100.percent) + it.strobeSpeed.static(0.percent) + it.pointAtCeiling() + } + + Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) + Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) + } + + lightStep(StepCue.Custom("Crash-Becken, Klavier-Solo")) { + Washs.both.forEach { it.brightness.off(200.milliseconds) } + } + + lightStep(StepCue.Custom("+2 Takte")) { + FrontLights.all.forEach { it.brightness.fade(50.percent, 30.seconds) } + bar.brightness.sine(4.seconds, 20.percent, 50.percent) + bar.color.static(Color(40.degrees, 25.percent)) + + Washs.both.forEach { + it.brightness.fade(100.percent, 200.milliseconds) + it.beamAngle.sine(4.seconds, start = 100.percent) + } + } + + lightStep(StepCue.Custom("Crash-Becken, Klavier-Solo")) { + Washs.both.forEach { it.brightness.fade(0.percent, 200.seconds) } + } + + lightStep(StepCue.Custom("+1 Takt")) { + Washs.both.forEach { + it.pointAtGuests() + it.beamAngle.fade(100.percent, 500.milliseconds) + it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) + } + } + + lightStep(StepCue.Custom("Schlagzeug-Einsatz")) { + Washs.both.forEach { + it.brightness.static(100.percent) + it.strobeSpeed.static(50.percent) + } + } + + lightStep(StepCue.Custom("Nächster Takt-Anfang")) { + Washs.both.forEach { + it.brightness.static(100.percent) + it.strobeSpeed.static(0.percent) + it.pointAtCeiling() + } + + Washs.left.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, false)) + Washs.right.colorWheelMode.static(CoemarProWash.ColorWheelMode.Rotate(30.percent, true)) + } + + lightStep(StepCue.Custom("Hi-Hat-Kuppe wird malträtiert")) { + bar.brightness.sine(2.seconds, 20.percent, 50.percent) + } + + lightStep(StepCue.Custom("Breakdown am Ende")) { + bar.brightness.fade(25.percent, 200.milliseconds) + FrontLights.all.forEach { it.brightness.off() } + Washs.both.forEach { it.brightness.off(200.milliseconds) } + + launch { + delay(200) + Washs.both.forEach { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.WarmWhite) } + } + } + + lightStep(StepCue.Custom("Schlussschlag")) { + bar.brightness.pulseOnce(200.milliseconds, 1.seconds) + FrontLights.all.forEach { it.brightness.pulseOnce(0.milliseconds, 1.seconds) } + Washs.both.forEach { it.brightness.pulseOnce(0.milliseconds, 1.seconds) } + } + + // + Ende in der nächsten Szene +} \ No newline at end of file diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/song/SchauMichMit.kt b/src/main/kotlin/de/moritzruth/lampenfieber/song/SchauMichMit.kt new file mode 100644 index 0000000..404741c --- /dev/null +++ b/src/main/kotlin/de/moritzruth/lampenfieber/song/SchauMichMit.kt @@ -0,0 +1,121 @@ +package de.moritzruth.lampenfieber.song + +import de.moritzruth.lampenfieber.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 kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlin.random.Random +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.minutes +import kotlin.time.Duration.Companion.seconds + +fun SceneBuilderContext.songSchauMichMit() { + step(StepCue.MusicStart("Schau mich mit anderen Augen an", 10.minutes)) { + actors { + -"Bianca / nach rechts" + } + + onRun { + spotLeft.brightness.off(5.seconds) + spotRight.brightness.off(5.seconds) + + sideLight.moveColorsPinkAndBlue() + + Washs.left.brightness.switch(0.percent, 100.percent, 1.seconds, false) + Washs.right.brightness.switch(100.percent, 0.percent, 1.seconds, false) + + Tops.both { it.brightness.fade(100.percent, 1.seconds) } + } + } + + lightStep(StepCue.Custom("Bridge")) { + bar.color.static(Color(50.degrees)) + bar.brightness.fade(100.percent, 200.milliseconds) + + sideLight.colors.forEach { it.fade(Color(50.degrees), 100.milliseconds) } + + Washs.both { it.brightness.off() } + Tops.both { it.startRoomMovement(2.0) } + } + + lightStep(StepCue.Custom("Refrain")) { + bar.color.fadeRandomAround(50.degrees, 10.degrees, 2.seconds) + bar.brightness.fade(100.percent, 200.milliseconds) + + Tops.both { it.brightness.sine(8.seconds, minimum = 50.percent) } + + sideLight.colors.forEach { + launch { + val downDuration = 1000.milliseconds + val upDuration = 400.milliseconds + + while (isActive) { + delay(Random.nextInt(0, 3000).milliseconds) + + it.fade(Color(50.degrees, brightness = 0.percent), downDuration) + delay(downDuration) + + it.fade(Color(50.degrees, brightness = 100.percent), upDuration) + delay(upDuration) + } + } + } + } + + lightStep(StepCue.Custom("Strophe (mit dem ersten Wort)")) { + val interval = 800.milliseconds + + bar.brightness.switch(0.percent, 100.percent, interval, false) + + sideLight.brightness.switch(100.percent, 0.percent, interval, false) + sideLight.colors.forEach { it.static(Color(60.degrees, saturation = 10.percent)) } + + Washs.both { it.strobeSpeed.static(80.percent) } + Tops.both { it.brightness.off(200.milliseconds) } + } + + // 3:06 + lightStep(StepCue.Custom("Pause nach »rotiere«")) { + bar.brightness.off(500.milliseconds) + sideLight.brightness.off(500.milliseconds) + } + + lightStep(StepCue.Custom("Refrain")) { + sideLight.moveColorsPinkAndBlue() + sideLight.brightness.static(100.percent) + + Washs.both { it.brightness.static(100.percent) } + Tops.both { + it.startRoomMovement(8.0) + it.brightness.static(100.percent) + } + } + + step(StepCue.MusicEnd) { + actors { + -"Tina / nach links" + -"Sandra / nach rechts" + } + + onRun { + sideLight.brightness.off(500.milliseconds) + + Washs.both { + it.brightness.off(500.milliseconds) + it.strobeSpeed.off() + it.cyan.off() + it.magenta.off() + } + + Tops.both { + it.pointAtStageMiddleSingleCenterMarking() + it.brightness.off(500.milliseconds) + } + } + } +} \ No newline at end of file