Skip to content

Commit

Permalink
implemented support for show transition
Browse files Browse the repository at this point in the history
  • Loading branch information
cansik committed Jun 5, 2023
1 parent d27ee20 commit 8a55431
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 4 deletions.
27 changes: 27 additions & 0 deletions src/main/kotlin/ch/bildspur/ledforest/model/leda/LedaShowConfig.kt
Original file line number Diff line number Diff line change
@@ -1,26 +1,42 @@
package ch.bildspur.ledforest.model.leda

import ch.bildspur.color.RGB
import ch.bildspur.ledforest.ui.properties.SeparatorParameter
import ch.bildspur.model.DataModel
import ch.bildspur.ui.properties.BooleanParameter
import ch.bildspur.ui.properties.ColorParameter
import ch.bildspur.ui.properties.StringParameter
import com.google.gson.annotations.Expose
import kotlinx.datetime.Clock
import kotlinx.datetime.TimeZone
import kotlinx.datetime.toInstant
import kotlinx.datetime.toLocalDateTime
import kotlin.math.max

class LedaShowConfig {

@Expose
@BooleanParameter("Show Enabled")
var enabled = DataModel(false)

@Expose
@ColorParameter("Transition Color")
var transitionColor = DataModel(RGB(255, 255, 255))

@SeparatorParameter("Trigger")
private val triggerSep = Any()

@BooleanParameter("Show Requested")
var showTrigger = DataModel(false)

@StringParameter("Video Name", isEditable = false)
var videoName = DataModel("-")

@StringParameter("Triggered Time", isEditable = false)
private var triggeredTimeStampPreview = DataModel("-")

var triggeredTimeStamp = DataModel(Clock.System.now())

@StringParameter("Start Time", isEditable = false)
private var startTimeStampPreview = DataModel("-")

Expand All @@ -34,11 +50,22 @@ class LedaShowConfig {
startTimeStampPreview.value = it.toLocalDateTime(TimeZone.currentSystemDefault())
.toInstant(TimeZone.UTC).toString()
}

triggeredTimeStamp.onChanged += {
triggeredTimeStampPreview.value = it.toLocalDateTime(TimeZone.currentSystemDefault())
.toInstant(TimeZone.UTC).toString()
}
}

val showRequested: Boolean
get() = enabled.value && showTrigger.value

val isShowRunning: Boolean
get() = enabled.value && !hasShowEnded.value

val timeUntilPlayback: Long
get() = startTimeStamp.value.toEpochMilliseconds() - System.currentTimeMillis()

val totalWaitTime: Long
get() = max(0, startTimeStamp.value.toEpochMilliseconds() - triggeredTimeStamp.value.toEpochMilliseconds())
}
20 changes: 16 additions & 4 deletions src/main/kotlin/ch/bildspur/ledforest/scene/LedaShowScene.kt
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package ch.bildspur.ledforest.scene

import ch.bildspur.color.HSV
import ch.bildspur.ledforest.controller.timer.TimerTask
import ch.bildspur.ledforest.model.Project
import ch.bildspur.ledforest.model.light.Tube
import ch.bildspur.ledforest.util.forEachLED
import kotlin.math.roundToInt

class LedaShowScene(project: Project, tubes: List<Tube>) : BaseScene("Leda Show", project, tubes) {
private val task = TimerTask(1, { update() })
Expand Down Expand Up @@ -30,8 +33,7 @@ class LedaShowScene(project: Project, tubes: List<Tube>) : BaseScene("Leda Show"
// find relevant video scene and play it back
val act = SceneRegistry.listOfActs().firstOrNull { it.name.endsWith(config.videoName.value) }

if (act == null)
{
if (act == null) {
println("Could not find show scene ${config.videoName.value}.")
config.hasShowEnded.value = true
} else {
Expand All @@ -44,12 +46,22 @@ class LedaShowScene(project: Project, tubes: List<Tube>) : BaseScene("Leda Show"
val currentTime = System.currentTimeMillis()
println("Current: ${currentTime}")
println("Current: ${config.startTimeStamp.value.toEpochMilliseconds()}")
println("Time Miss: ${config.startTimeStamp.value.toEpochMilliseconds() - currentTime} ms")
println("Time Miss: ${config.timeUntilPlayback} ms")
project.videoScene.videoStartTime.value = config.startTimeStamp.value.toEpochMilliseconds()
}

override fun update() {
// todo: while not start time - display transition (white to black fade)
val config = project.leda.ledaShow

if (config.timeUntilPlayback > 0) {
val brightnessFactor = config.timeUntilPlayback / config.totalWaitTime.toFloat()

val hsv = project.leda.ledaShow.transitionColor.value.toHSV()
val color = HSV(hsv.h, hsv.s, (hsv.v * brightnessFactor).roundToInt()).toRGB().toPackedInt()

tubes.forEachLED { it.color.set(color) }
return
}

showScene.update()
}
Expand Down
2 changes: 2 additions & 0 deletions src/main/kotlin/ch/bildspur/ledforest/ui/PrimaryView.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import javafx.scene.shape.Rectangle
import javafx.stage.*
import jfxtras.styles.jmetro.JMetro
import jfxtras.styles.jmetro.Style
import kotlinx.datetime.Clock
import org.kordamp.ikonli.javafx.FontIcon
import processing.core.PApplet
import processing.core.PVector
Expand Down Expand Up @@ -315,6 +316,7 @@ class PrimaryView {
show.showTrigger.value = true
show.videoName.value = it.videoName
show.startTimeStamp.value = it.videoStartTimeStamp
show.triggeredTimeStamp.value = Clock.System.now()
}
}
synchronizer.start()
Expand Down

0 comments on commit 8a55431

Please sign in to comment.