]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
you can now open/close the console independently of menu and messagemode
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 2 Sep 2002 10:44:25 +0000 (10:44 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 2 Sep 2002 10:44:25 +0000 (10:44 +0000)
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

12 files changed:
cl_demo.c
cl_screen.c
console.c
console.h
host.c
keys.c
keys.h
menu.c
sbar.c
sv_user.c
vid_glx.c
vid_wgl.c

index 551b7cdad7c003f9140438cb5d9b85ec9e2650e0..c0af97923772c2480c59533da6867907b65911b6 100644 (file)
--- 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;
 
index c29c7ca7e81f02fadf57cbe1306d40e51197981c..deceed22740dc192e092866de0b755d0f78fe08d 100644 (file)
@@ -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();
 }
index 9466571faf13b1243a62bc3045d69e78a2575a88..6600491196b29dd49a8733f6691d43812643fd25 100644 (file)
--- 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]);
index 83149f26abfb7eba4fee1d5ef63576ed31de002d..6f3a9f3a714733933a8959919766c456b46dcff8 100644 (file)
--- 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 c0741a68b7e001c69f474e6d7e0a954355ba591d..ef402120afe67d95101df13e8d8ddec236590512 100644 (file)
--- 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 f44a4681a5236221b5160ed540615805cc037ac0..ff098d5f1fcfe04b5f3e30fbeafccc1f8e107c69 100644 (file)
--- 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 7e9b9dd5327c9d849e667c7644b680d719014e46..4447faf4729af3451f20f7a04f366fa4aa75a71d 100644 (file)
--- 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 f17c79fd9d3ae0e4cb3a76fde9e7ae033ab4c72c..157d3ccc8ce9ff15f653334602bf778e3d9969ae 100644 (file)
--- 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 52bb7da7750ca6756b6b7dfdf0be8d4b418c838d..e14b58d9074508e7a7bcec832d31ef67c9e61646 100644 (file)
--- 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();
 }
 
 //=============================================================================
index 41fae363c19fc80796a796a7117df4d2d3829191..1213e6f11b3368333cf4a00bcc4bb4854fb5e026 100644 (file)
--- 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)
index 07104c14adf49155653176979b390f7a818039ce..1021ff3c6f94e4612f8392f1c784e891ba8e03eb 100644 (file)
--- 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;
index b9a0027d31c72748fbe57d48ec7096c43c40d424..578b94a15e3a597fa553d66a304275927fd0ad49 100644 (file)
--- 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;