CL_CONFIRMCONNECT: Attempt to fix the issue with the Menu Message not sliding

The author of this commit *needs* netgame testing, Rean
This commit is contained in:
toaster 2023-06-09 19:31:06 +01:00
parent 6c6306889a
commit 953abf7d26
3 changed files with 47 additions and 26 deletions

View file

@ -653,6 +653,7 @@ typedef enum
static void GetPackets(void);
static cl_mode_t cl_mode = CL_SEARCHING;
static cl_mode_t cl_requestmode = CL_ABORTED;
#ifdef HAVE_CURL
char http_source[MAX_MIRROR_LENGTH];
@ -1670,8 +1671,14 @@ void CL_UpdateServerList (void)
SendAskInfo(BROADCASTADDR);
}
static void M_ConfirmConnect(void)
static boolean M_ConfirmConnect(void)
{
if (G_PlayerInputDown(0, gc_b, 1) || G_PlayerInputDown(0, gc_x, 1) || G_GetDeviceGameKeyDownArray(0)[KEY_ESCAPE])
{
cl_requestmode = CL_ABORTED;
return true;
}
if (G_PlayerInputDown(0, gc_a, 1) || G_GetDeviceGameKeyDownArray(0)[KEY_ENTER])
{
if (totalfilesrequestednum > 0)
@ -1682,28 +1689,25 @@ static void M_ConfirmConnect(void)
{
if (CL_SendFileRequest())
{
cl_mode = CL_DOWNLOADFILES;
cl_requestmode = CL_DOWNLOADFILES;
}
else
{
cl_mode = CL_DOWNLOADFAILED;
cl_requestmode = CL_DOWNLOADFAILED;
}
}
#ifdef HAVE_CURL
else
cl_mode = CL_PREPAREHTTPFILES;
cl_requestmode = CL_PREPAREHTTPFILES;
#endif
}
else
cl_mode = CL_LOADFILES;
cl_requestmode = CL_LOADFILES;
M_StopMessage(0);
}
else if (G_PlayerInputDown(0, gc_b, 1) || G_PlayerInputDown(0, gc_x, 1) || G_GetDeviceGameKeyDownArray(0)[KEY_ESCAPE])
{
cl_mode = CL_ABORTED;
M_StopMessage(0);
return true;
}
return false;
}
static boolean CL_FinishedFileList(void)
@ -2166,7 +2170,16 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
if (cl_mode == CL_CONFIRMCONNECT)
{
M_ConfirmConnect();
#ifdef HAVE_THREADS
I_lock_mutex(&k_menu_mutex);
#endif
if (M_MenuMessageTick() && M_ConfirmConnect())
M_StopMessage(0);
else if (menumessage.active == false)
cl_mode = cl_requestmode;
#ifdef HAVE_THREADS
I_unlock_mutex(k_menu_mutex);
#endif
}
else
{
@ -2252,6 +2265,7 @@ static void CL_ConnectToServer(void)
lastfilenum = -1;
cl_mode = CL_SEARCHING;
cl_requestmode = CL_ABORTED; // sane default
// Don't get a corrupt savegame error because tmpsave already exists
if (FIL_FileExists(tmpsave) && unlink(tmpsave) == -1)

View file

@ -538,7 +538,11 @@ extern struct menumessage_s
const char *confirmstr;
} menumessage;
void M_StartMessage(const char *header, const char *string, void (*routine)(INT32), menumessagetype_t itemtype, const char *confirmstr, const char *defaultstr);
boolean M_MenuMessageTick(void);
void M_HandleMenuMessage(void);
void M_StopMessage(INT32 choice);
void M_DrawMenuMessage(void);
#define MENUDELAYTIME 7
#define MENUMINDELAY 2
@ -625,10 +629,6 @@ void M_PlayMenuJam(void);
void M_MenuTypingInput(INT32 key);
void M_StartMessage(const char *header, const char *string, void (*routine)(INT32), menumessagetype_t itemtype, const char *confirmstr, const char *defaultstr);
void M_StopMessage(INT32 choice);
void M_DrawMenuMessage(void);
void M_QuitResponse(INT32 ch);
void M_QuitSRB2(INT32 choice);

View file

@ -68,7 +68,7 @@ void M_StartMessage(const char *header, const char *string, void (*routine)(INT3
menumessage.header = header;
menumessage.flags = itemtype;
menumessage.routine = routine;
menumessage.fadetimer = (gamestate == GS_WAITINGPLAYERS) ? 9 : 1;
menumessage.fadetimer = 1;
menumessage.timer = 0;
menumessage.closing = false;
menumessage.active = true;
@ -141,13 +141,8 @@ void M_StopMessage(INT32 choice)
M_SetMenuDelay(pid);
}
// regular handler for MM_NOTHING and MM_YESNO
void M_HandleMenuMessage(void)
boolean M_MenuMessageTick(void)
{
const UINT8 pid = 0;
boolean btok = M_MenuConfirmPressed(pid);
boolean btnok = M_MenuBackPressed(pid);
if (menumessage.closing)
{
if (menumessage.fadetimer > 0)
@ -160,22 +155,34 @@ void M_HandleMenuMessage(void)
menumessage.active = false;
}
return;
return false;
}
else if (menumessage.fadetimer < 9)
{
menumessage.fadetimer++;
return;
return false;
}
menumessage.timer++;
return true;
}
// regular handler for MM_NOTHING and MM_YESNO
void M_HandleMenuMessage(void)
{
if (!M_MenuMessageTick())
return;
const UINT8 pid = 0;
boolean btok = M_MenuConfirmPressed(pid);
boolean btnok = M_MenuBackPressed(pid);
switch (menumessage.flags)
{
// Send 1 to the routine if we're pressing A/B/X
case MM_NOTHING:
{
// send 1 if any button is pressed, 0 otherwise.
if (btok || btnok)
menumessage.routine(0);