// instantly hide console and deactivate it
key_dest = key_game;
+ key_consoleactive = false;
scr_conlines = 0;
scr_con_current = 0;
{
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;
}
/*
else
cl_avidemo_frame = 0;
- R_TimeReport("other");
+ if (cl.worldmodel)
+ R_TimeReport("other");
CL_SetupScreenSize();
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();
}
#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
*/
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));
}
{
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]);
//
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
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;
// 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
*/
-#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[] =
con_backscroll = 0;
return;
}
-
+
if (key < 32 || key > 127)
return; // non printable
-
+
if (key_linepos < MAXCMDLINE-1)
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) );
}
{
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");
+ }
}
}
*/
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;
} 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);
//=============================================================================
-int m_save_demonum;
+//int m_save_demonum;
/*
================
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 ();
- }
}
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;
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:
case 'Y':
case 'y':
- key_dest = key_console;
Host_Quit_f ();
break;
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;
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();
}
//=============================================================================
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)
// 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;
// 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;