mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Replays: use Virtual Keyboard for title entry
- This shortens the maximum title length from 64 to 31 characters
This commit is contained in:
parent
7d01c3046b
commit
8fa01ee558
6 changed files with 38 additions and 100 deletions
|
|
@ -278,12 +278,6 @@ void D_ProcessEvents(void)
|
|||
|
||||
HandleGamepadDeviceEvents(ev);
|
||||
|
||||
if (demo.savemode == demovars_s::DSM_TITLEENTRY)
|
||||
{
|
||||
if (G_DemoTitleResponder(ev))
|
||||
continue;
|
||||
}
|
||||
|
||||
// console input
|
||||
#ifdef HAVE_THREADS
|
||||
I_lock_mutex(&con_mutex);
|
||||
|
|
|
|||
|
|
@ -65,6 +65,30 @@
|
|||
#include "k_credits.h"
|
||||
#include "k_grandprix.h"
|
||||
|
||||
static menuitem_t TitleEntry[] =
|
||||
{
|
||||
{IT_NOTHING | IT_SPACE, "Save Replay", NULL,
|
||||
NULL, {NULL}, 0, 0},
|
||||
};
|
||||
|
||||
static menu_t TitleEntryDef = {
|
||||
sizeof (TitleEntry) / sizeof (menuitem_t),
|
||||
NULL,
|
||||
0,
|
||||
TitleEntry,
|
||||
0, 0,
|
||||
0, 0,
|
||||
MBF_SOUNDLESS,
|
||||
NULL,
|
||||
0, 0,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
boolean nodrawers; // for comparative timing purposes
|
||||
boolean noblit; // for comparative timing purposes
|
||||
tic_t demostarttime; // for comparative timing purposes
|
||||
|
|
@ -3992,6 +4016,9 @@ void G_SaveDemo(void)
|
|||
UINT8 i;
|
||||
#endif
|
||||
|
||||
if (currentMenu == &TitleEntryDef)
|
||||
M_ClearMenus(true);
|
||||
|
||||
// Ensure extrainfo pointer is always available, even if no info is present.
|
||||
if (demoinfo_p && *(UINT32 *)demoinfo_p == 0)
|
||||
{
|
||||
|
|
@ -4076,55 +4103,6 @@ void G_SaveDemo(void)
|
|||
}
|
||||
}
|
||||
|
||||
boolean G_DemoTitleResponder(event_t *ev)
|
||||
{
|
||||
size_t len;
|
||||
INT32 ch;
|
||||
|
||||
if (ev->type != ev_keydown)
|
||||
return false;
|
||||
|
||||
ch = (INT32)ev->data1;
|
||||
|
||||
// Only ESC and non-keyboard keys abort connection
|
||||
if (ch == KEY_ESCAPE)
|
||||
{
|
||||
demo.savemode = (cv_recordmultiplayerdemos.value == 2) ? demovars_s::DSM_WILLAUTOSAVE : demovars_s::DSM_NOTSAVING;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ch == KEY_ENTER || ch >= NUMKEYS)
|
||||
{
|
||||
demo.savemode = demovars_s::DSM_WILLSAVE;
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((ch >= HU_FONTSTART && ch <= HU_FONTEND && fontv[HU_FONT].font[ch-HU_FONTSTART])
|
||||
|| ch == ' ') // Allow spaces, of course
|
||||
{
|
||||
len = strlen(demo.titlename);
|
||||
if (len < 64)
|
||||
{
|
||||
demo.titlename[len+1] = 0;
|
||||
demo.titlename[len] = CON_ShiftChar(ch);
|
||||
}
|
||||
}
|
||||
else if (ch == KEY_BACKSPACE)
|
||||
{
|
||||
if (shiftdown)
|
||||
memset(demo.titlename, 0, sizeof(demo.titlename));
|
||||
else
|
||||
{
|
||||
len = strlen(demo.titlename);
|
||||
|
||||
if (len > 0)
|
||||
demo.titlename[len-1] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean G_CheckDemoTitleEntry(void)
|
||||
{
|
||||
if (menuactive || chat_on)
|
||||
|
|
@ -4133,7 +4111,17 @@ boolean G_CheckDemoTitleEntry(void)
|
|||
if (!G_PlayerInputDown(0, gc_b, 0) && !G_PlayerInputDown(0, gc_x, 0))
|
||||
return false;
|
||||
|
||||
demo.savemode = demovars_s::DSM_TITLEENTRY;
|
||||
demo.savemode = demovars_s::DSM_WILLSAVE;
|
||||
M_OpenVirtualKeyboard(
|
||||
false,
|
||||
[](const char* replace) -> const char*
|
||||
{
|
||||
if (replace)
|
||||
strlcpy(demo.titlename, replace, sizeof demo.titlename);
|
||||
return demo.titlename;
|
||||
},
|
||||
&TitleEntryDef
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,7 +93,6 @@ struct demovars_s {
|
|||
enum {
|
||||
DSM_NOTSAVING,
|
||||
DSM_WILLAUTOSAVE,
|
||||
DSM_TITLEENTRY,
|
||||
DSM_WILLSAVE,
|
||||
DSM_SAVED
|
||||
} savemode;
|
||||
|
|
@ -232,8 +231,6 @@ void G_DeferedPlayDemo(const char *demo);
|
|||
|
||||
void G_SaveDemo(void);
|
||||
|
||||
boolean G_DemoTitleResponder(event_t *ev);
|
||||
|
||||
boolean G_CheckDemoTitleEntry(void);
|
||||
|
||||
typedef enum
|
||||
|
|
|
|||
|
|
@ -1303,36 +1303,6 @@ static void ST_overlayDrawer(void)
|
|||
K_DrawMidVote();
|
||||
}
|
||||
|
||||
void ST_DrawDemoTitleEntry(void)
|
||||
{
|
||||
static UINT8 anim = 0;
|
||||
char *nametodraw;
|
||||
|
||||
anim++;
|
||||
anim %= 8;
|
||||
|
||||
nametodraw = demo.titlename;
|
||||
while (V_StringWidth(nametodraw, 0) > MAXSTRINGLENGTH*8 - 8)
|
||||
nametodraw++;
|
||||
|
||||
#define x (BASEVIDWIDTH/2 - 139)
|
||||
#define y (BASEVIDHEIGHT/2)
|
||||
M_DrawTextBox(x, y + 4, MAXSTRINGLENGTH, 1);
|
||||
V_DrawString(x + 8, y + 12, 0, nametodraw);
|
||||
if (anim < 4)
|
||||
V_DrawCharacter(x + 8 + V_StringWidth(nametodraw, 0), y + 12,
|
||||
'_' | 0x80, false);
|
||||
|
||||
M_DrawTextBox(x + 30, y - 24, 26, 1);
|
||||
V_DrawString(x + 38, y - 16, 0, "Enter the name of the replay.");
|
||||
|
||||
M_DrawTextBox(x + 50, y + 20, 20, 1);
|
||||
V_DrawThinString(x + 58, y + 28, 0, "Escape - Cancel");
|
||||
V_DrawRightAlignedThinString(x + 220, y + 28, 0, "Enter - Confirm");
|
||||
#undef x
|
||||
#undef y
|
||||
}
|
||||
|
||||
// MayonakaStatic: draw Midnight Channel's TV-like borders
|
||||
static void ST_MayonakaStatic(void)
|
||||
{
|
||||
|
|
@ -1640,10 +1610,6 @@ void ST_Drawer(void)
|
|||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, flags|V_YELLOWMAP, "Replay will be saved.");
|
||||
break;
|
||||
|
||||
case DSM_TITLEENTRY:
|
||||
ST_DrawDemoTitleEntry();
|
||||
break;
|
||||
|
||||
default: // Don't render anything
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,9 +33,6 @@ extern "C" {
|
|||
// Called by main loop.
|
||||
void ST_Ticker(boolean run);
|
||||
|
||||
// Called when naming a replay.
|
||||
void ST_DrawDemoTitleEntry(void);
|
||||
|
||||
#ifdef HAVE_DISCORDRPC
|
||||
// Called when you have Discord asks
|
||||
void ST_AskToJoinEnvelope(void);
|
||||
|
|
|
|||
|
|
@ -1710,10 +1710,6 @@ finalcounter:
|
|||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, highlightflags, "Replay saved!");
|
||||
break;
|
||||
|
||||
case demovars_s::DSM_TITLEENTRY:
|
||||
ST_DrawDemoTitleEntry();
|
||||
break;
|
||||
|
||||
default: // Don't render any text here
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue