From a6e11649b31275a6d516a92ea9a362bae94b0f3d Mon Sep 17 00:00:00 2001 From: Moritz Ruth Date: Sat, 29 Mar 2025 10:55:48 +0100 Subject: [PATCH] commit 98 --- .../dracula_musical/device/CoemarProWash.kt | 10 ++++++- .../device/FuturelightDmh160.kt | 29 +++++++++++++++++-- .../dracula_musical/song/DraculasZorn.kt | 8 ++++- .../dracula_musical/song/DuettDraculaMina.kt | 10 ++++--- 4 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/device/CoemarProWash.kt b/src/main/kotlin/de/moritzruth/dracula_musical/device/CoemarProWash.kt index 730397d..82e8246 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/device/CoemarProWash.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/device/CoemarProWash.kt @@ -11,6 +11,7 @@ import de.moritzruth.theaterdsl.value.Percentage import de.moritzruth.theaterdsl.value.degrees import de.moritzruth.theaterdsl.value.percent import kotlinx.collections.immutable.persistentSetOf +import kotlin.math.pow import kotlin.math.roundToInt import kotlin.time.Duration @@ -97,6 +98,13 @@ class CoemarProWash(override val firstChannel: DmxAddress, private val invertAng writer.writeRaw(DmxValue(0u)) // no function writer.writeRaw(DmxValue(strobeSpeed.getCurrentValue().ofRange(63.0..95.0).roundToInt().toUByte())) - writer.writePercentage(brightness.getCurrentValue()) + + val adjustedBrightness = Percentage(brightness.getCurrentValue().value.pow(1.5)) + if (adjustedBrightness.value == 0.0) writer.writeRaw(DmxValue(0u)) + else writer.writeRaw( + DmxValue( + adjustedBrightness.ofRange(75.0..DmxValue.VALUE_RANGE.endInclusive.toDouble()).roundToInt().toUByte() + ) + ) } } \ No newline at end of file diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/device/FuturelightDmh160.kt b/src/main/kotlin/de/moritzruth/dracula_musical/device/FuturelightDmh160.kt index a34b363..df360d5 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/device/FuturelightDmh160.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/device/FuturelightDmh160.kt @@ -10,6 +10,7 @@ import de.moritzruth.theaterdsl.dmx.DmxValue import de.moritzruth.theaterdsl.value.Angle import de.moritzruth.theaterdsl.value.Percentage import de.moritzruth.theaterdsl.value.degrees +import de.moritzruth.theaterdsl.value.percent import kotlinx.collections.immutable.persistentSetOf import kotlin.math.roundToInt import kotlin.time.Duration.Companion.minutes @@ -38,14 +39,16 @@ class FuturelightDmh160(override val firstChannel: DmxAddress, private val isRig else DmxValue((strobeSpeed.value * 31 + 64).roundToInt().toUByte()) ) + val goboValue = gobo.getCurrentValue() + writer.writePercentage(brightness.getCurrentValue()) writer.writeRaw(colorWheelMode.getCurrentValue().getDmxValue()) - writer.writeRaw(DmxValue(0u)) // gobo wheel = open + writer.writeRaw(if (goboValue.isRotatable) goboValue.dmxValue else DmxValue(0u)) // rotatable gobo wheel writer.writeRaw(DmxValue(0u)) // gobo rotation = none - writer.writeRaw(DmxValue(0u)) // second gobo = none + writer.writeRaw(if (!goboValue.isRotatable) goboValue.dmxValue else DmxValue(0u)) // static gobo wheel = none writer.writeRaw(prismMode.getCurrentValue().dmxValue) writer.writeRaw(DmxValue((prismRotationSpeed.getCurrentValue().value * 123 + 4).roundToInt().toUByte())) - writer.writeRaw(DmxValue(255u)) // focus = maximum distance + writer.writePercentage(focus.getCurrentValue()) // focus writer.writeRaw(DmxValue(0u)) // iris = ? writer.writeRaw(DmxValue(0u)) // functions = noop } @@ -75,6 +78,24 @@ class FuturelightDmh160(override val firstChannel: DmxAddress, private val isRig object Yellow : Simple(25) } + enum class Gobo(val dmxValue: DmxValue, val isRotatable: Boolean) { + NONE(DmxValue(0u), true), + BLUE_WHEEL(DmxValue(6u), true), + RED_ASTERISK(DmxValue(12u), true), + SPIRAL(DmxValue(18u), true), + APERTURE(DmxValue(24u), true), + LINES(DmxValue(30u), true), + MEDUSA(DmxValue(36u), true), + TRIANGLE(DmxValue(42u), true), + FENCE(DmxValue(6u), false), + FLOWER(DmxValue(12u), false), + NEEDLE_WHEEL(DmxValue(18u), false), + PIN_WHEEL(DmxValue(24u), false), + COMB_WHEEL(DmxValue(30u), false), + SHARDS(DmxValue(36u), false), + DROPLETS(DmxValue(42u), false), + } + enum class PrismMode(val dmxValue: DmxValue) { OPEN(DmxValue(0u)), FACETS_3(DmxValue(64u)), @@ -87,8 +108,10 @@ class FuturelightDmh160(override val firstChannel: DmxAddress, private val isRig val brightness = PercentageDV() val colorWheelMode = ConcreteDV(ColorWheelMode.White) val strobeSpeed = PercentageDV() + val gobo = ConcreteDV(Gobo.NONE) val prismMode = ConcreteDV(PrismMode.OPEN) val prismRotationSpeed = PercentageDV() + val focus = PercentageDV(0.percent) // near to far fun startRoomMovement(rotationsPerMinute: Double) { val period = (1.minutes / rotationsPerMinute) * 2 diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt index 86beeb7..cd04347 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/DraculasZorn.kt @@ -183,6 +183,8 @@ fun SceneBuilderContext.songDraculasZorn() { Tops.both { it.brightness.off(3.seconds) it.startRoomMovement(6.0) + it.gobo.static(FuturelightDmh160.Gobo.LINES) + it.prismMode.static(FuturelightDmh160.PrismMode.OPEN) } Washs.both { @@ -262,7 +264,11 @@ fun SceneBuilderContext.songDraculasZorn() { lightStep(StepCue.Text("Alle", "Dracula", "dritte Silbe")) { BlinderBars.all { it.brightness.pulseOnce(0.1.seconds, 2.seconds, end = 30.percent) } - Tops.both { it.pointAtStageMiddleSingleCenterMarking() } + Tops.both { + it.pointAtStageMiddleSingleCenterMarking() + it.gobo.static(FuturelightDmh160.Gobo.NONE) + it.prismMode.static(FuturelightDmh160.PrismMode.FROST) + } } lightStep(StepCue.Text("Alle", "Dracula", "erste Silbe")) { diff --git a/src/main/kotlin/de/moritzruth/dracula_musical/song/DuettDraculaMina.kt b/src/main/kotlin/de/moritzruth/dracula_musical/song/DuettDraculaMina.kt index e36c659..a4122fa 100644 --- a/src/main/kotlin/de/moritzruth/dracula_musical/song/DuettDraculaMina.kt +++ b/src/main/kotlin/de/moritzruth/dracula_musical/song/DuettDraculaMina.kt @@ -1,6 +1,7 @@ package de.moritzruth.dracula_musical.song import de.moritzruth.dracula_musical.device.* +import de.moritzruth.theaterdsl.device.reset import de.moritzruth.theaterdsl.show.SceneBuilderContext import de.moritzruth.theaterdsl.show.StepCue import de.moritzruth.theaterdsl.value.Color @@ -41,12 +42,12 @@ fun SceneBuilderContext.songDuettDraculaMina() { it.colorWheelMode.static(CoemarProWash.ColorWheelMode.DarkBlue) } - Tops.left.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.Rotate(10.percent, backwards = true)) - Tops.right.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.Rotate(10.percent, backwards = true)) Tops.both { it.startRoomMovement(2.5) - it.prismMode.static(FuturelightDmh160.PrismMode.FACETS_8) - it.prismRotationSpeed.static(5.percent) + it.prismMode.static(FuturelightDmh160.PrismMode.FACETS_3) + it.prismRotationSpeed.static(10.percent) + it.colorWheelMode.static(FuturelightDmh160.ColorWheelMode.DarkPink) + it.gobo.static(FuturelightDmh160.Gobo.SPIRAL) } } @@ -87,6 +88,7 @@ fun SceneBuilderContext.songDuettDraculaMina() { lightStep(StepCue.MusicEnd) { Spots.right.brightness.off(3.seconds) + Tops.both { it.reset() } backlightBar.brightness.pulse(1.8.seconds, 0.15.seconds, 0.2.seconds, peak = 40.percent, startDelay = 0.seconds) Washs.both { it.brightness.pulse(1.8.seconds, 0.15.seconds, 0.3.seconds, startDelay = 0.4.seconds) }