diff --git a/assets/mods/basegame/sprites/fixtures/jukebox_illum.tga b/assets/mods/basegame/sprites/fixtures/jukebox_illum.tga new file mode 100644 index 000000000..60cc894a5 --- /dev/null +++ b/assets/mods/basegame/sprites/fixtures/jukebox_illum.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e913314693452a82dee1ff8f27a2f1d8773d6ae9c55e7a785d97925f236f321 +size 6162 diff --git a/assets/mods/basegame/sprites/fixtures/jukebox_innerlamp.tga b/assets/mods/basegame/sprites/fixtures/jukebox_innerlamp.tga new file mode 100644 index 000000000..b6734a14f --- /dev/null +++ b/assets/mods/basegame/sprites/fixtures/jukebox_innerlamp.tga @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7882203dea17830f700cda97131db0062d5a2cbf72f250098b6da52166dbb2e +size 6162 diff --git a/src/net/torvald/terrarum/audio/dsp/SoftClp.kt b/src/net/torvald/terrarum/audio/dsp/SoftClp.kt index d17d3ac87..ff6b96293 100644 --- a/src/net/torvald/terrarum/audio/dsp/SoftClp.kt +++ b/src/net/torvald/terrarum/audio/dsp/SoftClp.kt @@ -35,6 +35,7 @@ object SoftClp : TerrarumAudioFilter() { * @return -0.5..0.5 */ private fun clipfun0(x0: Double): Double { +// val p = 0.277777 // knee of around -1.94dB val p = 0.44444 // knee of around -6.02dB val p1 = sqrt(1.0 - 2.0 * p) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt index cbbeb9978..7ef2c4a49 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt @@ -1,6 +1,12 @@ package net.torvald.terrarum.modulebasegame.gameactors import com.badlogic.gdx.Gdx +import com.badlogic.gdx.graphics.Color +import com.badlogic.gdx.graphics.Texture +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import com.badlogic.gdx.graphics.g2d.TextureRegion +import com.jme3.math.FastMath +import net.torvald.spriteanimation.SheetSpriteAnimation import net.torvald.terrarum.App.printdbg import net.torvald.terrarum.INGAME import net.torvald.terrarum.ModMgr @@ -9,6 +15,8 @@ import net.torvald.terrarum.audio.AudioMixer import net.torvald.terrarum.audio.AudioMixer.DEFAULT_FADEOUT_LEN import net.torvald.terrarum.audio.dsp.Convolv import net.torvald.terrarum.audio.dsp.NullFilter +import net.torvald.terrarum.blendNormalStraightAlpha +import net.torvald.terrarum.blendScreen import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.MusicContainer @@ -39,6 +47,8 @@ class FixtureJukebox : Electric { } } + @Transient private val backLamp: SheetSpriteAnimation + init { val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/jukebox.tga") @@ -53,6 +63,12 @@ class FixtureJukebox : Electric { setWireSinkAt(0, 2, "appliance_power") setWireConsumptionAt(0, 2, Vector2(350.0, 0.0)) + + val backLampTex = Texture(ModMgr.getGdxFile("basegame", "sprites/fixtures/jukebox_innerlamp.tga")) + backLamp = SheetSpriteAnimation(this).also { + it.setSpriteImage(TextureRegionPack(backLampTex, TILE_SIZE * 2, TILE_SIZE * 3)) + it.setRowsAndFrames(1, 1) + } } private var waitAkku = 0f @@ -88,6 +104,24 @@ class FixtureJukebox : Electric { } } + @Transient private var lampDecay = 0f + + override fun drawBody(frameDelta: Float, batch: SpriteBatch) { + blendNormalStraightAlpha(batch) + super.drawBody(frameDelta, batch) + + if (isVisible && musicNowPlaying != null) { + val vol0 = (musicTracks[musicNowPlaying]?.processor?.maxSigLevel?.average() ?: 0.0).toFloat() + val vol = FastMath.interpolateLinear(0.8f, vol0, lampDecay) + + blendScreen(batch) + backLamp.colourFilter = Color(0f, vol.coerceIn(0f, 1f), 0f, 1f) + drawSpriteInGoodPosition(frameDelta, backLamp, batch) + + lampDecay = vol + } + } + private fun forceStop() { musicNowPlaying?.let { stopAudio(it) diff --git a/work_files/graphics/sprites/fixtures/jukebox.kra b/work_files/graphics/sprites/fixtures/jukebox.kra index ded9482e1..989d285aa 100644 --- a/work_files/graphics/sprites/fixtures/jukebox.kra +++ b/work_files/graphics/sprites/fixtures/jukebox.kra @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b26259229d2722a9102a77dec6a73b429000299eafb33a05e832c2ddffa568c -size 259828 +oid sha256:52113ec73d0d0495a5094702b274edeba364d39ec7c42308d86c762c12d91519 +size 280253