commit 98

This commit is contained in:
Moritz Ruth 2025-03-29 10:55:48 +01:00
parent 0a5148cf37
commit a6e11649b3
Signed by: moritzruth
GPG key ID: C9BBAB79405EE56D
4 changed files with 48 additions and 9 deletions

View file

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

View file

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

View file

@ -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")) {

View file

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