better foley addressing

This commit is contained in:
minjaesong
2024-01-20 20:55:52 +09:00
parent 949ff841de
commit c66e4077bf
41 changed files with 36 additions and 28 deletions

View File

@@ -27,7 +27,6 @@ import net.torvald.terrarum.serialise.Common
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.utils.CSVFetcher
import net.torvald.terrarum.utils.JsonFetcher
import net.torvald.terrarum.utils.forEachSiblings
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import org.apache.commons.codec.digest.DigestUtils
import org.apache.commons.csv.CSVFormat
@@ -764,19 +763,18 @@ object ModMgr {
private fun loadAudio(basename: String, file: FileHandle) {
if (file.isDirectory)
file.list().forEach { loadAudio("$basename.${it.nameWithoutExtension()}", it) }
file.list().forEach { loadAudio("$basename.${it.name()}", it) }
else {
val id = basename
val materialID = file.nameWithoutExtension().substringBefore('_')
Terrarum.audioCodex.addToFootstepPool(materialID, file)
printdbg(this, "Registering music $id")
val id = basename.substringBeforeLast('.').substringBeforeLast('.')
Terrarum.audioCodex.addToAudioPool(id, file)
printdbg(this, "Registering audio $id ($file)")
}
}
@JvmStatic operator fun invoke(module: String) {
audioPath.forEach {
if (getGdxFile(module, it).let { it.exists() && it.isDirectory }) {
getGdxFiles(module, it).forEach { file -> loadAudio("audio.${file.name()}", file) }
getGdxFiles(module, it).forEach { file -> loadAudio("${it.substringAfter("audio/")}.${file.name()}", file) }
}
}
}

View File

@@ -5,24 +5,32 @@ import com.badlogic.gdx.files.FileHandle
import net.torvald.terrarum.modulebasegame.MusicContainer
import net.torvald.terrarum.tryDispose
typealias MaterialID = String
/**
* Created by minjaesong on 2023-12-02.
*/
class AudioCodex {
@Transient val footsteps = HashMap<MaterialID, HashSet<FileHandle>>()
@Transient val audio = HashMap<String, HashSet<FileHandle>>()
internal constructor()
fun addToFootstepPool(materialID: MaterialID, music: FileHandle) {
if (footsteps[materialID] == null) footsteps[materialID] = HashSet()
footsteps[materialID]!!.add(music)
/**
* The audio will be collected as one of many elements in the collection named `identifier`
*
* @param identifier identifier of the music, WITHOUT a serial number
*/
fun addToAudioPool(identifier: String, music: FileHandle) {
if (audio[identifier] == null) audio[identifier] = HashSet()
audio[identifier]!!.add(music)
}
fun getRandomFootstep(materialID: MaterialID): MusicContainer? {
val file = footsteps[materialID]?.random()
fun getRandomFootstep(materialID: String) = getRandomAudio("effects.steps.$materialID")
/**
* @param identifier
*/
fun getRandomAudio(identifier: String): MusicContainer? {
val file = audio[identifier]?.random()
return if (file != null) {
MusicContainer(file.nameWithoutExtension(), file.file(), Gdx.audio.newMusic(file)) {
it.tryDispose()

View File

@@ -11,7 +11,6 @@ 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

View File

@@ -268,14 +268,13 @@ class TerrarumMusicGovernor : MusicGovernor() {
musicBin = ArrayList(newMusicBin.toList())
}
private val ambients: List<MusicContainer> =
ModMgr.getFilesFromEveryMod("audio/ambient/").flatMap { it.second.listFiles()?.toList() ?: emptyList() }.mapNotNull {
printdbg(this, "Ambient: ${it.absolutePath}")
private val ambients: HashMap<String, HashSet<MusicContainer>> =
HashMap(Terrarum.audioCodex.audio.filter { it.key.startsWith("ambient.") }.map { it.key to it.value.mapNotNull { fileHandle ->
try {
MusicContainer(
it.nameWithoutExtension.replace('_', ' ').split(" ").map { it.capitalize() }.joinToString(" "),
it,
Gdx.audio.newMusic(Gdx.files.absolute(it.absolutePath)).also {
fileHandle.nameWithoutExtension().replace('_', ' ').split(" ").map { it.capitalize() }.joinToString(" "),
fileHandle.file(),
Gdx.audio.newMusic(fileHandle).also {
it.isLooping = true
}
) { stopAmbient() }
@@ -284,7 +283,7 @@ class TerrarumMusicGovernor : MusicGovernor() {
e.printStackTrace()
null
}
}
}.toHashSet() }.toMap())
private val musicStartHooks = ArrayList<(MusicContainer) -> Unit>()
private val musicStopHooks = ArrayList<(MusicContainer) -> Unit>()
@@ -306,8 +305,12 @@ class TerrarumMusicGovernor : MusicGovernor() {
songs.forEach {
App.disposables.add(it.gdxMusic)
}
ambients.forEach {
App.disposables.add(it.gdxMusic)
ambients.forEach { (k, v) ->
printdbg(this, "Ambients: $k -> $v")
v.forEach {
App.disposables.add(it.gdxMusic)
}
}
}
@@ -368,7 +371,8 @@ class TerrarumMusicGovernor : MusicGovernor() {
}
private fun stopAmbient() {
App.audioMixer.ambientTrack.nextTrack = currentAmbientTrack
if (::currentAmbientTrack.isInitialized)
App.audioMixer.ambientTrack.nextTrack = currentAmbientTrack
}
private fun startAmbient(song: MusicContainer) {
@@ -419,8 +423,8 @@ class TerrarumMusicGovernor : MusicGovernor() {
in 3f..5f -> "autumn"
else -> "winter"
}
val track = ambients.filter { it.name.lowercase().startsWith(seasonName) }.random()
val track = ambients["ambient.season.$seasonName"]!!.random()
startAmbient(track)
}
}

View File

@@ -3,7 +3,6 @@ package net.torvald.terrarum.modulebasegame.gameitems
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
import net.torvald.terrarum.blockproperties.Block