diff --git a/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt b/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt index 1a6543921..7c0b04810 100644 --- a/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt +++ b/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt @@ -91,7 +91,7 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() { track.doGaplessPlayback = (diskJockeyingMode == "continuous") if (track.doGaplessPlayback) { track.pullNextTrack = { - track.currentTrack = ingame.musicGovernor.pullNextMusicTrack() + track.currentTrack = ingame.musicGovernor.pullNextMusicTrack(true) setMusicName(track.currentTrack?.name ?: "") } } @@ -113,13 +113,15 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() { ingame.musicGovernor.addMusicStartHook { music -> setMusicName(music.name) - transitionRequest = MODE_PLAYING + if (mode <= MODE_PLAYING) + transitionRequest = MODE_PLAYING } ingame.musicGovernor.addMusicStopHook { music -> if (diskJockeyingMode == "intermittent") { setIntermission() - transitionRequest = MODE_IDLE + if (mode <= MODE_PLAYING) + transitionRequest = MODE_IDLE } else if (diskJockeyingMode == "continuous") { @@ -287,14 +289,15 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() { private var _posX = 0f // not using provided `posX` as there is one frame delay between update and it actually used to drawing private var _posY = 0f - private var _posXnonStretched = 0f // posXY on PLAYING status + private var widthForFreqMeter = 0 + private var posXforMusicLine = 0f override val mouseUp: Boolean get() = relativeMouseX.toFloat() in _posX-capsuleMosaicSize .. _posX+width+capsuleMosaicSize && relativeMouseY.toFloat() in _posY .. _posY+height override fun renderUI(batch: SpriteBatch, camera: OrthographicCamera) { - val widthForFreqMeter = if (transitionOngoing && modeNext >= MODE_MOUSE_UP || mode >= MODE_MOUSE_UP) + widthForFreqMeter = if (transitionOngoing && modeNext >= MODE_MOUSE_UP || mode >= MODE_MOUSE_UP) uiWidthFromTextWidth(nameLength) else width @@ -308,10 +311,10 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() { _posX = ((Toolkit.drawWidth - width) / 2).toFloat() _posY = (App.scr.height - App.scr.tvSafeGraphicsHeight - height).toFloat() - _posXnonStretched = ((Toolkit.drawWidth - uiWidthFromTextWidth(nameLength)) / 2).toFloat() + val _posXnonStretched = ((Toolkit.drawWidth - uiWidthFromTextWidth(nameLength)) / 2).toFloat() - val posXforMusicLine = if (transitionOngoing && modeNext >= MODE_MOUSE_UP || mode >= MODE_MOUSE_UP) + posXforMusicLine = if (transitionOngoing && modeNext >= MODE_MOUSE_UP || mode >= MODE_MOUSE_UP) _posXnonStretched else _posX diff --git a/src/net/torvald/terrarum/audio/AudioMixer.kt b/src/net/torvald/terrarum/audio/AudioMixer.kt index 6a3369ad4..1e74e8483 100644 --- a/src/net/torvald/terrarum/audio/AudioMixer.kt +++ b/src/net/torvald/terrarum/audio/AudioMixer.kt @@ -179,8 +179,10 @@ object AudioMixer: Disposable { masterTrack.filters[2] = Spectro() masterTrack.filters[3] = Vecto(2f) - musicTrack.filters[1] = Spectro() - ambientTrack.filters[1] = Spectro() + musicTrack.filters[1] = Vecto() + musicTrack.filters[2] = Spectro() + ambientTrack.filters[1] = Vecto() + ambientTrack.filters[2] = Spectro() listOf(sumBus, convolveBusOpen, convolveBusCave).forEach { it.addSidechainInput(musicTrack, 1.0) diff --git a/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt b/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt index f792b9eca..dd9c3830c 100644 --- a/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt +++ b/src/net/torvald/terrarum/modulebasegame/TerrarumMusicGovernor.kt @@ -277,12 +277,14 @@ class TerrarumMusicGovernor : MusicGovernor() { } // MixerTrackProcessor will call this function externally to make gapless playback work - fun pullNextMusicTrack(): MusicContainer { + fun pullNextMusicTrack(callNextMusicHook: Boolean = false): MusicContainer { // prevent same song to play twice in row (for the most time) if (musicBin.isEmpty()) { restockMUsicBin() } - return songs[musicBin.removeAt(0)] + return songs[musicBin.removeAt(0)].also { mus -> + if (musicStartHooks.isNotEmpty()) musicStartHooks.forEach { it(mus) } + } } // MixerTrackProcessor will call this function externally to make gapless playback work