From cba8d903212849ecb942af192adb750f2b30a341 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 3 Dec 2023 00:14:04 +0900 Subject: [PATCH] sound effects for tile placing and breaking --- src/net/torvald/terrarum/audio/AudioMixer.kt | 2 ++ src/net/torvald/terrarum/gameactors/Actor.kt | 2 +- src/net/torvald/terrarum/gameactors/ActorWithBody.kt | 4 ++-- .../torvald/terrarum/modulebasegame/gameitems/AxeCore.kt | 1 + .../torvald/terrarum/modulebasegame/gameitems/BlockBase.kt | 1 + .../terrarum/modulebasegame/gameitems/PickaxeGeneric.kt | 7 +++++++ .../terrarum/modulebasegame/gameitems/SledgehammerCore.kt | 1 + 7 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/net/torvald/terrarum/audio/AudioMixer.kt b/src/net/torvald/terrarum/audio/AudioMixer.kt index ff1729f1f..7301ba8ed 100644 --- a/src/net/torvald/terrarum/audio/AudioMixer.kt +++ b/src/net/torvald/terrarum/audio/AudioMixer.kt @@ -200,6 +200,8 @@ object AudioMixer: Disposable { masterTrack.addSidechainInput(fadeBus, 1.0) masterTrack.addSidechainInput(guiTrack, 1.0) + musicTrack.filters[1] = Gain(0.5f) + dynamicTracks.forEach { it.filters[0] = BinoPan(0f) sfxSumBus.addSidechainInput(it, 1.0) diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index f3c91f98c..6029b1229 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -122,7 +122,7 @@ abstract class Actor : Comparable, Runnable { } } - printdbg(this, "Dynamic Source ${track?.name}") +// printdbg(this, "Dynamic Source ${track?.name}") return track } diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 990bd6e0f..4e86b13ca 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -588,7 +588,7 @@ open class ActorWithBody : Actor { // make some effects if (collisionStatus != 0) makeDust(collisionDamage, vecSum) - if (collisionStatus == COLLIDING_BOTTOM) + if (collisionStatus and COLLIDING_BOTTOM != 0) makeNoise(collisionDamage) } else { @@ -2049,7 +2049,7 @@ open class ActorWithBody : Actor { if (collisionDamage > 1.0 / 1024.0) { val feetTiles = getFeetTiles() val volumeMax = collisionDamage / 108 - val feetTileMats = feetTiles.slice(0 until feetTiles.size).map { BlockCodex[it.second].material } + val feetTileMats = feetTiles.slice(feetTiles.indices).map { BlockCodex[it.second].material } val feetTileCnt = feetTileMats.size.toDouble() val materialStats = feetTileMats.distinct().map { mat -> mat to feetTileMats.count { it == mat } } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt index c2354b4be..d946065ba 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/AxeCore.kt @@ -147,6 +147,7 @@ object AxeCore { // drop the item under cursor PickaxeCore.dropItem(BlockCodex[tileBroken].drop, x, y) // todo use log item if applicable PickaxeCore.makeDust(tile, x, y, 9) + PickaxeCore.makeNoise(actor, tile) } // tile not busted if (Math.random() < actionInterval) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt index 84502bfb6..44515b55a 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/BlockBase.kt @@ -70,6 +70,7 @@ object BlockBase { false ) } + PickaxeCore.makeNoise(actor, itemID) 1L } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt index 7aa68fb57..44b11b58b 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt @@ -105,6 +105,7 @@ object PickaxeCore { dropItem(drop, x, y) } makeDust(tile, x, y, 9) + makeNoise(actor, tile) } } // tile not busted @@ -166,6 +167,12 @@ object PickaxeCore { } } + fun makeNoise(actor: ActorWithBody, tile: ItemID) { + Terrarum.audioCodex.getRandomFootstep(BlockCodex[tile].material)?.let { + actor.startAudio(it, 2.0) + } + } + fun endPrimaryUse(actor: ActorWithBody, item: GameItem?): Boolean { item?.using = false // reset action timer to zero diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/SledgehammerCore.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/SledgehammerCore.kt index 64d669271..805f41261 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/SledgehammerCore.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/SledgehammerCore.kt @@ -104,6 +104,7 @@ object SledgehammerCore { PickaxeCore.dropItem("wall@$drop", x, y) } PickaxeCore.makeDust(wall, x, y, 9, WALL_OVERLAY_COLOUR) + PickaxeCore.makeNoise(actor, wall) } } // tile not busted