soundtest: refactor to track tune with integer instead of string

This commit is contained in:
James R 2023-12-29 04:30:54 -08:00
parent 8855486864
commit 64aaf02b8a
4 changed files with 34 additions and 29 deletions

View file

@ -7406,6 +7406,8 @@ void M_DrawSoundTest(void)
patch_t *btn = W_CachePatchName("STER_BTN", PU_CACHE);
const char *tune = S_SoundTestTune(0);
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("STER_BG", PU_CACHE), NULL);
x = 24;
@ -7479,7 +7481,7 @@ void M_DrawSoundTest(void)
}
{
UINT32 currenttime = min(Music_Elapsed(soundtest.tune), Music_TotalDuration(soundtest.tune));
UINT32 currenttime = min(Music_Elapsed(tune), Music_TotalDuration(tune));
V_DrawRightAlignedString(x + 272-1, 18+32, 0,
va("%02u:%02u",
@ -7493,7 +7495,7 @@ void M_DrawSoundTest(void)
&& (soundtest.current->basenoloop[soundtest.currenttrack] == true
|| soundtest.autosequence == true))
{
UINT32 exittime = Music_TotalDuration(soundtest.tune);
UINT32 exittime = Music_TotalDuration(tune);
V_DrawRightAlignedString(x + 272-1, 18+32+10, 0,
va("%02u:%02u",
@ -7547,12 +7549,12 @@ void M_DrawSoundTest(void)
// The following are springlocks.
else if (currentMenu->menuitems[i].mvar2 == stereospecial_pause) // pause
{
if (Music_Paused(soundtest.tune) == true)
if (Music_Paused(tune) == true)
y = currentMenu->y + 6;
}
else if (currentMenu->menuitems[i].mvar2 == stereospecial_play) // play
{
if (soundtest.playing == true && Music_Paused(soundtest.tune) == false)
if (soundtest.playing == true && Music_Paused(tune) == false)
y = currentMenu->y + 6;
}
else if (currentMenu->menuitems[i].mvar2 == stereospecial_seq) // seq

View file

@ -37,11 +37,11 @@ static void M_SoundTestMainControl(INT32 choice)
if (currentMenu->menuitems[itemOn].mvar1 == 1) // Play
{
if (Music_Paused(soundtest.tune) == true)
if (Music_Paused(S_SoundTestTune(0)) == true)
{
S_SoundTestTogglePause();
}
else if (Music_Paused(soundtest.tune) == false)
else
{
S_SoundTestPlay();
}
@ -50,7 +50,7 @@ static void M_SoundTestMainControl(INT32 choice)
{
if (currentMenu->menuitems[itemOn].mvar1 == 2) // Pause
{
if (Music_Paused(soundtest.tune) == false)
if (Music_Paused(S_SoundTestTune(0)) == false)
{
S_SoundTestTogglePause();
}

View file

@ -1227,7 +1227,7 @@ void S_AttemptToRestoreMusic(void)
musicdef_t *musicdefstart = NULL;
struct cursongcredit cursongcredit; // Currently displayed song credit info
struct soundtest soundtest = {.tune = ""}; // Sound Test (sound test)
struct soundtest soundtest; // Sound Test (sound test)
static void S_InsertMusicAtSoundTestSequenceTail(const char *musname, UINT16 map, UINT8 altref, musicdef_t ***tail)
{
@ -1644,10 +1644,22 @@ updatetrackonly:
}
}
const char *S_SoundTestTune(UINT8 invert)
{
return soundtest.tune ^ invert ? "stereo_fade" : "stereo";
}
boolean S_SoundTestCanSequenceFade(void)
{
return
soundtest.current->basenoloop[soundtest.currenttrack] == false &&
// Only fade out if we're the last track for this song.
soundtest.currenttrack == soundtest.current->numtracks-1;
}
void S_SoundTestPlay(void)
{
UINT32 sequencemaxtime = 0;
boolean dosequencefadeout = false;
if (soundtest.current == NULL)
{
@ -1656,19 +1668,7 @@ void S_SoundTestPlay(void)
}
soundtest.playing = true;
soundtest.tune = "stereo";
if (soundtest.current->basenoloop[soundtest.currenttrack] == false)
{
// Only fade out if we're the last track for this song.
dosequencefadeout = (soundtest.currenttrack == soundtest.current->numtracks-1);
if (dosequencefadeout)
{
soundtest.tune = "stereo_fade";
}
}
soundtest.tune = (soundtest.autosequence == true && S_SoundTestCanSequenceFade() == true);
Music_Remap(soundtest.tune, soundtest.current->name[soundtest.currenttrack]);
Music_Loop(soundtest.tune, !soundtest.current->basenoloop[soundtest.currenttrack]);
@ -1702,7 +1702,7 @@ void S_SoundTestPlay(void)
}
// ms to TICRATE conversion
Music_DelayEnd(soundtest.tune, (TICRATE*sequencemaxtime)/1000);
Music_DelayEnd(S_SoundTestTune(0), (TICRATE*sequencemaxtime)/1000);
}
void S_SoundTestStop(void)
@ -1712,7 +1712,7 @@ void S_SoundTestStop(void)
return;
}
soundtest.tune = "";
soundtest.tune = 0;
soundtest.playing = false;
soundtest.autosequence = false;
@ -1730,13 +1730,14 @@ void S_SoundTestTogglePause(void)
return;
}
if (Music_Paused(soundtest.tune))
const char *tune = S_SoundTestTune(0);
if (Music_Paused(tune))
{
Music_UnPause(soundtest.tune);
Music_UnPause(tune);
}
else
{
Music_Pause(soundtest.tune);
Music_Pause(tune);
}
}
@ -1760,7 +1761,7 @@ void S_TickSoundTest(void)
return;
}
if (Music_DurationLeft(soundtest.tune) == 0)
if (Music_DurationLeft(S_SoundTestTune(0)) == 0)
{
goto handlenextsong;
}

View file

@ -186,7 +186,7 @@ extern struct cursongcredit
extern struct soundtest
{
const char *tune; // Tune used for music system
UINT8 tune; // Tune used for music system
boolean playing; // Music is playing?
boolean justopened; // Menu visual assist
@ -208,6 +208,8 @@ void S_SoundTestPlay(void);
void S_SoundTestStop(void);
void S_SoundTestTogglePause(void);
void S_TickSoundTest(void);
const char *S_SoundTestTune(UINT8 invert);
boolean S_SoundTestCanSequenceFade(void);
extern musicdef_t *musicdefstart;