This commit is contained in:
Moritz Ruth 2023-05-25 23:30:57 +02:00
parent b56e907eca
commit c08230732d
Signed by: moritzruth
GPG key ID: C9BBAB79405EE56D
4 changed files with 111 additions and 68 deletions

View file

@ -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

View file

@ -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
}
}
}

View file

@ -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)
}

View file

@ -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<Scene>()
val actorsOnStage = mutableListOf<String>()
val props = PropPosition.values().associateWith<PropPosition, StringWithDetails?> { 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<Step>()
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())
}