jukebox: lamp for play mech chamber

This commit is contained in:
minjaesong
2024-01-12 23:03:29 +09:00
parent aff3b3655b
commit 5c6cc36437
5 changed files with 43 additions and 2 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -35,6 +35,7 @@ object SoftClp : TerrarumAudioFilter() {
* @return -0.5..0.5 * @return -0.5..0.5
*/ */
private fun clipfun0(x0: Double): Double { 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 p = 0.44444 // knee of around -6.02dB
val p1 = sqrt(1.0 - 2.0 * p) val p1 = sqrt(1.0 - 2.0 * p)

View File

@@ -1,6 +1,12 @@
package net.torvald.terrarum.modulebasegame.gameactors package net.torvald.terrarum.modulebasegame.gameactors
import com.badlogic.gdx.Gdx 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.App.printdbg
import net.torvald.terrarum.INGAME import net.torvald.terrarum.INGAME
import net.torvald.terrarum.ModMgr 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.AudioMixer.DEFAULT_FADEOUT_LEN
import net.torvald.terrarum.audio.dsp.Convolv import net.torvald.terrarum.audio.dsp.Convolv
import net.torvald.terrarum.audio.dsp.NullFilter 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.gameactors.AVKey
import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.MusicContainer import net.torvald.terrarum.modulebasegame.MusicContainer
@@ -39,6 +47,8 @@ class FixtureJukebox : Electric {
} }
} }
@Transient private val backLamp: SheetSpriteAnimation
init { init {
val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/jukebox.tga") val itemImage = FixtureItemBase.getItemImageFromSingleImage("basegame", "sprites/fixtures/jukebox.tga")
@@ -53,6 +63,12 @@ class FixtureJukebox : Electric {
setWireSinkAt(0, 2, "appliance_power") setWireSinkAt(0, 2, "appliance_power")
setWireConsumptionAt(0, 2, Vector2(350.0, 0.0)) 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 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() { private fun forceStop() {
musicNowPlaying?.let { musicNowPlaying?.let {
stopAudio(it) stopAudio(it)