mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-11 02:54:04 +09:00
transition anim for gapless play
This commit is contained in:
@@ -91,7 +91,7 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() {
|
|||||||
track.doGaplessPlayback = (diskJockeyingMode == "continuous")
|
track.doGaplessPlayback = (diskJockeyingMode == "continuous")
|
||||||
if (track.doGaplessPlayback) {
|
if (track.doGaplessPlayback) {
|
||||||
track.pullNextTrack = {
|
track.pullNextTrack = {
|
||||||
track.currentTrack = ingame.musicGovernor.pullNextMusicTrack()
|
track.currentTrack = ingame.musicGovernor.pullNextMusicTrack(true)
|
||||||
setMusicName(track.currentTrack?.name ?: "")
|
setMusicName(track.currentTrack?.name ?: "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -113,13 +113,15 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() {
|
|||||||
|
|
||||||
ingame.musicGovernor.addMusicStartHook { music ->
|
ingame.musicGovernor.addMusicStartHook { music ->
|
||||||
setMusicName(music.name)
|
setMusicName(music.name)
|
||||||
transitionRequest = MODE_PLAYING
|
if (mode <= MODE_PLAYING)
|
||||||
|
transitionRequest = MODE_PLAYING
|
||||||
}
|
}
|
||||||
|
|
||||||
ingame.musicGovernor.addMusicStopHook { music ->
|
ingame.musicGovernor.addMusicStopHook { music ->
|
||||||
if (diskJockeyingMode == "intermittent") {
|
if (diskJockeyingMode == "intermittent") {
|
||||||
setIntermission()
|
setIntermission()
|
||||||
transitionRequest = MODE_IDLE
|
if (mode <= MODE_PLAYING)
|
||||||
|
transitionRequest = MODE_IDLE
|
||||||
}
|
}
|
||||||
else if (diskJockeyingMode == "continuous") {
|
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 _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 _posY = 0f
|
||||||
|
|
||||||
private var _posXnonStretched = 0f // posXY on PLAYING status
|
private var widthForFreqMeter = 0
|
||||||
|
private var posXforMusicLine = 0f
|
||||||
|
|
||||||
override val mouseUp: Boolean
|
override val mouseUp: Boolean
|
||||||
get() = relativeMouseX.toFloat() in _posX-capsuleMosaicSize .. _posX+width+capsuleMosaicSize &&
|
get() = relativeMouseX.toFloat() in _posX-capsuleMosaicSize .. _posX+width+capsuleMosaicSize &&
|
||||||
relativeMouseY.toFloat() in _posY .. _posY+height
|
relativeMouseY.toFloat() in _posY .. _posY+height
|
||||||
|
|
||||||
override fun renderUI(batch: SpriteBatch, camera: OrthographicCamera) {
|
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)
|
uiWidthFromTextWidth(nameLength)
|
||||||
else
|
else
|
||||||
width
|
width
|
||||||
@@ -308,10 +311,10 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() {
|
|||||||
|
|
||||||
_posX = ((Toolkit.drawWidth - width) / 2).toFloat()
|
_posX = ((Toolkit.drawWidth - width) / 2).toFloat()
|
||||||
_posY = (App.scr.height - App.scr.tvSafeGraphicsHeight - height).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
|
_posXnonStretched
|
||||||
else
|
else
|
||||||
_posX
|
_posX
|
||||||
|
|||||||
@@ -179,8 +179,10 @@ object AudioMixer: Disposable {
|
|||||||
masterTrack.filters[2] = Spectro()
|
masterTrack.filters[2] = Spectro()
|
||||||
masterTrack.filters[3] = Vecto(2f)
|
masterTrack.filters[3] = Vecto(2f)
|
||||||
|
|
||||||
musicTrack.filters[1] = Spectro()
|
musicTrack.filters[1] = Vecto()
|
||||||
ambientTrack.filters[1] = Spectro()
|
musicTrack.filters[2] = Spectro()
|
||||||
|
ambientTrack.filters[1] = Vecto()
|
||||||
|
ambientTrack.filters[2] = Spectro()
|
||||||
|
|
||||||
listOf(sumBus, convolveBusOpen, convolveBusCave).forEach {
|
listOf(sumBus, convolveBusOpen, convolveBusCave).forEach {
|
||||||
it.addSidechainInput(musicTrack, 1.0)
|
it.addSidechainInput(musicTrack, 1.0)
|
||||||
|
|||||||
@@ -277,12 +277,14 @@ class TerrarumMusicGovernor : MusicGovernor() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MixerTrackProcessor will call this function externally to make gapless playback work
|
// 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)
|
// prevent same song to play twice in row (for the most time)
|
||||||
if (musicBin.isEmpty()) {
|
if (musicBin.isEmpty()) {
|
||||||
restockMUsicBin()
|
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
|
// MixerTrackProcessor will call this function externally to make gapless playback work
|
||||||
|
|||||||
Reference in New Issue
Block a user