|
@@ -304,17 +304,56 @@ RIX_Play(
|
|
|
|
|
|
SOUND_PlayCDA(-1);
|
|
|
|
|
|
- pRixPlayer->fNextLoop = fLoop;
|
|
|
-
|
|
|
- if (iNumRIX == pRixPlayer->iCurrentMusic)
|
|
|
+ if (iNumRIX == pRixPlayer->iCurrentMusic && pRixPlayer->iNextMusic == -1)
|
|
|
{
|
|
|
+
|
|
|
+ just change the loop attribute */
|
|
|
+ pRixPlayer->fLoop = fLoop;
|
|
|
return TRUE;
|
|
|
}
|
|
|
|
|
|
+ if (pRixPlayer->FadeType != RIXPLAYER::NONE)
|
|
|
+ {
|
|
|
+
|
|
|
+ Start time should be adjusted for a seamless effect. */
|
|
|
+ DWORD dwFadeLength = (DWORD)(flFadeTime * 1000) / 2, now = SDL_GetTicks();
|
|
|
+ if (pRixPlayer->FadeType == RIXPLAYER::FADE_OUT)
|
|
|
+ {
|
|
|
+ if (now >= pRixPlayer->dwStartFadeTime + pRixPlayer->dwFadeLength)
|
|
|
+ {
|
|
|
+
|
|
|
+ pRixPlayer->dwStartFadeTime = now - dwFadeLength;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ pRixPlayer->dwStartFadeTime = now - (DWORD)ceil((double)dwFadeLength * (now - pRixPlayer->dwStartFadeTime) / pRixPlayer->dwFadeLength);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if (now >= pRixPlayer->dwStartFadeTime + pRixPlayer->dwFadeLength)
|
|
|
+ {
|
|
|
+
|
|
|
+ pRixPlayer->dwStartFadeTime = now;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ pRixPlayer->dwStartFadeTime = now - (DWORD)ceil((double)dwFadeLength * (1.0 - (double)(now - pRixPlayer->dwStartFadeTime) / pRixPlayer->dwFadeLength));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pRixPlayer->dwFadeLength = dwFadeLength;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ pRixPlayer->dwStartFadeTime = SDL_GetTicks();
|
|
|
+ pRixPlayer->dwFadeLength = (DWORD)(flFadeTime * 1000) / 2;
|
|
|
+ }
|
|
|
+
|
|
|
pRixPlayer->iNextMusic = iNumRIX;
|
|
|
- pRixPlayer->dwStartFadeTime = SDL_GetTicks();
|
|
|
- pRixPlayer->dwFadeLength = (DWORD)(flFadeTime * 1000) / 2;
|
|
|
pRixPlayer->FadeType = RIXPLAYER::FADE_OUT;
|
|
|
+ pRixPlayer->fNextLoop = fLoop;
|
|
|
pRixPlayer->fReady = TRUE;
|
|
|
|
|
|
return TRUE;
|
|
@@ -428,10 +467,12 @@ RIX_Init(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#if USE_RIX_EXTRA_INIT
|
|
|
if (gpGlobals->pExtraFMRegs && gpGlobals->pExtraFMVals)
|
|
|
{
|
|
|
pRixPlayer->rix->set_extra_init(gpGlobals->pExtraFMRegs, gpGlobals->pExtraFMVals, gpGlobals->dwExtraLength);
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
|
|
|
|