mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
better foley addressing
This commit is contained in:
@@ -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) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user