You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gamejam-22/core/src/main/kotlin/com/last/commit/audio/SoundEngine.kt

81 lines
2.0 KiB
Kotlin

package com.last.commit.audio
import com.badlogic.gdx.audio.Music
import com.badlogic.gdx.audio.Sound
import com.last.commit.TimeTravelAssetManager
object SoundEngine {
var sfxVolume = 1.0f
var musicVolume = 1.0f
set(newValue) {
field = newValue
resume()
}
fun play(gameSound: String) {
when (gameSound) {
"STEPS_INDOOR" -> {
val soundName = listOf(
"steps/steps_indoor_1.mp3",
"steps/steps_indoor_2.mp3",
"steps/steps_indoor_3.mp3",
).random()
val sound = loadEffect(soundName)
sound.play(sfxVolume)
}
"DOOR_OPEN" -> {
val sound = loadEffect("door_open.mp3")
sound.play(sfxVolume)
}
"DOOR_CLOSE" -> {
val sound = loadEffect("door_close.mp3")
sound.play(sfxVolume)
}
"TIME_TRAVEL" -> {
val sound = loadEffect("time_travel.mp3")
sound.play(sfxVolume)
}
"GRAB" -> {
val sound = loadEffect("grab.mp3")
sound.play(sfxVolume)
}
"BACKGROUND_MUSIC" -> {
loadMusic("world_music.mp3").play()
}
else -> {
println("Could not find sound/music $gameSound")
}
}
}
fun stop() {
loadMusic("world_music.mp3").pause()
}
fun resume() {
loadMusic("world_music.mp3").volume = musicVolume
if (!loadMusic("world_music.mp3").isPlaying) {
loadMusic("world_music.mp3").play()
}
}
private fun loadEffect(name: String): Sound {
return loadSound("effects/$name")
}
private fun loadMusic(name: String): Music {
return TimeTravelAssetManager.get("sounds/music/$name")
}
private fun loadSound(name: String): Sound {
return TimeTravelAssetManager.get("sounds/$name")
}
}