From c08230732dfa70e7d841e8b2fa2060917d11de71 Mon Sep 17 00:00:00 2001 From: Moritz Ruth Date: Thu, 25 May 2023 23:30:57 +0200 Subject: [PATCH] commit #18 --- .../kotlin/de/moritzruth/lampenfieber/Test.kt | 1 + .../de/moritzruth/lampenfieber/act/Fourth.kt | 167 +++++++++++------- .../lampenfieber/device/FuturelightDmh160.kt | 1 + .../de/moritzruth/theaterdsl/show/Dsl.kt | 10 +- 4 files changed, 111 insertions(+), 68 deletions(-) diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/Test.kt b/src/main/kotlin/de/moritzruth/lampenfieber/Test.kt index adbd2ab..b504a4d 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/Test.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/Test.kt @@ -1,5 +1,6 @@ package de.moritzruth.lampenfieber +import de.moritzruth.lampenfieber.device.devices import de.moritzruth.theaterdsl.dmx.EnttecOpenDmxUsb import de.moritzruth.theaterdsl.dmx.PerDeviceDmxDataWriter import kotlinx.coroutines.awaitCancellation diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt b/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt index f85c844..7a1a5e2 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/act/Fourth.kt @@ -6,6 +6,10 @@ 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 import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.minutes @@ -87,7 +91,7 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { // Vorhang zu } - step(StepCue.Custom("Vorhang ist zu")) { + step(StepCue.Curtain(StepCue.Curtain.State.CLOSED, false)) { actors { +"Tina / von links" +"Sandra / von rechts" @@ -279,11 +283,15 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { +"Andreas" +"Eva" +"Kathi" + -"Kai" + -"Adrian" } onRun { // Vorhang auf // sideLights ist noch an + FrontLights.all.forEach { it.brightness.fade(75.percent, 1.seconds) } + Washs.both.forEach { it.brightness.off(1.seconds) } spotLeft.brightness.off(1.seconds) spotRight.brightness.off(1.seconds) @@ -291,7 +299,7 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { } } - lightStep(StepCue.Custom("Washs sind aus")) { + lightStep(StepCue.MusicStart("Paulas Monolog", 3.minutes + 45.seconds)) { Washs.both.forEach { it.beamAngle.static(100.percent) it.colorWheelMode.static(CoemarProWash.ColorWheelMode.DarkBlue) @@ -303,107 +311,140 @@ fun ShowBuilderContext.fourthAct() = act("Vierter Akt") { it.prismRotationSpeed.static(0.percent) it.pointAtStageCenterMarking() } + + FrontLights.all.forEach { it.brightness.fade(25.percent, 20.seconds) } } - lightStep(StepCue.Text("Paula", "Starrt mich nicht so an.", "auf das letzt Wort")) { - // TODO: Paula auf Markierung hinweisen + step(StepCue.Text("Paula", "Starrt mich nicht so an.", "auf das letzt Wort")) { + rightSpotTarget = "Paula" + + onRun { + // TODO: Paula auf Markierung hinweisen + Tops.both.forEach { it.brightness.pulseOnce(200.milliseconds, 3.seconds) } + FrontLights.all.forEach { it.brightness.off() } + + spotRight.brightness.fade(50.percent, 6.seconds) + + bar.color.static(Color(190.degrees)) + bar.brightness.static(100.percent) + + sideLight.color3.fadeRandomAround(190.degrees, 10.degrees, 5.seconds) + sideLight.color4.fadeRandomAround(190.degrees, 20.degrees, 6.seconds) + + Washs.both.forEach { + it.brightness.static(100.percent) + it.beamAngle.fade(0.percent, 2.seconds) + } + } + } + + lightStep(StepCue.Custom("Keyboard-Einsatz")) { Tops.both.forEach { - it.brightness.pulseOnce(200.milliseconds, 3.seconds) - } - - bar.color.static(Color(190.degrees)) - bar.brightness.static(100.percent) - - sideLight.color3.fadeRandomAround(190.degrees, 10.degrees, 5.seconds) - sideLight.color4.fadeRandomAround(190.degrees, 20.degrees, 6.seconds) - - Washs.both.forEach { - it.brightness.static(100.percent) - it.beamAngle.fade(0.percent, 2.seconds) + it.startRoomMovement(6.0) + it.brightness.fade(100.percent, 10.seconds) + it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.DarkBlue) + it.prismRotationSpeed.static(20.percent) } } - step { - trigger = StepCue.Stub - - onRun { - // Vorhang auf, Spot immer noch auf Paula - spotLeft.brightness.fade(0.percent, 8.seconds) - FrontLights.all.forEach { it.brightness.fade(75.percent, 5.seconds) } - } + lightStep(StepCue.Text("Paula", "Ihr könnt euch nicht entscheiden")) { + Tops.both.forEach { it.brightness.off(10.seconds) } + bar.brightness.off(10.seconds) + sideLight.brightness.off(10.seconds) + spotRight.brightness.fade(100.percent, 10.seconds) } - step { - trigger = StepCue.MusicStart("Paulas Monolog", 69.seconds) - - onRun { - FrontLights.all.forEach { it.brightness.fade(20.percent, 15.seconds) } - // blaues Licht + step(StepCue.MusicEnd) { + actors { + -"Paula" + -"Theaterlehrer" + -"Sven" + -"Heike" + -"Andreas" + -"Eva" + -"Kathi" } - } - - step { - trigger = StepCue.MusicEnd onRun { - // Vorhang zu + // TODO: Vorhang zu und Umbau } } } scene("8") { - step { - trigger = StepCue.MusicStart("Angstballet", 69.seconds) - + step(StepCue.MusicStart("Angstballet", 69.seconds)) { onRun { - // passend zur Musik + // TODO: Song } } - - step { - trigger = StepCue.MusicEnd - } } scene("9") { - step { - trigger = StepCue.Stub + step(StepCue.MusicEnd) { + actors { + // TODO: Wo stehen Kai und Adrian? + +"Kai" + +"Adrian" + } onRun { - spotRight.brightness.fade(100.percent, 5.seconds) + FrontLights.all.forEach { it.brightness.fade(25.percent, 5.seconds) } } } - step { - trigger = StepCue.Custom("Bühne erreicht") + step(StepCue.Custom("Kai wird gerufen")) { + rightSpotTarget = "Kai (kurz suchend)" onRun { - // Vorhang auf + spotRight.brightness.static(100.percent) + + // für später + // TODO: Nebel + Tops.both.forEach { + it.pointAtStageCenterMarking() + it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.White) + it.prismRotationSpeed.static(0.percent) + } } } } scene("10") { - step { - trigger = StepCue.Stub - - onRun { - // Paula steht mit dem Rücken zum Publikum in der Mitte der Bühne, relativ weit hinten - // Sie wird von oben weiß beleuchtet + step(StepCue.Text("Kai", "Hilfe, los, runter!")) { + actors { + // TODO: Alle Mitspieler + +"Paula / steht bei Markierung" } - } - - step { - trigger = StepCue.Custom("Bühne erreicht") onRun { // Vorhang auf - bar.color.static(Color(40.degrees, 50.percent)) + spotRight.brightness.off(5.seconds) + } + } - val steps = mutableListOf(75.percent) - steps.addAll((0..30).map { 0.percent }) + // TODO: Crowd-Sound absprechen mit Büchner und Rein - bar.brightness.steps(steps, 100.milliseconds) + step(StepCue.Curtain(StepCue.Curtain.State.OPEN, false)) { + onRun { + Tops.both.forEach { it.brightness.fade(50.percent, 1.5.seconds) } + bar.color.static(Color.WHITE) + +// val steps = MutableList(10) { 0.percent } +// steps[0] = 100.percent +// bar.brightness.steps(steps, 1.8.seconds / steps.size) + + launch { + while (isActive) { + bar.brightness.pulseOnce(Duration.ZERO, 300.milliseconds) + delay(Random.nextDouble(1.2, 2.5).seconds) + } + } + } + } + + step(StepCue.MusicStart("Gemeinsam packen wir es an", 5.minutes + 25.seconds)) { + onRun { + // TODO: Song } } } diff --git a/src/main/kotlin/de/moritzruth/lampenfieber/device/FuturelightDmh160.kt b/src/main/kotlin/de/moritzruth/lampenfieber/device/FuturelightDmh160.kt index 3d23ef3..0e12ff2 100644 --- a/src/main/kotlin/de/moritzruth/lampenfieber/device/FuturelightDmh160.kt +++ b/src/main/kotlin/de/moritzruth/lampenfieber/device/FuturelightDmh160.kt @@ -84,6 +84,7 @@ class FuturelightDmh160(override val firstChannel: DmxAddress, private val isRig val prismRotationSpeed = PercentageDV() fun startRoomMovement(rotationsPerMinute: Double) { + // TODO: Testen, alternativ spin statt sine pan.sine(1.minutes / rotationsPerMinute, 0.degrees, 360.degrees) tilt.fade(120.degrees, 3.seconds) } diff --git a/src/main/kotlin/de/moritzruth/theaterdsl/show/Dsl.kt b/src/main/kotlin/de/moritzruth/theaterdsl/show/Dsl.kt index ac45081..fb5fc7f 100644 --- a/src/main/kotlin/de/moritzruth/theaterdsl/show/Dsl.kt +++ b/src/main/kotlin/de/moritzruth/theaterdsl/show/Dsl.kt @@ -83,7 +83,7 @@ fun createShow(build: ShowBuilderContext.() -> Unit): Show { } @TheaterDslMarker -private fun buildAct(actIndex: Int, name: String, build: ActBuilderContext.() -> Unit): Act { +private fun buildAct(actIndex: Int, @Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") actName: String, build: ActBuilderContext.() -> Unit): Act { val scenes = mutableListOf() val actorsOnStage = mutableListOf() val props = PropPosition.values().associateWith { null }.toMutableMap() @@ -92,7 +92,7 @@ private fun buildAct(actIndex: Int, name: String, build: ActBuilderContext.() -> var rightSpotTarget: String? object : ActBuilderContext { - override fun scene(name: String, build: SceneBuilderContext.() -> Unit) { + override fun scene(@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") sceneName: String, build: SceneBuilderContext.() -> Unit) { val steps = mutableListOf() object : SceneBuilderContext { @@ -130,7 +130,7 @@ private fun buildAct(actIndex: Int, name: String, build: ActBuilderContext.() -> leftSpotTarget = builderContext.leftSpotTarget rightSpotTarget = builderContext.rightSpotTarget - val logger = KotlinLogging.logger("createAct / $name / #${steps.size + 1} ${cue.format()}") + val logger = KotlinLogging.logger("createAct / $actName / $sceneName / #${steps.size + 1} ${cue.format()}") val actorEntrancesNames = actorEntrances.map { it.main } val actorExitsNames = actorExits.map { it.main } @@ -181,9 +181,9 @@ private fun buildAct(actIndex: Int, name: String, build: ActBuilderContext.() -> } }.build() - scenes.add(Scene(name, steps.toImmutableList())) + scenes.add(Scene(sceneName, steps.toImmutableList())) } }.build() - return Act(name, scenes.toImmutableList()) + return Act(actName, scenes.toImmutableList()) } \ No newline at end of file