From df813712ff47c41d20808063efcba0bf796f362b Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 11 Jan 2024 14:42:16 +0900 Subject: [PATCH] fix: panning dynamic source sending nan values --- .../modulecomputers/gameactors/FixtureHomeComputer.kt | 1 - src/net/torvald/terrarum/audio/MixerTrackProcessor.kt | 10 ++++++---- src/net/torvald/terrarum/audio/dsp/BinoPan.kt | 1 + .../terrarum/modulebasegame/TerrarumMusicGovernor.kt | 2 +- .../terrarum/modulebasegame/gameactors/FixtureBase.kt | 2 +- .../gameactors/FixtureFurnaceAndAnvil.kt | 1 - .../gameactors/FixtureLogicSignalEmitter.kt | 2 ++ .../modulebasegame/gameactors/FixtureSmelterBasic.kt | 1 - .../modulebasegame/gameactors/FixtureStorageChest.kt | 1 - .../gameactors/FixtureSwingingDoorBase.kt | 2 ++ .../gameactors/FixtureSwingingDoorRosewood.kt | 4 ---- .../modulebasegame/gameactors/FixtureTapestry.kt | 1 + .../modulebasegame/gameactors/FixtureTikiTorch.kt | 1 - .../modulebasegame/gameactors/FixtureTypewriter.kt | 1 - .../modulebasegame/gameactors/FixtureWallCalendar.kt | 1 + .../modulebasegame/gameactors/FixtureWorkbench.kt | 1 - .../modulebasegame/gameactors/FixtureWorldPortal.kt | 2 -- 17 files changed, 15 insertions(+), 19 deletions(-) diff --git a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt index b699f27fd..15b543c61 100644 --- a/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt +++ b/ModuleComputers/src/net/torvald/terrarum/modulecomputers/gameactors/FixtureHomeComputer.kt @@ -18,7 +18,6 @@ import net.torvald.tsvm.peripheral.VMProgramRom */ class FixtureHomeComputer : FixtureBase { - @Transient override val spawnNeedsFloor = true // TODO: write serialiser for TSVM && allow mods to have their own serialiser private val vm = VM(ModMgr.getGdxFile("dwarventech", "bios").path(), 0x200000, TheRealWorld(), arrayOf( diff --git a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt index 744853396..6efadc77f 100644 --- a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt +++ b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt @@ -37,7 +37,7 @@ class MixerTrackProcessor(val buffertaille: Int, val rate: Int, val track: Terra private var breakBomb = false - private val distFalloff = 1024.0 + private val distFalloff = 1536.0 private fun printdbg(msg: Any) { if (true) App.printdbg("AudioAdapter ${track.name}", msg) @@ -111,10 +111,12 @@ class MixerTrackProcessor(val buffertaille: Int, val rate: Int, val track: Terra (track.filters[0] as BinoPan).pan = 0f } else if (track.trackingTarget is ActorWithBody) { - // FIXME this may cause filter to fill the output buffer with NaNs? val relativeXpos = relativeXposition(AudioMixer.actorNowPlaying!!, track.trackingTarget as ActorWithBody) - track.volume = track.maxVolume * (1.0 - relativeXpos.absoluteValue.pow(0.5) / distFalloff) - (track.filters[0] as BinoPan).pan = ((2*asin(relativeXpos / distFalloff)) / Math.PI).toFloat() + track.volume = track.maxVolume * (1.0 - (relativeXpos.absoluteValue / distFalloff).pow(0.5)).coerceAtLeast(0.0) + (track.filters[0] as BinoPan).pan = + if (relativeXpos <= -distFalloff) -1f + else if (relativeXpos >= distFalloff) 1f + else ((2*asin(relativeXpos / distFalloff)) / Math.PI).toFloat() } } } diff --git a/src/net/torvald/terrarum/audio/dsp/BinoPan.kt b/src/net/torvald/terrarum/audio/dsp/BinoPan.kt index c0779c7dc..42152d2c6 100644 --- a/src/net/torvald/terrarum/audio/dsp/BinoPan.kt +++ b/src/net/torvald/terrarum/audio/dsp/BinoPan.kt @@ -50,6 +50,7 @@ class BinoPan(var pan: Float, var earDist: Float = 0.18f): TerrarumAudioFilter() val delayInSamples = (timeDiffMax * FastMath.sin(angle)).absoluteValue val volMultDbThis = PANNING_CONST * pan.absoluteValue val volMultFsThis = decibelsToFullscale(volMultDbThis).toFloat() + val volMUltFsOther = 1f / volMultFsThis if (pan >= 0) { diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt index 3ee1804e8..f2330d65d 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt @@ -339,7 +339,7 @@ class TerrarumMusicGovernor : MusicGovernor() { fun stopMusic(callStopMusicHook: Boolean = true, pauseLen: Float = Float.POSITIVE_INFINITY) { stopMusic(AudioMixer.musicTrack.currentTrack, callStopMusicHook) intermissionLength = pauseLen - printdbg(this, "StopMusic Intermission2: $intermissionLength seconds") +// printdbg(this, "StopMusic Intermission2: $intermissionLength seconds") } fun startMusic() { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 429c6e694..d75c37c75 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -138,7 +138,7 @@ open class Electric : FixtureBase { open class FixtureBase : ActorWithBody, CuedByTerrainChange { @Transient open val spawnNeedsWall: Boolean = false - @Transient open val spawnNeedsFloor: Boolean = false + @Transient open val spawnNeedsFloor: Boolean = true /** Real time, in nanoseconds */ @Transient var spawnRequestedTime: Long = 0L diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureFurnaceAndAnvil.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureFurnaceAndAnvil.kt index 0e2062b4c..9f58140d0 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureFurnaceAndAnvil.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureFurnaceAndAnvil.kt @@ -19,7 +19,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ class FixtureFurnaceAndAnvil : FixtureBase, CraftingStation { - @Transient override val spawnNeedsFloor = true @Transient override val tags = listOf("metalworking") constructor() : super( diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt index b7657f776..07e342e56 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureLogicSignalEmitter.kt @@ -9,6 +9,8 @@ import org.dyn4j.geometry.Vector2 class FixtureLogicSignalEmitter : Electric { + @Transient override val spawnNeedsFloor = false + constructor() : super( BlockBox(BlockBox.NO_COLLISION, 1, 1), nameFun = { Lang["ITEM_LOGIC_SIGNAL_EMITTER"] } diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt index 730326a2c..9de0d8566 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt @@ -22,7 +22,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ class FixtureSmelterBasic : FixtureBase, CraftingStation { - @Transient override val spawnNeedsFloor = true @Transient override val tags = listOf("basicsmelter") constructor() : super( diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt index bdce6576c..95bfaf931 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureStorageChest.kt @@ -13,7 +13,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ internal class FixtureStorageChest : FixtureBase { - @Transient override val spawnNeedsFloor = true constructor() : super( BlockBox(BlockBox.ALLOW_MOVE_DOWN, 1, 1), diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorBase.kt index 38cfa4170..d7f1a1887 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorBase.kt @@ -44,6 +44,8 @@ open class FixtureSwingingDoorBase : FixtureBase { private var tilewiseDistToAxis = tw - twClosed @Transient override val spawnNeedsWall = true + @Transient override val spawnNeedsFloor = false + @Transient override var lightBoxList = arrayListOf(Lightbox(Hitbox(TILE_SIZED * tilewiseDistToAxis, 0.0, TILE_SIZED * twClosed, TILE_SIZED * th), Cvec(0))) // the Cvec will be calculated dynamically on Update @Transient override var shadeBoxList = arrayListOf(Lightbox(Hitbox(TILE_SIZED * tilewiseDistToAxis, 0.0, TILE_SIZED * twClosed, TILE_SIZED * th), Cvec(0))) diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorRosewood.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorRosewood.kt index 95e19f0c1..01c41a568 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorRosewood.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSwingingDoorRosewood.kt @@ -7,7 +7,6 @@ import net.torvald.terrarum.blockproperties.Block * Created by minjaesong on 2022-07-28. */ class FixtureSwingingDoorOak : FixtureSwingingDoorBase { - @Transient override val spawnNeedsWall = true constructor() : super() { _construct( 2, @@ -25,7 +24,6 @@ class FixtureSwingingDoorOak : FixtureSwingingDoorBase { } class FixtureSwingingDoorEbony : FixtureSwingingDoorBase { - @Transient override val spawnNeedsWall = true constructor() : super() { _construct( 2, @@ -43,7 +41,6 @@ class FixtureSwingingDoorEbony : FixtureSwingingDoorBase { } class FixtureSwingingDoorBirch : FixtureSwingingDoorBase { - @Transient override val spawnNeedsWall = true constructor() : super() { _construct( 2, @@ -61,7 +58,6 @@ class FixtureSwingingDoorBirch : FixtureSwingingDoorBase { } class FixtureSwingingDoorRosewood : FixtureSwingingDoorBase { - @Transient override val spawnNeedsWall = true constructor() : super() { _construct( 2, diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt index 47fff7513..cc00da14d 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTapestry.kt @@ -19,6 +19,7 @@ import kotlin.properties.Delegates internal class FixtureTapestry : FixtureBase { @Transient override val spawnNeedsWall = true + @Transient override val spawnNeedsFloor = false var artName = ""; private set var artAuthor = ""; private set diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt index 1ca319860..81eed5669 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt @@ -20,7 +20,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ internal class FixtureTikiTorch : FixtureBase { - @Transient override val spawnNeedsFloor = true private val rndHash1 = (Math.random() * 256).toInt() private val rndHash2 = (Math.random() * 256).toInt() diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt index dab44d91c..4405e1ba6 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTypewriter.kt @@ -10,7 +10,6 @@ import kotlin.math.roundToInt */ class FixtureTypewriter : FixtureBase { - @Transient override val spawnNeedsFloor = true var typewriterKeymapName = "us_qwerty" // used to control the keyboard input behaviour private set diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWallCalendar.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWallCalendar.kt index aad9f0ba9..19c0cbc95 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWallCalendar.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWallCalendar.kt @@ -14,6 +14,7 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack class FixtureWallCalendar : FixtureBase { @Transient override val spawnNeedsWall = true + @Transient override val spawnNeedsFloor = false constructor() : super( BlockBox(BlockBox.NO_COLLISION, 1, 1), diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt index 647d5b2bf..3f1c0f8c9 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorkbench.kt @@ -17,7 +17,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ class FixtureWorkbench : FixtureBase, CraftingStation { - @Transient override val spawnNeedsFloor = true @Transient override val tags = listOf("basiccrafting") constructor() : super( diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt index fd7897da9..e3263c65c 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureWorldPortal.kt @@ -19,8 +19,6 @@ import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack */ class FixtureWorldPortal : Electric { - @Transient override val spawnNeedsFloor = true - constructor() : super( BlockBox(BlockBox.NO_COLLISION, 5, 2), nameFun = { Lang["ITEM_WORLD_PORTAL"] },