Repair playback mini-menu

- Fix starting the playback mini-menu
- Fix playback mini-menu input not being natively horizontal
- Fix playback mini-menu having been written before r_splitscreen refactor
- Move heinous modifying-menu-data-in-the-drawer behaviour to an actual dedicated ticker
This commit is contained in:
toaster 2023-01-29 00:29:46 +00:00
parent 05301d0825
commit c55849006d
3 changed files with 82 additions and 70 deletions

View file

@ -3794,8 +3794,6 @@ void M_DrawPause(void)
} }
} }
tic_t playback_last_menu_interaction_leveltime = 0;
void M_DrawPlaybackMenu(void) void M_DrawPlaybackMenu(void)
{ {
INT16 i; INT16 i;
@ -3804,56 +3802,6 @@ void M_DrawPlaybackMenu(void)
UINT32 transmap = max(0, (INT32)(leveltime - playback_last_menu_interaction_leveltime - 4*TICRATE)) / 5; UINT32 transmap = max(0, (INT32)(leveltime - playback_last_menu_interaction_leveltime - 4*TICRATE)) / 5;
transmap = min(8, transmap) << V_ALPHASHIFT; transmap = min(8, transmap) << V_ALPHASHIFT;
if (leveltime - playback_last_menu_interaction_leveltime >= 6*TICRATE)
playback_last_menu_interaction_leveltime = leveltime - 6*TICRATE;
// Toggle items
if (paused && !demo.rewinding)
{
PAUSE_PlaybackMenu[playback_pause].status = PAUSE_PlaybackMenu[playback_fastforward].status = PAUSE_PlaybackMenu[playback_rewind].status = IT_DISABLED;
PAUSE_PlaybackMenu[playback_resume].status = PAUSE_PlaybackMenu[playback_advanceframe].status = PAUSE_PlaybackMenu[playback_backframe].status = IT_CALL|IT_STRING;
if (itemOn >= playback_rewind && itemOn <= playback_fastforward)
itemOn += playback_backframe - playback_rewind;
}
else
{
PAUSE_PlaybackMenu[playback_pause].status = PAUSE_PlaybackMenu[playback_fastforward].status = PAUSE_PlaybackMenu[playback_rewind].status = IT_CALL|IT_STRING;
PAUSE_PlaybackMenu[playback_resume].status = PAUSE_PlaybackMenu[playback_advanceframe].status = PAUSE_PlaybackMenu[playback_backframe].status = IT_DISABLED;
if (itemOn >= playback_backframe && itemOn <= playback_advanceframe)
itemOn -= playback_backframe - playback_rewind;
}
if (modeattacking)
{
for (i = playback_viewcount; i <= playback_view4; i++)
PAUSE_PlaybackMenu[i].status = IT_DISABLED;
//PAUSE_PlaybackMenu[playback_moreoptions].mvar1 = 72;
//PAUSE_PlaybackMenu[playback_quit].mvar1 = 88;
PAUSE_PlaybackMenu[playback_quit].mvar1 = 72;
//currentMenu->x = BASEVIDWIDTH/2 - 52;
currentMenu->x = BASEVIDWIDTH/2 - 44;
}
else
{
PAUSE_PlaybackMenu[playback_viewcount].status = IT_ARROWS|IT_STRING;
for (i = 0; i <= splitscreen; i++)
PAUSE_PlaybackMenu[playback_view1+i].status = IT_ARROWS|IT_STRING;
for (i = splitscreen+1; i < 4; i++)
PAUSE_PlaybackMenu[playback_view1+i].status = IT_DISABLED;
//PAUSE_PlaybackMenu[playback_moreoptions].mvar1 = 156;
//PAUSE_PlaybackMenu[playback_quit].mvar1 = 172;
PAUSE_PlaybackMenu[playback_quit].mvar1 = 156;
//currentMenu->x = BASEVIDWIDTH/2 - 94;
currentMenu->x = BASEVIDWIDTH/2 - 88;
}
// wip // wip
//M_DrawTextBox(currentMenu->x-68, currentMenu->y-7, 15, 15); //M_DrawTextBox(currentMenu->x-68, currentMenu->y-7, 15, 15);
//M_DrawCenteredMenu(); //M_DrawCenteredMenu();
@ -3866,7 +3814,7 @@ void M_DrawPlaybackMenu(void)
{ {
if (modeattacking) continue; if (modeattacking) continue;
if (splitscreen >= i - playback_view1) if (r_splitscreen >= i - playback_view1)
{ {
INT32 ply = displayplayers[i - playback_view1]; INT32 ply = displayplayers[i - playback_view1];
@ -3898,18 +3846,18 @@ void M_DrawPlaybackMenu(void)
{ {
char *str; char *str;
if (!(i == playback_viewcount && splitscreen == 3)) if (!(i == playback_viewcount && r_splitscreen == 3))
V_DrawCharacter(BASEVIDWIDTH/2 - 4, currentMenu->y + 28 - (skullAnimCounter/5), V_DrawCharacter(BASEVIDWIDTH/2 - 4, currentMenu->y + 28 - (skullAnimCounter/5),
'\x1A' | V_SNAPTOTOP|highlightflags, false); // up arrow '\x1A' | V_SNAPTOTOP|highlightflags, false); // up arrow
if (!(i == playback_viewcount && splitscreen == 0)) if (!(i == playback_viewcount && r_splitscreen == 0))
V_DrawCharacter(BASEVIDWIDTH/2 - 4, currentMenu->y + 48 + (skullAnimCounter/5), V_DrawCharacter(BASEVIDWIDTH/2 - 4, currentMenu->y + 48 + (skullAnimCounter/5),
'\x1B' | V_SNAPTOTOP|highlightflags, false); // down arrow '\x1B' | V_SNAPTOTOP|highlightflags, false); // down arrow
switch (i) switch (i)
{ {
case playback_viewcount: case playback_viewcount:
str = va("%d", splitscreen+1); str = va("%d", r_splitscreen+1);
break; break;
case playback_view1: case playback_view1:

View file

@ -400,7 +400,11 @@ void M_StartControlPanel(void)
menuactive = true; menuactive = true;
if (!Playing()) if (demo.playback)
{
currentMenu = &PAUSE_PlaybackMenuDef;
}
else if (!Playing())
{ {
M_StopMessage(0); // Doesn't work with MM_YESNO or MM_EVENTHANDLER... but good enough to get the game as it is currently functional again M_StopMessage(0); // Doesn't work with MM_YESNO or MM_EVENTHANDLER... but good enough to get the game as it is currently functional again
@ -432,14 +436,7 @@ void M_StartControlPanel(void)
} }
else else
{ {
if (demo.playback) M_OpenPauseMenu();
{
currentMenu = &PAUSE_PlaybackMenuDef;
}
else
{
M_OpenPauseMenu();
}
} }
itemOn = currentMenu->lastOn; itemOn = currentMenu->lastOn;
@ -772,6 +769,13 @@ static void M_HandleMenuInput(void)
lr = menucmd[pid].dpad_lr; lr = menucmd[pid].dpad_lr;
ud = menucmd[pid].dpad_ud; ud = menucmd[pid].dpad_ud;
// If we ever add a second horizontal menu, make it a menu_t property, not an extra check.
if (currentMenu == &PAUSE_PlaybackMenuDef)
{
ud = menucmd[pid].dpad_lr;
lr = -menucmd[pid].dpad_ud;
}
// LR does nothing in the default menu, just remap as dpad. // LR does nothing in the default menu, just remap as dpad.
if (menucmd[pid].buttons & MBT_L) { lr--; } if (menucmd[pid].buttons & MBT_L) { lr--; }
if (menucmd[pid].buttons & MBT_R) { lr++; } if (menucmd[pid].buttons & MBT_R) { lr++; }

View file

@ -9,6 +9,8 @@
#include "../../p_local.h" // P_InitCameraCmd #include "../../p_local.h" // P_InitCameraCmd
#include "../../d_main.h" // D_StartTitle #include "../../d_main.h" // D_StartTitle
static void M_PlaybackTick(void);
menuitem_t PAUSE_PlaybackMenu[] = menuitem_t PAUSE_PlaybackMenu[] =
{ {
{IT_CALL | IT_STRING, "Hide Menu (Esc)", NULL, "M_PHIDE", {.routine = M_SelectableClearMenus}, 0, 0}, {IT_CALL | IT_STRING, "Hide Menu (Esc)", NULL, "M_PHIDE", {.routine = M_SelectableClearMenus}, 0, 0},
@ -39,7 +41,7 @@ menu_t PAUSE_PlaybackMenuDef = {
0, 0, 0, 0,
0, 0, 0, 0,
M_DrawPlaybackMenu, M_DrawPlaybackMenu,
NULL, M_PlaybackTick,
NULL, NULL,
NULL, NULL,
NULL NULL
@ -66,6 +68,64 @@ void M_EndModeAttackRun(void)
} }
// Replay Playback Menu // Replay Playback Menu
tic_t playback_last_menu_interaction_leveltime = 0;
static void M_PlaybackTick(void)
{
INT16 i;
if (leveltime - playback_last_menu_interaction_leveltime >= 6*TICRATE)
playback_last_menu_interaction_leveltime = leveltime - 6*TICRATE;
// Toggle items
if (paused && !demo.rewinding)
{
PAUSE_PlaybackMenu[playback_pause].status = PAUSE_PlaybackMenu[playback_fastforward].status = PAUSE_PlaybackMenu[playback_rewind].status = IT_DISABLED;
PAUSE_PlaybackMenu[playback_resume].status = PAUSE_PlaybackMenu[playback_advanceframe].status = PAUSE_PlaybackMenu[playback_backframe].status = IT_CALL|IT_STRING;
if (itemOn >= playback_rewind && itemOn <= playback_fastforward)
itemOn += playback_backframe - playback_rewind;
}
else
{
PAUSE_PlaybackMenu[playback_pause].status = PAUSE_PlaybackMenu[playback_fastforward].status = PAUSE_PlaybackMenu[playback_rewind].status = IT_CALL|IT_STRING;
PAUSE_PlaybackMenu[playback_resume].status = PAUSE_PlaybackMenu[playback_advanceframe].status = PAUSE_PlaybackMenu[playback_backframe].status = IT_DISABLED;
if (itemOn >= playback_backframe && itemOn <= playback_advanceframe)
itemOn -= playback_backframe - playback_rewind;
}
if (modeattacking)
{
for (i = playback_viewcount; i <= playback_view4; i++)
PAUSE_PlaybackMenu[i].status = IT_DISABLED;
//PAUSE_PlaybackMenu[playback_moreoptions].mvar1 = 72;
//PAUSE_PlaybackMenu[playback_quit].mvar1 = 88;
PAUSE_PlaybackMenu[playback_quit].mvar1 = 72;
//currentMenu->x = BASEVIDWIDTH/2 - 52;
currentMenu->x = BASEVIDWIDTH/2 - 44;
}
else
{
PAUSE_PlaybackMenu[playback_viewcount].status = IT_ARROWS|IT_STRING;
for (i = 0; i <= r_splitscreen; i++)
PAUSE_PlaybackMenu[playback_view1+i].status = IT_ARROWS|IT_STRING;
for (i = r_splitscreen+1; i < 4; i++)
PAUSE_PlaybackMenu[playback_view1+i].status = IT_DISABLED;
//PAUSE_PlaybackMenu[playback_moreoptions].mvar1 = 156;
//PAUSE_PlaybackMenu[playback_quit].mvar1 = 172;
PAUSE_PlaybackMenu[playback_quit].mvar1 = 156;
//currentMenu->x = BASEVIDWIDTH/2 - 94;
currentMenu->x = BASEVIDWIDTH/2 - 88;
}
}
void M_SetPlaybackMenuPointer(void) void M_SetPlaybackMenuPointer(void)
{ {
itemOn = playback_pause; itemOn = playback_pause;
@ -143,12 +203,12 @@ void M_PlaybackSetViews(INT32 choice)
{ {
if (choice > 0) if (choice > 0)
{ {
if (splitscreen < 3) if (r_splitscreen < 3)
G_AdjustView(splitscreen + 2, 0, true); G_AdjustView(r_splitscreen + 2, 0, true);
} }
else if (splitscreen) else if (r_splitscreen)
{ {
splitscreen--; r_splitscreen--;
R_ExecuteSetViewSize(); R_ExecuteSetViewSize();
} }
} }