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
*/
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)

View File

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