more transaction-based music disk jockeying wip

This commit is contained in:
minjaesong
2024-07-06 20:58:23 +09:00
parent ff433703f4
commit 90f7e82325
11 changed files with 59 additions and 91 deletions

View File

@@ -62,7 +62,7 @@ class BuildingMaker(batch: FlippingSpriteBatch) : IngameInstance(batch) {
lateinit var gameWorld: GameWorld
override val musicStreamer = TerrarumMusicStreamer()
override val musicStreamer = TerrarumMusicAndAmbientStreamer()
init {
gameUpdateGovernor = ConsistentUpdateRate

View File

@@ -262,7 +262,7 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) {
override var gameFullyLoaded = false
internal set
override val musicStreamer = TerrarumMusicStreamer()
override val musicStreamer = TerrarumMusicAndAmbientStreamer()
//////////////

View File

@@ -4,14 +4,11 @@ import com.badlogic.gdx.utils.GdxRuntimeException
import com.jme3.math.FastMath
import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
import net.torvald.terrarum.audio.AudioBank
import net.torvald.terrarum.audio.AudioMixer
import net.torvald.terrarum.audio.audiobank.MusicContainer
import net.torvald.terrarum.gameworld.WorldTime.Companion.DAY_LENGTH
import java.io.File
class TerrarumMusicStreamer : MusicStreamer() {
class TerrarumMusicAndAmbientStreamer : MusicStreamer() {
private val STATE_INIT = 0
private val STATE_FIREPLAY = 1
private val STATE_PLAYING = 2
@@ -19,7 +16,6 @@ class TerrarumMusicStreamer : MusicStreamer() {
init {
musicState = STATE_INTERMISSION
}
private var playlist: List<MusicContainer> = emptyList()
@@ -198,40 +194,9 @@ class TerrarumMusicStreamer : MusicStreamer() {
// start the song queueing if there is one to play
if (firstTime) {
firstTime = false
if (playlist.isNotEmpty()) musicState = STATE_INTERMISSION
if (ambients.isNotEmpty()) ambState = STATE_INTERMISSION
}
when (musicState) {
STATE_FIREPLAY -> {
if (!musicFired) {
MusicService.resumePlaylistPlayback(
// onSuccess: () -> Unit
{
musicFired = true
musicState = STATE_PLAYING
},
// onFailure: (Throwable) -> Unit
{
musicFired = false
musicState = STATE_INTERMISSION
},
)
}
}
STATE_PLAYING -> {
// stopMusic() will be called when the music finishes; it's on the setOnCompletionListener
}
STATE_INTERMISSION -> {
intermissionAkku += delta
if (intermissionAkku >= intermissionLength && playlist.isNotEmpty()) {
intermissionAkku = 0f
musicState = STATE_FIREPLAY
}
}
}
val season = ingame.world.worldTime.ecologicalSeason
val isAM = (ingame.world.worldTime.todaySeconds < DAY_LENGTH / 2) // 0 until DAY_LENGTH (86400)
val solarElevDeg = ingame.world.worldTime.solarElevationDeg

View File

@@ -19,7 +19,6 @@ import net.torvald.terrarum.gameactors.Hitbox
import net.torvald.terrarum.gameactors.Lightbox
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.TerrarumMusicStreamer
import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase
import net.torvald.terrarum.modulebasegame.gameitems.ItemFileRef
import net.torvald.terrarum.modulebasegame.gameitems.MusicDiscHelper

View File

@@ -9,7 +9,6 @@ import net.torvald.terrarum.gameactors.AVKey
import net.torvald.terrarum.gameitems.GameItem
import net.torvald.terrarum.gameitems.ItemID
import net.torvald.terrarum.langpack.Lang
import net.torvald.terrarum.modulebasegame.TerrarumMusicStreamer
import net.torvald.terrarum.modulebasegame.gameitems.FixtureItemBase
import net.torvald.terrarum.modulebasegame.gameitems.ItemFileRef
import net.torvald.terrarum.modulebasegame.gameitems.MusicDiscHelper
@@ -125,7 +124,6 @@ class FixtureMusicalTurntable : Electric, PlaysMusic {
MusicService.playMusicalFixture(
/* action: () -> Unit */ {
App.printdbg(this, "call startAudio(${musicNowPlaying?.name})")
startAudio(musicNowPlaying!!) { loadEffector(it) }
},
/* musicFinished: () -> Boolean */ {
@@ -151,9 +149,12 @@ class FixtureMusicalTurntable : Electric, PlaysMusic {
fun stopGracefully() {
stopDiscPlayback()
try {
MusicService.enterIntermission()
if (musicIsPlaying)
MusicService.enterIntermission()
}
catch (e: Throwable) {
e.printStackTrace()
}
catch (_: Throwable) {}
}
private fun stopDiscPlayback() {