diff --git a/assets/mods/basegame/audio/ambient/autumn1.ogg b/assets/mods/basegame/audio/ambient/season/autumn.1.ogg similarity index 100% rename from assets/mods/basegame/audio/ambient/autumn1.ogg rename to assets/mods/basegame/audio/ambient/season/autumn.1.ogg diff --git a/assets/mods/basegame/audio/ambient/summer1.ogg b/assets/mods/basegame/audio/ambient/season/summer.1.ogg similarity index 100% rename from assets/mods/basegame/audio/ambient/summer1.ogg rename to assets/mods/basegame/audio/ambient/season/summer.1.ogg diff --git a/assets/mods/basegame/audio/ambient/winter1.ogg b/assets/mods/basegame/audio/ambient/season/winter.1.ogg similarity index 100% rename from assets/mods/basegame/audio/ambient/winter1.ogg rename to assets/mods/basegame/audio/ambient/season/winter.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/DIRT_1.ogg b/assets/mods/basegame/audio/effects/steps/DIRT.1.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/DIRT_1.ogg rename to assets/mods/basegame/audio/effects/steps/DIRT.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/DIRT_2.ogg b/assets/mods/basegame/audio/effects/steps/DIRT.2.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/DIRT_2.ogg rename to assets/mods/basegame/audio/effects/steps/DIRT.2.ogg diff --git a/assets/mods/basegame/audio/effects/steps/DIRT_3.ogg b/assets/mods/basegame/audio/effects/steps/DIRT.3.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/DIRT_3.ogg rename to assets/mods/basegame/audio/effects/steps/DIRT.3.ogg diff --git a/assets/mods/basegame/audio/effects/steps/DIRT_4.ogg b/assets/mods/basegame/audio/effects/steps/DIRT.4.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/DIRT_4.ogg rename to assets/mods/basegame/audio/effects/steps/DIRT.4.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRSS_1.ogg b/assets/mods/basegame/audio/effects/steps/GRSS.1.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRSS_1.ogg rename to assets/mods/basegame/audio/effects/steps/GRSS.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRSS_2.ogg b/assets/mods/basegame/audio/effects/steps/GRSS.2.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRSS_2.ogg rename to assets/mods/basegame/audio/effects/steps/GRSS.2.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRSS_3.ogg b/assets/mods/basegame/audio/effects/steps/GRSS.3.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRSS_3.ogg rename to assets/mods/basegame/audio/effects/steps/GRSS.3.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRSS_4.ogg b/assets/mods/basegame/audio/effects/steps/GRSS.4.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRSS_4.ogg rename to assets/mods/basegame/audio/effects/steps/GRSS.4.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRSS_5.ogg b/assets/mods/basegame/audio/effects/steps/GRSS.5.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRSS_5.ogg rename to assets/mods/basegame/audio/effects/steps/GRSS.5.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRSS_6.ogg b/assets/mods/basegame/audio/effects/steps/GRSS.6.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRSS_6.ogg rename to assets/mods/basegame/audio/effects/steps/GRSS.6.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_1.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.1.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_1.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_2.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.2.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_2.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.2.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_3.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.3.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_3.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.3.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_4.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.4.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_4.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.4.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_5.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.5.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_5.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.5.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_6.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.6.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_6.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.6.ogg diff --git a/assets/mods/basegame/audio/effects/steps/GRVL_7.ogg b/assets/mods/basegame/audio/effects/steps/GRVL.7.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/GRVL_7.ogg rename to assets/mods/basegame/audio/effects/steps/GRVL.7.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_1.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.1.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_1.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_2.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.2.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_2.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.2.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_3.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.3.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_3.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.3.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_4.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.4.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_4.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.4.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_5.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.5.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_5.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.5.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_6.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.6.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_6.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.6.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_7.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.7.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_7.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.7.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_8.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.8.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_8.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.8.ogg diff --git a/assets/mods/basegame/audio/effects/steps/ROCK_9.ogg b/assets/mods/basegame/audio/effects/steps/ROCK.9.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/ROCK_9.ogg rename to assets/mods/basegame/audio/effects/steps/ROCK.9.ogg diff --git a/assets/mods/basegame/audio/effects/steps/SAND_1.ogg b/assets/mods/basegame/audio/effects/steps/SAND.1.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/SAND_1.ogg rename to assets/mods/basegame/audio/effects/steps/SAND.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/SAND_2.ogg b/assets/mods/basegame/audio/effects/steps/SAND.2.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/SAND_2.ogg rename to assets/mods/basegame/audio/effects/steps/SAND.2.ogg diff --git a/assets/mods/basegame/audio/effects/steps/SAND_3.ogg b/assets/mods/basegame/audio/effects/steps/SAND.3.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/SAND_3.ogg rename to assets/mods/basegame/audio/effects/steps/SAND.3.ogg diff --git a/assets/mods/basegame/audio/effects/steps/SAND_4.ogg b/assets/mods/basegame/audio/effects/steps/SAND.4.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/SAND_4.ogg rename to assets/mods/basegame/audio/effects/steps/SAND.4.ogg diff --git a/assets/mods/basegame/audio/effects/steps/WOOD_1.ogg b/assets/mods/basegame/audio/effects/steps/WOOD.1.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/WOOD_1.ogg rename to assets/mods/basegame/audio/effects/steps/WOOD.1.ogg diff --git a/assets/mods/basegame/audio/effects/steps/WOOD_2.ogg b/assets/mods/basegame/audio/effects/steps/WOOD.2.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/WOOD_2.ogg rename to assets/mods/basegame/audio/effects/steps/WOOD.2.ogg diff --git a/assets/mods/basegame/audio/effects/steps/WOOD_3.ogg b/assets/mods/basegame/audio/effects/steps/WOOD.3.ogg similarity index 100% rename from assets/mods/basegame/audio/effects/steps/WOOD_3.ogg rename to assets/mods/basegame/audio/effects/steps/WOOD.3.ogg diff --git a/src/net/torvald/terrarum/ModMgr.kt b/src/net/torvald/terrarum/ModMgr.kt index b88dfb766..93ff12132 100644 --- a/src/net/torvald/terrarum/ModMgr.kt +++ b/src/net/torvald/terrarum/ModMgr.kt @@ -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) } } } } diff --git a/src/net/torvald/terrarum/audio/AudioCodex.kt b/src/net/torvald/terrarum/audio/AudioCodex.kt index 67d5a82a0..369b07b2e 100644 --- a/src/net/torvald/terrarum/audio/AudioCodex.kt +++ b/src/net/torvald/terrarum/audio/AudioCodex.kt @@ -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>() + @Transient val audio = HashMap>() 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() diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index 29c416317..f7f429442 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -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 diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt index f418dfbcf..7b29393a2 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt @@ -268,14 +268,13 @@ class TerrarumMusicGovernor : MusicGovernor() { musicBin = ArrayList(newMusicBin.toList()) } - private val ambients: List = - ModMgr.getFilesFromEveryMod("audio/ambient/").flatMap { it.second.listFiles()?.toList() ?: emptyList() }.mapNotNull { - printdbg(this, "Ambient: ${it.absolutePath}") + private val ambients: HashMap> = + 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) } } diff --git a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt index 44b11b58b..371275e34 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameitems/PickaxeGeneric.kt @@ -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