mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 10:34:06 +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.ui.UICanvas
|
||||||
import net.torvald.terrarum.utils.CSVFetcher
|
import net.torvald.terrarum.utils.CSVFetcher
|
||||||
import net.torvald.terrarum.utils.JsonFetcher
|
import net.torvald.terrarum.utils.JsonFetcher
|
||||||
import net.torvald.terrarum.utils.forEachSiblings
|
|
||||||
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
|
||||||
import org.apache.commons.codec.digest.DigestUtils
|
import org.apache.commons.codec.digest.DigestUtils
|
||||||
import org.apache.commons.csv.CSVFormat
|
import org.apache.commons.csv.CSVFormat
|
||||||
@@ -764,19 +763,18 @@ object ModMgr {
|
|||||||
|
|
||||||
private fun loadAudio(basename: String, file: FileHandle) {
|
private fun loadAudio(basename: String, file: FileHandle) {
|
||||||
if (file.isDirectory)
|
if (file.isDirectory)
|
||||||
file.list().forEach { loadAudio("$basename.${it.nameWithoutExtension()}", it) }
|
file.list().forEach { loadAudio("$basename.${it.name()}", it) }
|
||||||
else {
|
else {
|
||||||
val id = basename
|
val id = basename.substringBeforeLast('.').substringBeforeLast('.')
|
||||||
val materialID = file.nameWithoutExtension().substringBefore('_')
|
Terrarum.audioCodex.addToAudioPool(id, file)
|
||||||
Terrarum.audioCodex.addToFootstepPool(materialID, file)
|
printdbg(this, "Registering audio $id ($file)")
|
||||||
printdbg(this, "Registering music $id")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmStatic operator fun invoke(module: String) {
|
@JvmStatic operator fun invoke(module: String) {
|
||||||
audioPath.forEach {
|
audioPath.forEach {
|
||||||
if (getGdxFile(module, it).let { it.exists() && it.isDirectory }) {
|
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.modulebasegame.MusicContainer
|
||||||
import net.torvald.terrarum.tryDispose
|
import net.torvald.terrarum.tryDispose
|
||||||
|
|
||||||
typealias MaterialID = String
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by minjaesong on 2023-12-02.
|
* Created by minjaesong on 2023-12-02.
|
||||||
*/
|
*/
|
||||||
class AudioCodex {
|
class AudioCodex {
|
||||||
|
|
||||||
@Transient val footsteps = HashMap<MaterialID, HashSet<FileHandle>>()
|
@Transient val audio = HashMap<String, HashSet<FileHandle>>()
|
||||||
|
|
||||||
internal constructor()
|
internal constructor()
|
||||||
|
|
||||||
fun addToFootstepPool(materialID: MaterialID, music: FileHandle) {
|
/**
|
||||||
if (footsteps[materialID] == null) footsteps[materialID] = HashSet()
|
* The audio will be collected as one of many elements in the collection named `identifier`
|
||||||
footsteps[materialID]!!.add(music)
|
*
|
||||||
|
* @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? {
|
fun getRandomFootstep(materialID: String) = getRandomAudio("effects.steps.$materialID")
|
||||||
val file = footsteps[materialID]?.random()
|
|
||||||
|
/**
|
||||||
|
* @param identifier
|
||||||
|
*/
|
||||||
|
fun getRandomAudio(identifier: String): MusicContainer? {
|
||||||
|
val file = audio[identifier]?.random()
|
||||||
return if (file != null) {
|
return if (file != null) {
|
||||||
MusicContainer(file.nameWithoutExtension(), file.file(), Gdx.audio.newMusic(file)) {
|
MusicContainer(file.nameWithoutExtension(), file.file(), Gdx.audio.newMusic(file)) {
|
||||||
it.tryDispose()
|
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_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
|
||||||
import net.torvald.terrarum.audio.AudioCodex
|
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
import net.torvald.terrarum.blockproperties.BlockProp
|
import net.torvald.terrarum.blockproperties.BlockProp
|
||||||
import net.torvald.terrarum.gamecontroller.KeyToggler
|
import net.torvald.terrarum.gamecontroller.KeyToggler
|
||||||
|
|||||||
@@ -268,14 +268,13 @@ class TerrarumMusicGovernor : MusicGovernor() {
|
|||||||
musicBin = ArrayList(newMusicBin.toList())
|
musicBin = ArrayList(newMusicBin.toList())
|
||||||
}
|
}
|
||||||
|
|
||||||
private val ambients: List<MusicContainer> =
|
private val ambients: HashMap<String, HashSet<MusicContainer>> =
|
||||||
ModMgr.getFilesFromEveryMod("audio/ambient/").flatMap { it.second.listFiles()?.toList() ?: emptyList() }.mapNotNull {
|
HashMap(Terrarum.audioCodex.audio.filter { it.key.startsWith("ambient.") }.map { it.key to it.value.mapNotNull { fileHandle ->
|
||||||
printdbg(this, "Ambient: ${it.absolutePath}")
|
|
||||||
try {
|
try {
|
||||||
MusicContainer(
|
MusicContainer(
|
||||||
it.nameWithoutExtension.replace('_', ' ').split(" ").map { it.capitalize() }.joinToString(" "),
|
fileHandle.nameWithoutExtension().replace('_', ' ').split(" ").map { it.capitalize() }.joinToString(" "),
|
||||||
it,
|
fileHandle.file(),
|
||||||
Gdx.audio.newMusic(Gdx.files.absolute(it.absolutePath)).also {
|
Gdx.audio.newMusic(fileHandle).also {
|
||||||
it.isLooping = true
|
it.isLooping = true
|
||||||
}
|
}
|
||||||
) { stopAmbient() }
|
) { stopAmbient() }
|
||||||
@@ -284,7 +283,7 @@ class TerrarumMusicGovernor : MusicGovernor() {
|
|||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
}
|
}.toHashSet() }.toMap())
|
||||||
|
|
||||||
private val musicStartHooks = ArrayList<(MusicContainer) -> Unit>()
|
private val musicStartHooks = ArrayList<(MusicContainer) -> Unit>()
|
||||||
private val musicStopHooks = ArrayList<(MusicContainer) -> Unit>()
|
private val musicStopHooks = ArrayList<(MusicContainer) -> Unit>()
|
||||||
@@ -306,8 +305,12 @@ class TerrarumMusicGovernor : MusicGovernor() {
|
|||||||
songs.forEach {
|
songs.forEach {
|
||||||
App.disposables.add(it.gdxMusic)
|
App.disposables.add(it.gdxMusic)
|
||||||
}
|
}
|
||||||
ambients.forEach {
|
ambients.forEach { (k, v) ->
|
||||||
App.disposables.add(it.gdxMusic)
|
printdbg(this, "Ambients: $k -> $v")
|
||||||
|
|
||||||
|
v.forEach {
|
||||||
|
App.disposables.add(it.gdxMusic)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -368,7 +371,8 @@ class TerrarumMusicGovernor : MusicGovernor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun stopAmbient() {
|
private fun stopAmbient() {
|
||||||
App.audioMixer.ambientTrack.nextTrack = currentAmbientTrack
|
if (::currentAmbientTrack.isInitialized)
|
||||||
|
App.audioMixer.ambientTrack.nextTrack = currentAmbientTrack
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun startAmbient(song: MusicContainer) {
|
private fun startAmbient(song: MusicContainer) {
|
||||||
@@ -419,8 +423,8 @@ class TerrarumMusicGovernor : MusicGovernor() {
|
|||||||
in 3f..5f -> "autumn"
|
in 3f..5f -> "autumn"
|
||||||
else -> "winter"
|
else -> "winter"
|
||||||
}
|
}
|
||||||
val track = ambients.filter { it.name.lowercase().startsWith(seasonName) }.random()
|
|
||||||
|
|
||||||
|
val track = ambients["ambient.season.$seasonName"]!!.random()
|
||||||
startAmbient(track)
|
startAmbient(track)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package net.torvald.terrarum.modulebasegame.gameitems
|
|||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
import com.badlogic.gdx.graphics.g2d.TextureRegion
|
||||||
import net.torvald.terrarum.*
|
import net.torvald.terrarum.*
|
||||||
import net.torvald.terrarum.App.printdbg
|
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.blockproperties.Block
|
import net.torvald.terrarum.blockproperties.Block
|
||||||
|
|||||||
Reference in New Issue
Block a user