From 7bbc05e4b0d3041dfdac6fc6c5506710594fe2c9 Mon Sep 17 00:00:00 2001 From: havoc Date: Mon, 2 Sep 2002 10:44:25 +0000 Subject: [PATCH] you can now open/close the console independently of menu and messagemode console catchs input before anything else console appears ontop of anything else console is no longer forced fullscreen when there is nothing else to show shuffled around the 2D drawing calls in CL_UpdateScreen now only console pauses singleplayer, instead of console/menu/messagemode simplified console singleplayer pausing code a bit mouse grabbing is now only forced off when console is down, not when menu or messagemode is shown git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2327 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_demo.c | 1 + cl_screen.c | 92 ++++++++++----------- console.c | 15 +--- console.h | 1 - host.c | 4 +- keys.c | 229 ++++++++++++++++++++++++++++++---------------------- keys.h | 11 +-- menu.c | 21 +++-- sbar.c | 20 +++-- sv_user.c | 3 +- vid_glx.c | 2 +- vid_wgl.c | 2 +- 12 files changed, 214 insertions(+), 187 deletions(-) diff --git a/cl_demo.c b/cl_demo.c index 551b7cda..c0af9792 100644 --- a/cl_demo.c +++ b/cl_demo.c @@ -399,6 +399,7 @@ void CL_TimeDemo_f (void) // instantly hide console and deactivate it key_dest = key_game; + key_consoleactive = false; scr_conlines = 0; scr_con_current = 0; diff --git a/cl_screen.c b/cl_screen.c index c29c7ca7..deceed22 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -237,32 +237,33 @@ void SCR_SetUpToDrawConsole (void) { Con_CheckResize (); -// decide on the height of the console - con_forcedup = !cl.worldmodel || cls.signon != SIGNONS; + //if (key_dest == key_game && (!cl.worldmodel || cls.signon != SIGNONS)) + // key_dest = key_console; - if (con_forcedup) - { - scr_conlines = vid.conheight; // full screen - scr_con_current = scr_conlines; - } - else if (key_dest == key_console) +// decide on the height of the console + if (key_consoleactive) scr_conlines = vid.conheight/2; // half screen else scr_conlines = 0; // none visible - if (scr_conlines < scr_con_current) + if (scr_conspeed.value) { - scr_con_current -= scr_conspeed.value*host_realframetime; - if (scr_conlines > scr_con_current) - scr_con_current = scr_conlines; - - } - else if (scr_conlines > scr_con_current) - { - scr_con_current += scr_conspeed.value*host_realframetime; if (scr_conlines < scr_con_current) - scr_con_current = scr_conlines; + { + scr_con_current -= scr_conspeed.value*host_realframetime; + if (scr_conlines > scr_con_current) + scr_con_current = scr_conlines; + + } + else if (scr_conlines > scr_con_current) + { + scr_con_current += scr_conspeed.value*host_realframetime; + if (scr_conlines < scr_con_current) + scr_con_current = scr_conlines; + } } + else + scr_con_current = scr_conlines; } /* @@ -938,7 +939,8 @@ void CL_UpdateScreen(void) else cl_avidemo_frame = 0; - R_TimeReport("other"); + if (cl.worldmodel) + R_TimeReport("other"); CL_SetupScreenSize(); @@ -947,39 +949,39 @@ void CL_UpdateScreen(void) V_UpdateBlends(); V_CalcRefdef (); - R_TimeReport("setup"); - - SCR_DrawNet (); - SCR_DrawTurtle (); - SCR_DrawPause (); - - Sbar_Draw(); - - SCR_CheckDrawCenterString(); - SHOWLMP_drawall(); - - SCR_DrawConsole(); + if (cl.worldmodel) + R_TimeReport("setup"); - ui_draw(); + //FIXME: force menu if nothing else to look at? + //if (key_dest == key_game && !cl.worldmodel && cls.state == ca_disconnected) if (scr_drawloading) { scr_drawloading = false; SCR_DrawLoading(); } - - CL_DrawVideo(); - - R_TimeReport("2d"); - - // add r_speeds text to queue - R_TimeReport_End(); - - // start a new timing run - R_TimeReport_Start(); - - // make menu fade everything else on the screen - M_Draw(); + else + { + if (cl.worldmodel) + { + SCR_DrawNet (); + SCR_DrawTurtle (); + SCR_DrawPause (); + Sbar_Draw(); + } + SCR_CheckDrawCenterString(); + SHOWLMP_drawall(); + ui_draw(); + CL_DrawVideo(); + M_Draw(); + if (cl.worldmodel) + { + R_TimeReport("2d"); + R_TimeReport_End(); + R_TimeReport_Start(); + } + } + SCR_DrawConsole(); SCR_UpdateScreen(); } diff --git a/console.c b/console.c index 9466571f..66004911 100644 --- a/console.c +++ b/console.c @@ -39,8 +39,6 @@ float con_cursorspeed = 4; #define CON_TEXTSIZE 16384 -qboolean con_forcedup; // because no entities to refresh - int con_totallines; // total lines in console scrollback int con_backscroll; // lines up from bottom to display int con_current; // where next message will be printed @@ -80,16 +78,7 @@ Con_ToggleConsole_f */ void Con_ToggleConsole_f (void) { - if (key_dest == key_console) - { - if (cls.state == ca_connected) - key_dest = key_game; - else - M_Menu_Main_f (); - } - else - key_dest = key_console; - + key_consoleactive = !key_consoleactive; memset (con_times, 0, sizeof(con_times)); } @@ -473,7 +462,7 @@ void Con_DrawInput (void) { char editlinecopy[256], *text; - if (key_dest != key_console && !con_forcedup) + if (!key_consoleactive) return; // don't draw anything text = strcpy(editlinecopy, key_lines[edit_line]); diff --git a/console.h b/console.h index 83149f26..6f3a9f3a 100644 --- a/console.h +++ b/console.h @@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // extern int con_totallines; extern int con_backscroll; -extern qboolean con_forcedup; // because no entities to refresh extern qboolean con_initialized; extern qbyte *con_chars; extern int con_notifylines; // scan lines to clear for notify lines diff --git a/host.c b/host.c index c0741a68..ef402120 100644 --- a/host.c +++ b/host.c @@ -625,7 +625,7 @@ void Host_ServerFrame (void) if (cls.state != ca_dedicated && svs.maxclients > 1 && ((realtime - lastservertime) < sys_ticrate.value)) return; // run the world state - if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game) ) + if (!sv.paused && (svs.maxclients > 1 || (key_dest == key_game && !key_consoleactive))) sv.frametime = pr_global_struct->frametime = frametimetotal; else sv.frametime = 0; @@ -643,7 +643,7 @@ void Host_ServerFrame (void) // move things around and think // always pause in single player if in console or menus - if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game) ) + if (sv.frametime) SV_Physics (); // send all messages to the clients diff --git a/keys.c b/keys.c index f44a4681..ff098d5f 100644 --- a/keys.c +++ b/keys.c @@ -26,31 +26,32 @@ key up events are sent even if in console mode */ -#define MAXCMDLINE 256 -char key_lines[32][MAXCMDLINE]; -int key_linepos; -int shift_down = false; -int key_lastpress; -int key_insert; // insert key toggle (for editing) +#define MAXCMDLINE 256 +char key_lines[32][MAXCMDLINE]; +int key_linepos; +int shift_down = false; +int key_lastpress; +int key_insert; // insert key toggle (for editing) -int edit_line = 0; -int history_line = 0; +int edit_line = 0; +int history_line = 0; -keydest_t key_dest; +int key_consoleactive; +keydest_t key_dest; -int key_count; // incremented every key event +int key_count; // incremented every key event -char *keybindings[256]; -qboolean consolekeys[256]; // if true, can't be rebound while in console -qboolean menubound[256]; // if true, can't be rebound while in menu -int keyshift[256]; // key to map to if shift held down in console -int key_repeats[256]; // if > 1, it is autorepeating -qboolean keydown[256]; +char *keybindings[256]; +qboolean consolekeys[256]; // if true, can't be rebound while in console +qboolean menubound[256]; // if true, can't be rebound while in menu +int keyshift[256]; // key to map to if shift held down in console +int key_repeats[256]; // if > 1, it is autorepeating +qboolean keydown[256]; typedef struct { - char *name; - int keynum; + char *name; + int keynum; } keyname_t; keyname_t keynames[] = @@ -306,10 +307,10 @@ void Key_Console (int key) con_backscroll = 0; return; } - + if (key < 32 || key > 127) return; // non printable - + if (key_linepos < MAXCMDLINE-1) @@ -687,7 +688,7 @@ void Key_Event (int key, qboolean down) key_repeats[key]++; if (key != K_BACKSPACE && key != K_PAUSE && key_repeats[key] > 1) return; // ignore most autorepeats - + if (key >= 200 && !keybindings[key]) Con_Printf ("%s is unbound, hit F4 to set.\n", Key_KeynumToString (key) ); } @@ -702,107 +703,139 @@ void Key_Event (int key, qboolean down) { if (!down) return; - switch (key_dest) - { - case key_message: - Key_Message (key); - break; - case key_menu: - M_Keydown (key); - break; - case key_game: - case key_console: + if (key_consoleactive) M_ToggleMenu_f (); - break; - default: - Sys_Error ("Bad key_dest"); + else + { + switch (key_dest) + { + case key_message: + Key_Message (key); + break; + case key_menu: + M_Keydown (key); + break; + case key_game: + //case key_console: + M_ToggleMenu_f (); + break; + default: + Sys_Error ("Bad key_dest"); + } } return; } -// -// key up events only generate commands if the game key binding is -// a button command (leading + sign). These will occur even in console mode, -// to keep the character from continuing an action started before a console -// switch. Button commands include the keynum as a parameter, so multiple -// downs can be matched with ups -// - if (!down) + // LordHavoc: hack to make toggleconsole always work + if (down) { kb = keybindings[key]; - if (kb && kb[0] == '+') + if (kb && !strncmp(kb, "toggleconsole", strlen("toggleconsole"))) { - sprintf (cmd, "-%s %i\n", kb+1, key); - Cbuf_AddText (cmd); + Cbuf_AddText (kb); + Cbuf_AddText ("\n"); + return; } - if (keyshift[key] != key) + } + + if (key_consoleactive && consolekeys[key]) + { + // console only wants key down events + if (!down) + return; + + // FIXME: this does not support non-QWERTY keyboards + if (shift_down) + key = keyshift[key]; + + Key_Console (key); + } + else + { + // + // key up events only generate commands if the game key binding is + // a button command (leading + sign). These will occur even in console mode, + // to keep the character from continuing an action started before a console + // switch. Button commands include the keynum as a parameter, so multiple + // downs can be matched with ups + // + if (!down) { - kb = keybindings[keyshift[key]]; + kb = keybindings[key]; if (kb && kb[0] == '+') { sprintf (cmd, "-%s %i\n", kb+1, key); Cbuf_AddText (cmd); } + if (keyshift[key] != key) + { + kb = keybindings[keyshift[key]]; + if (kb && kb[0] == '+') + { + sprintf (cmd, "-%s %i\n", kb+1, key); + Cbuf_AddText (cmd); + } + } + return; } - return; - } -// -// during demo playback, most keys bring up the main menu -// - if (cls.demoplayback && down && consolekeys[key] && key_dest == key_game) - { - M_ToggleMenu_f (); - return; - } + // + // during demo playback, most keys bring up the main menu + // + if (cls.demoplayback && down && consolekeys[key] && key_dest == key_game) + { + M_ToggleMenu_f (); + return; + } -// -// if not a consolekey, send to the interpreter no matter what mode is -// - if ( (key_dest == key_menu && menubound[key]) - || (key_dest == key_console && !consolekeys[key]) - || (key_dest == key_game && ( !con_forcedup || !consolekeys[key] ) ) ) - { - kb = keybindings[key]; - if (kb) + // + // if not a consolekey, send to the interpreter no matter what mode is + // + //if ((key_dest == key_console && !consolekeys[key]) + if ((key_consoleactive && !consolekeys[key]) + || (key_dest == key_menu && menubound[key]) + || key_dest == key_game) { - if (kb[0] == '+') - { // button commands add keynum as a parm - sprintf (cmd, "%s %i\n", kb, key); - Cbuf_AddText (cmd); - } - else + kb = keybindings[key]; + if (kb) { - Cbuf_AddText (kb); - Cbuf_AddText ("\n"); + if (kb[0] == '+') + { // button commands add keynum as a parm + sprintf (cmd, "%s %i\n", kb, key); + Cbuf_AddText (cmd); + } + else + { + Cbuf_AddText (kb); + Cbuf_AddText ("\n"); + } } + return; } - return; - } - if (!down) - return; // other systems only care about key down events + if (!down) + return; // other systems only care about key down events - if (shift_down) - { - key = keyshift[key]; - } + // FIXME: this does not support non-QWERTY keyboards + if (shift_down) + key = keyshift[key]; - switch (key_dest) - { - case key_message: - Key_Message (key); - break; - case key_menu: - M_Keydown (key); - break; + switch (key_dest) + { + case key_message: + Key_Message (key); + break; + case key_menu: + M_Keydown (key); + break; - case key_game: - case key_console: - Key_Console (key); - break; - default: - Sys_Error ("Bad key_dest"); + case key_game: + //case key_console: + Key_Console (key); + break; + default: + Sys_Error ("Bad key_dest"); + } } } @@ -814,9 +847,9 @@ Key_ClearStates */ void Key_ClearStates (void) { - int i; + int i; - for (i=0 ; i<256 ; i++) + for (i = 0;i < 256;i++) { keydown[i] = false; key_repeats[i] = 0; diff --git a/keys.h b/keys.h index 7e9b9dd5..4447faf4 100644 --- a/keys.h +++ b/keys.h @@ -147,13 +147,14 @@ typedef enum { } keynum_t; -typedef enum {key_game, key_console, key_message, key_menu} keydest_t; +typedef enum {key_game, key_message, key_menu} keydest_t; -extern keydest_t key_dest; +extern int key_consoleactive; +extern keydest_t key_dest; extern char *keybindings[256]; -extern int key_repeats[256]; -extern int key_count; // incremented every key event -extern int key_lastpress; +extern int key_repeats[256]; +extern int key_count; // incremented every key event +extern int key_lastpress; void Key_Event (int key, qboolean down); void Key_Init (void); diff --git a/menu.c b/menu.c index f17c79fd..157d3ccc 100644 --- a/menu.c +++ b/menu.c @@ -275,7 +275,7 @@ void M_DrawTextBox (float x, float y, float width, float height) //============================================================================= -int m_save_demonum; +//int m_save_demonum; /* ================ @@ -297,14 +297,10 @@ void M_ToggleMenu_f (void) m_state = m_none; return; } - if (key_dest == key_console) - { - Con_ToggleConsole_f (); - } - else - { + //if (key_dest == key_console) + // Con_ToggleConsole_f (); + //else M_Menu_Main_f (); - } } @@ -382,11 +378,13 @@ void M_Menu_Main_f (void) else MAIN_ITEMS = 5; + /* if (key_dest != key_menu) { m_save_demonum = cls.demonum; cls.demonum = -1; } + */ key_dest = key_menu; m_state = m_main; m_entersound = true; @@ -427,9 +425,9 @@ void M_Main_Key (int key) case K_ESCAPE: key_dest = key_game; m_state = m_none; - cls.demonum = m_save_demonum; - if (cls.demonum != -1 && !cls.demoplayback && cls.state != ca_connected) - CL_NextDemo (); + //cls.demonum = m_save_demonum; + //if (cls.demonum != -1 && !cls.demoplayback && cls.state != ca_connected) + // CL_NextDemo (); break; case K_DOWNARROW: @@ -2131,7 +2129,6 @@ void M_Quit_Key (int key) case 'Y': case 'y': - key_dest = key_console; Host_Quit_f (); break; diff --git a/sbar.c b/sbar.c index 52bb7da7..e14b58d9 100644 --- a/sbar.c +++ b/sbar.c @@ -787,6 +787,17 @@ void Sbar_Draw (void) if (scr_con_current == vid.conheight) return; // console is full screen + if (cl.intermission == 1) + { + Sbar_IntermissionOverlay(); + return; + } + else if (cl.intermission == 2) + { + Sbar_FinaleOverlay(); + return; + } + sbar_y = vid.conheight - SBAR_HEIGHT; if (cl.gametype == GAME_DEATHMATCH) sbar_x = 0; @@ -890,15 +901,10 @@ void Sbar_Draw (void) if (vid.conwidth > 320 && cl.gametype == GAME_DEATHMATCH) Sbar_MiniDeathmatchOverlay (); + Sbar_ShowFPS(); + // if (crosshair.integer >= 1) // DrawCrosshair(crosshair.integer - 1); - - if (cl.intermission == 1) - Sbar_IntermissionOverlay(); - else if (cl.intermission == 2) - Sbar_FinaleOverlay(); - - Sbar_ShowFPS(); } //============================================================================= diff --git a/sv_user.c b/sv_user.c index 41fae363..1213e6f1 100644 --- a/sv_user.c +++ b/sv_user.c @@ -654,8 +654,7 @@ void SV_RunClients (void) continue; } - // always pause in single player if in console or menus - if (!sv.paused && (svs.maxclients > 1 || key_dest == key_game) ) + if (sv.frametime) { // LordHavoc: QuakeC replacement for SV_ClientThink (player movement) if (SV_PlayerPhysicsQC) diff --git a/vid_glx.c b/vid_glx.c index 07104c14..1021ff3c 100644 --- a/vid_glx.c +++ b/vid_glx.c @@ -515,7 +515,7 @@ void VID_Finish (void) // handle the mouse state when windowed if that's changed usemouse = false; - if (vid_mouse.integer && key_dest == key_game) + if (vid_mouse.integer && !key_consoleactive) usemouse = true; if (vidmode_active) usemouse = true; diff --git a/vid_wgl.c b/vid_wgl.c index b9a0027d..578b94a1 100644 --- a/vid_wgl.c +++ b/vid_wgl.c @@ -345,7 +345,7 @@ void VID_Finish (void) // handle the mouse state when windowed if that's changed vid_usemouse = false; - if (vid_mouse.integer && key_dest == key_game) + if (vid_mouse.integer && !key_consoleactive) vid_usemouse = true; if (modestate == MS_FULLDIB) vid_usemouse = true; -- 2.39.2