Start on Stereo Mode visuals

- Buttons have been implemented.
    - They push down when you press an input.
        - FUTURE WORK: Back doesn't get the opportunity to do so. Delay the exit of this menu?
    - Certain ones have special properties.
        - PLAY locks down when playing and not paused
        - PAUSE locks down when playing and paused
        - TRACK is a wheel/slidery thing
        - BACK should get pressed when you're exiting (see previous FUTURE WORK)
        - FUTURE WORK: The detection of these currently uses magic numbers.
- The Stereo itself is now drawn.
    - FUTURE WORK: The screen's contents are still the testing visuals.
This commit is contained in:
toaster 2023-03-29 16:14:38 +01:00
parent d19a7d9a57
commit 2446e53ff9
3 changed files with 128 additions and 17 deletions

View file

@ -5928,7 +5928,10 @@ void M_DrawStatistics(void)
void M_DrawSoundTest(void)
{
INT32 x = currentMenu->x - menutransition.tics*48, y, i, w, cursorx = 0;
UINT8 pid = 0; // todo: Add ability for any splitscreen player to bring up the menu.
INT32 x, y, i, cursorx = 0;
patch_t *btn = W_CachePatchName("STER_BTN", PU_CACHE);
if (gamestate == GS_MENU)
{
@ -5936,10 +5939,20 @@ void M_DrawSoundTest(void)
V_DrawFixedPatch(0, 0, FRACUNIT, 0, bg, NULL);
}
y = 50;
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("STER_BG", PU_CACHE), NULL);
x = 24;
y = 18;
if (soundtest.current != NULL)
{
K_DrawMapThumbnail(
x<<FRACBITS, y<<FRACBITS,
80<<FRACBITS,
0,
soundtest.current->sequence.map,
NULL);
V_DrawThinString(x, y, (soundtest.playing ? highlightflags : 0)|V_ALLOWLOWERCASE|V_6WIDTHSPACE, soundtest.current->title);
V_DrawThinString(x, (y += 10), V_ALLOWLOWERCASE|V_6WIDTHSPACE, va("%d", soundtest.currenttrack));
if (soundtest.current->author)
@ -5956,21 +5969,106 @@ void M_DrawSoundTest(void)
V_DrawThinString(x, (y += 10), V_ALLOWLOWERCASE|V_6WIDTHSPACE, va("%d", cv_soundtest.value));
}
y = currentMenu->y;
x = currentMenu->x;
for (i = 0; i < currentMenu->numitems; i++)
{
w = V_ThinStringWidth(currentMenu->menuitems[i].text, V_6WIDTHSPACE);
if (currentMenu->menuitems[i].status == IT_SPACE)
{
if (currentMenu->menuitems[i].mvar2 != 0)
{
x = currentMenu->menuitems[i].mvar2;
}
x += currentMenu->menuitems[i].mvar1;
continue;
}
y = currentMenu->y;
if (i == itemOn)
{
cursorx = x + w/2;
V_DrawThinString(x, y, V_6WIDTHSPACE|highlightflags, currentMenu->menuitems[i].text);
cursorx = x + 13;
}
if (currentMenu->menuitems[i].tooltip)
{
V_SetClipRect(
x << FRACBITS, y << FRACBITS,
27 << FRACBITS, 22 << FRACBITS,
0
);
// Special cases
if (currentMenu->menuitems[i].mvar2 == 1) // back
{
if (!soundtest.justopened && M_MenuBackHeld(pid))
{
y = currentMenu->y + 7;
}
}
// The following are springlocks.
else if (currentMenu->menuitems[i].mvar2 == 2) // pause
{
if (soundtest.paused == true)
y = currentMenu->y + 6;
}
else if (currentMenu->menuitems[i].mvar2 == 3) // play
{
if (soundtest.playing == true && soundtest.paused == false)
y = currentMenu->y + 6;
}
// Button is being pressed
if (i == itemOn && !soundtest.justopened && M_MenuConfirmHeld(pid))
{
y = currentMenu->y + 7;
}
// Button itself
V_DrawFixedPatch(x << FRACBITS, y << FRACBITS, FRACUNIT, 0, btn, NULL);
// Icon
V_DrawFixedPatch(x << FRACBITS, y << FRACBITS,
FRACUNIT, 0,
W_CachePatchName(currentMenu->menuitems[i].tooltip, PU_CACHE),
NULL
);
// Text
V_DrawCenteredThinString(x + 13, y + 1, V_6WIDTHSPACE, currentMenu->menuitems[i].text);
V_ClearClipRect();
V_DrawFill(x+2, currentMenu->y + 22, 23, 1, 30);
}
else if (currentMenu->menuitems[i].mvar2 == 4) // Track
{
if (i == itemOn)
{
if (menucmd[pid].dpad_ud < 0 || M_MenuConfirmHeld(pid))
{
y--;
}
else if (menucmd[pid].dpad_ud > 0)
{
y++;
}
}
V_DrawFixedPatch(x << FRACBITS, (y-1) << FRACBITS,
FRACUNIT, 0,
W_CachePatchName("STER_WH0", PU_CACHE),
NULL
);
}
else
{
V_DrawThinString(x, y, V_6WIDTHSPACE, currentMenu->menuitems[i].text);
V_DrawCenteredThinString(x + 13, y + 1, V_6WIDTHSPACE, currentMenu->menuitems[i].text);
}
x += w + 8;
x += 27;
}
V_DrawCharacter(cursorx - 4, currentMenu->y - 8 - (skullAnimCounter/5),

View file

@ -113,15 +113,26 @@ static void M_SoundTestTrack(INT32 choice)
}
}
static boolean M_SoundTestInputs(INT32 ch)
{
(void)ch;
soundtest.justopened = false;
return false;
}
menuitem_t MISC_SoundTest[] =
{
{IT_STRING | IT_CALL, "Back", NULL, NULL, {.routine = M_GoBack}, 0, 0},
{IT_STRING | IT_CALL, "Stop", NULL, NULL, {.routine = M_SoundTestMainControl}, 0, 0},
{IT_STRING | IT_CALL, "Pause", NULL, NULL, {.routine = M_SoundTestMainControl}, 2, 0},
{IT_STRING | IT_CALL, "Play", NULL, NULL, {.routine = M_SoundTestMainControl}, 1, 0},
{IT_STRING | IT_ARROWS, "Track", NULL, NULL, {.routine = M_SoundTestTrack}, 0, 0},
{IT_STRING | IT_CALL, "Prev", NULL, NULL, {.routine = M_SoundTestNextPrev}, -1, 0},
{IT_STRING | IT_CALL, "Next", NULL, NULL, {.routine = M_SoundTestNextPrev}, 1, 0},
{IT_STRING | IT_CALL, "Back", "STER_IC0", NULL, {.routine = M_GoBack}, 0, 1},
{IT_SPACE, NULL, NULL, NULL, {NULL}, 11, 0},
{IT_STRING | IT_CALL, "Stop", "STER_IC1", NULL, {.routine = M_SoundTestMainControl}, 0, 0},
{IT_SPACE, NULL, NULL, NULL, {NULL}, 8, 0},
{IT_STRING | IT_CALL, "Pause", "STER_IC2", NULL, {.routine = M_SoundTestMainControl}, 2, 2},
{IT_STRING | IT_CALL, "Play", "STER_IC3", NULL, {.routine = M_SoundTestMainControl}, 1, 3},
{IT_SPACE, NULL, NULL, NULL, {NULL}, 8, 0},
{IT_STRING | IT_CALL, "Prev", "STER_IC4", NULL, {.routine = M_SoundTestNextPrev}, -1, 0},
{IT_STRING | IT_CALL, "Next", "STER_IC5", NULL, {.routine = M_SoundTestNextPrev}, 1, 0},
{IT_SPACE, NULL, NULL, NULL, {NULL}, 0, 276},
{IT_STRING | IT_ARROWS, "Track", NULL, NULL, {.routine = M_SoundTestTrack}, 0, 4},
};
menu_t MISC_SoundTestDef = {
@ -129,7 +140,7 @@ menu_t MISC_SoundTestDef = {
&MainDef,
0,
MISC_SoundTest,
42, BASEVIDHEIGHT/2,
19, 140,
0, 0,
MBF_UD_LR_FLIPPED|MBF_SOUNDLESS,
".",
@ -138,7 +149,7 @@ menu_t MISC_SoundTestDef = {
NULL,
NULL,
NULL,
NULL,
M_SoundTestInputs,
};
void M_SoundTest(INT32 choice)
@ -146,6 +157,7 @@ void M_SoundTest(INT32 choice)
(void)choice;
// I reserve the right to add some sort of setup here -- toast 250323
soundtest.justopened = true;
MISC_SoundTestDef.prevMenu = currentMenu;
M_SetupNextMenu(&MISC_SoundTestDef, false);

View file

@ -212,6 +212,7 @@ extern struct soundtest
{
boolean playing; // Music is playing?
boolean paused; // System paused?
boolean justopened; // Menu visual assist
boolean privilegedrequest; // Overrides S_PlaysimMusicDisabled w/o changing every function signature
musicdef_t *current; // Current selected music definition
SINT8 currenttrack; // Current selected music track for definition