mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-19 06:54:05 +09:00
footsteps using dynamic track wip
This commit is contained in:
@@ -3,11 +3,13 @@ package net.torvald.terrarum.gameactors
|
||||
import com.badlogic.gdx.audio.Music
|
||||
import com.badlogic.gdx.audio.Sound
|
||||
import net.torvald.random.HQRNG
|
||||
import net.torvald.terrarum.App.printdbg
|
||||
import net.torvald.terrarum.INGAME
|
||||
import net.torvald.terrarum.ReferencingRanges
|
||||
import net.torvald.terrarum.Terrarum
|
||||
import net.torvald.terrarum.audio.AudioMixer
|
||||
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
|
||||
import net.torvald.terrarum.audio.TrackVolume
|
||||
import net.torvald.terrarum.modulebasegame.MusicContainer
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid
|
||||
import net.torvald.terrarum.modulebasegame.gameactors.Pocketed
|
||||
@@ -120,13 +122,17 @@ abstract class Actor : Comparable<Actor>, Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
printdbg(this, "Dynamic Source ${track?.name}")
|
||||
|
||||
return track
|
||||
}
|
||||
|
||||
open fun startAudio(music: MusicContainer) {
|
||||
open fun startAudio(music: MusicContainer, volume: TrackVolume = 1.0) {
|
||||
getTrackByAudio(music)?.let {
|
||||
it.trackingTarget = if (this is ActorWithBody) this else null
|
||||
it.stop()
|
||||
it.trackingTarget = this
|
||||
it.currentTrack = music
|
||||
it.maxVolumeFun = { volume }
|
||||
it.play()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import net.torvald.terrarum.App.printdbg
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
||||
import net.torvald.terrarum.audio.AudioCodex
|
||||
import net.torvald.terrarum.blockproperties.Block
|
||||
import net.torvald.terrarum.blockproperties.BlockProp
|
||||
import net.torvald.terrarum.gamecontroller.KeyToggler
|
||||
@@ -2041,6 +2042,20 @@ open class ActorWithBody : Actor {
|
||||
makeDust0(tile, px, py, particleCount, collisionDamage, vecSum)
|
||||
}
|
||||
}
|
||||
|
||||
if (particleCount >= 1.0) {
|
||||
val volumeMax = (particleCount.pow(0.75) / 8.0).coerceIn(0.0, 2.0)
|
||||
val feetTileMats = feetTiles.map { BlockCodex[it.second].material }
|
||||
val feetTileCnt = feetTileMats.size.toDouble()
|
||||
val materialStats = feetTileMats.distinct().map { mat -> mat to feetTileMats.count { it == mat } }
|
||||
materialStats.forEach { (mat, cnt) ->
|
||||
Terrarum.audioCodex.getRandomFootstep(mat)?.let {
|
||||
val vol = volumeMax * (cnt / feetTileCnt)
|
||||
startAudio(it, vol)
|
||||
printdbg(this, "Playing footstep $mat (vol: $vol, file: ${it.file.name})")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user