11package baaahs
22
33import baaahs.app.ui.CommonIcons
4+ import baaahs.driverack.BusAlias
5+ import baaahs.driverack.Channel
6+ import baaahs.driverack.DriveRack
7+ import baaahs.driverack.RackMap
48import baaahs.fixtures.FixtureManager
59import baaahs.fixtures.RenderPlan
10+ import baaahs.gadgets.Slider
611import baaahs.gl.Toolchain
712import baaahs.gl.render.RenderManager
813import baaahs.io.Fs
@@ -16,6 +21,7 @@ import baaahs.show.Show
1621import baaahs.show.buildEmptyShow
1722import baaahs.ui.Icon
1823import baaahs.ui.Observable
24+ import baaahs.ui.RemovableObserver
1925import baaahs.ui.addObserver
2026import baaahs.util.Clock
2127import kotlinx.coroutines.CoroutineScope
@@ -64,7 +70,8 @@ class StageManager(
6470 private val fixtureManager : FixtureManager ,
6571 private val clock : Clock ,
6672 modelInfo : ModelInfo ,
67- private val gadgetManager : GadgetManager
73+ private val gadgetManager : GadgetManager ,
74+ override val driveRack : DriveRack
6875) : BaseShowPlayer(toolchain, modelInfo) {
6976 val facade = Facade ()
7077 private var showRunner: ShowRunner ? = null
@@ -82,6 +89,12 @@ class StageManager(
8289 }
8390 }
8491
92+ private val busA = driveRack.createBus(" A" )
93+ private val busB = driveRack.createBus(" B" )
94+ private val buses = listOf (busA, busB)
95+ private val primary = BusAlias (busA)
96+ private val secondary = BusAlias (busB)
97+
8598 @Suppress(" unused" )
8699 private val clientData =
87100 pubSub.state(Topics .createClientData(fsSerializer), ClientData (storage.fs.rootFile))
@@ -105,8 +118,26 @@ class StageManager(
105118
106119 private var gadgetsChangedJobEnqueued: Boolean = false
107120
121+ private var driveRackObservers = mutableListOf<RemovableObserver <* >>()
108122 override fun <T : Gadget > registerGadget (id : String , gadget : T , controlledDataSource : DataSource ? ) {
109- gadgetManager.registerGadget(id, gadget)
123+ var registerWithGadgetManager = true
124+
125+ if (gadget is Slider ) {
126+ registerWithGadgetManager = false
127+
128+ // primary.channel<T>(id).addObserver {
129+ // gadget.position = it.value as Float
130+ // }
131+
132+ // buses.map { bus ->
133+ // bus.channel<Any?>(id).addObserver {}
134+ // }.also { driveRackObservers.addAll(it) }
135+ }
136+
137+ if (registerWithGadgetManager) {
138+ gadgetManager.registerGadget(id, gadget)
139+ }
140+
110141 super .registerGadget(id, gadget, controlledDataSource)
111142 }
112143
@@ -121,6 +152,8 @@ class StageManager(
121152 return gadgetManager.useGadget(id)
122153 }
123154
155+ override fun <T > useChannel (id : String ): Channel <T > = primary.channel(id)
156+
124157 fun switchTo (
125158 newShow : Show ? ,
126159 newShowState : ShowState ? = null,
@@ -139,6 +172,9 @@ class StageManager(
139172 releaseUnused()
140173
141174 showRunner = newShowRunner
175+
176+ wireDriveRack(newShowRunner?.rackMap ? : RackMap .Empty )
177+
142178 showEditSession.show = newShowRunner?.show
143179 showEditSession.showFile = file
144180 showEditSession.showIsUnsaved = isUnsaved
@@ -148,6 +184,22 @@ class StageManager(
148184 notifyOfShowChanges(fromClientUpdate)
149185 }
150186
187+ private fun wireDriveRack (rackMap : RackMap ) {
188+ driveRack.rackMap = rackMap
189+
190+ // rackMap.entries.map { entry ->
191+ // Updatable(entry.initialValue).also { updatable ->
192+ // primary.channel<Any?>(entry.id).addObserver { channel ->
193+ // updatable.value = channel.value
194+ // }
195+ // }
196+ // }
197+ }
198+
199+ class Updatable (
200+ var value : Any? = null
201+ )
202+
151203 private fun updateRunningShowPath (file : Fs .File ? ) {
152204 GlobalScope .launch {
153205 storage.updateConfig {
0 commit comments