Do key dest changing properly.

key_demo wasn't so well thought out. This seems to be much better (and nq
is known to be working nicely).
This commit is contained in:
Bill Currie 2011-12-10 16:14:25 +09:00
parent 16c8b2a18d
commit c3d41326b3
10 changed files with 58 additions and 86 deletions

View file

@ -369,8 +369,8 @@ typedef enum {
typedef enum {
IMT_CONSOLE,
IMT_DEMO,
IMT_MOD,
IMT_DEMO,
IMT_0,
IMT_1,
IMT_2,
@ -394,7 +394,6 @@ typedef enum {
// key_none should, preferably, be last
typedef enum {
key_game,
key_demo,
key_console,
key_message,
key_menu,
@ -408,7 +407,7 @@ typedef struct {
} kbutton_t;
extern keydest_t key_dest;
extern imt_t game_target;
extern imt_t key_game_target;
extern knum_t key_togglemenu;
extern knum_t key_toggleconsole;
@ -425,6 +424,7 @@ void Key_WriteBindings (QFile *f);
void Key_ClearStates (void);
const char *Key_GetBinding (imt_t imt, knum_t key);
void Key_SetBinding (imt_t target, knum_t keynum, const char *binding);
void Key_SetKeyDest(keydest_t kd);
const char *Key_KeynumToString (knum_t keynum);

View file

@ -120,11 +120,9 @@ ToggleConsole_f (void)
Con_ClearTyping (input_line, 0);
if (key_dest == key_console && !con_data.force_commandline) {
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
} else {
key_dest = key_console;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_console);
}
ClearNotify ();
@ -136,11 +134,9 @@ ToggleChat_f (void)
Con_ClearTyping (input_line, 0);
if (key_dest == key_console && !con_data.force_commandline) {
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
} else {
key_dest = key_console;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_console);
}
ClearNotify ();
@ -162,8 +158,7 @@ MessageMode_f (void)
if (con_data.force_commandline)
return;
chat_team = false;
key_dest = key_message;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_message);
}
static void
@ -172,8 +167,7 @@ MessageMode2_f (void)
if (con_data.force_commandline)
return;
chat_team = true;
key_dest = key_message;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_message);
}
static void
@ -329,8 +323,7 @@ C_Say (inputline_t *il)
Cbuf_AddText (con_data.cbuf, "say \"");
Cbuf_AddText (con_data.cbuf, line);
Cbuf_AddText (con_data.cbuf, "\"\n");
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
}
static void
@ -343,8 +336,7 @@ C_SayTeam (inputline_t *il)
Cbuf_AddText (con_data.cbuf, "say_team \"");
Cbuf_AddText (con_data.cbuf, line);
Cbuf_AddText (con_data.cbuf, "\"\n");
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
}
static void
@ -473,8 +465,7 @@ C_KeyEvent (knum_t key, short unicode, qboolean down)
} else {
Con_ClearTyping (say_line, 1);
}
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
return;
case key_console:
if (!con_data.force_commandline) {
@ -482,7 +473,6 @@ C_KeyEvent (knum_t key, short unicode, qboolean down)
return;
}
case key_game:
case key_demo:
Menu_Enter ();
return;
default:

View file

@ -367,8 +367,7 @@ bi_Menu_SelectMenu (progs_t *pr)
if (name && *name)
menu = Hash_Find (menu_hash, name);
if (menu) {
key_dest = key_menu;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_menu);
if (menu->enter_hook) {
run_menu_pre ();
PR_ExecuteProgram (&menu_pr_state, menu->enter_hook);
@ -378,11 +377,9 @@ bi_Menu_SelectMenu (progs_t *pr)
if (name && *name)
Sys_Printf ("no menu \"%s\"\n", name);
if (con_data.force_commandline) {
key_dest = key_console;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_console);
} else {
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
}
}
}
@ -700,12 +697,10 @@ void
Menu_Enter ()
{
if (!top_menu) {
key_dest = key_console;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_console);
return;
}
key_dest = key_menu;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_menu);
menu = Hash_Find (menu_hash, top_menu);
if (menu && menu->enter_hook) {
run_menu_pre ();
@ -726,11 +721,9 @@ Menu_Leave ()
menu = menu->parent;
if (!menu) {
if (con_data.force_commandline) {
key_dest = key_console;
game_target = IMT_CONSOLE;
Key_SetKeyDest (key_console);
} else {
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
}
}
}

View file

@ -59,13 +59,14 @@ static __attribute__ ((used)) const char rcsid[] =
/* key up events are sent even if in console mode */
VISIBLE keydest_t key_dest = key_console;
VISIBLE imt_t game_target = IMT_CONSOLE;
VISIBLE imt_t key_game_target = IMT_0;
VISIBLE knum_t key_togglemenu = QFK_ESCAPE;
VISIBLE knum_t key_toggleconsole = QFK_BACKQUOTE;
VISIBLE struct keybind_s keybindings[IMT_LAST][QFK_LAST];
VISIBLE int keydown[QFK_LAST];
static imt_t game_target = IMT_CONSOLE;
static int keyhelp;
static cbuf_t *cbuf;
@ -76,8 +77,8 @@ typedef struct {
imtname_t imtnames[] = {
{"IMT_CONSOLE", IMT_CONSOLE},
{"IMT_DEMO", IMT_DEMO},
{"IMT_MOD", IMT_MOD},
{"IMT_DEMO", IMT_DEMO},
{"IMT_0", IMT_0},
{"IMT_1", IMT_1},
{"IMT_2", IMT_2},
@ -457,25 +458,6 @@ Key_Game (knum_t key, short unicode)
return true;
}
/*
Key_Demo
Interactive line editing and console scrollback
*/
static void
Key_Demo (knum_t key, short unicode)
{
const char *kb;
// escape is un-bindable
if (keydown[key] == 1 && key && Key_Game (key, unicode))
return;
kb = Key_GetBinding (IMT_DEMO, key);
if (kb)
process_binding (key, kb);
}
/*
Key_Console
@ -877,9 +859,6 @@ Key_Event (knum_t key, short unicode, qboolean down)
case key_game:
Key_Game (key, unicode);
break;
case key_demo:
Key_Demo (key, unicode);
break;
case key_message:
case key_menu:
case key_console:
@ -965,3 +944,21 @@ Key_SetBinding (imt_t target, knum_t keynum, const char *binding)
keybindings[target][keynum].str = strdup(binding);
}
}
VISIBLE void
Key_SetKeyDest(keydest_t kd)
{
key_dest = kd;
switch (key_dest) {
default:
Sys_Error ("Bad key_dest");
case key_game:
game_target = key_game_target;
break;
case key_console:
case key_message:
case key_menu:
game_target = IMT_CONSOLE;
break;
}
}

View file

@ -127,6 +127,8 @@ CL_StopPlayback (void)
cls.demofile = NULL;
CL_SetState (ca_disconnected);
cls.demoplayback = 0;
key_game_target = IMT_0;
Key_SetKeyDest (key_game);
if (cls.timedemo)
CL_FinishTimeDemo ();
@ -357,8 +359,8 @@ CL_StartDemo (void)
cls.demoplayback = true;
CL_SetState (ca_connected);
cls.forcetrack = 0;
key_dest = key_demo;
game_target = IMT_DEMO;
key_game_target = IMT_DEMO;
Key_SetKeyDest (key_game);
while ((c = Qgetc (cls.demofile)) != '\n')
if (c == '-')

View file

@ -259,8 +259,7 @@ CL_EstablishConnection (const char *host)
CL_SetState (ca_connected);
cls.signon = 0; // need all the signon messages
// before playing
key_dest = key_game;
game_target = IMT_0;
Key_SetKeyDest (key_game);
}
/*
@ -429,20 +428,13 @@ CL_SetState (cactive_t state)
if (state == ca_active) {
// entering active state
r_active = true;
if (cls.demoplayback) {
game_target = IMT_DEMO;
key_dest = key_demo;
} else {
game_target = IMT_0;
key_dest = key_game;
}
Key_SetKeyDest (key_game);
IN_ClearStates ();
VID_SetCaption ("");
} else if (old_state == ca_active) {
// leaving active state
r_active = false;
game_target = IMT_CONSOLE;
key_dest = key_console;
Key_SetKeyDest (key_console);
VID_SetCaption ("Disconnected");
}
if (state == ca_connected)

View file

@ -1253,7 +1253,7 @@ Sbar_FinaleOverlay (void)
int remaining;
//FIXME cleaner test
if (key_dest != key_game && key_dest != key_demo)
if (key_dest != key_game)
return;
scr_copyeverything = 1;
@ -1274,7 +1274,7 @@ Sbar_DrawCenterPrint (void)
return;
//FIXME cleaner test
if (key_dest != key_game && key_dest != key_demo)
if (key_dest != key_game)
return;
Sbar_DrawCenterString (overlay_view, -1);

View file

@ -49,6 +49,7 @@ static __attribute__ ((used)) const char rcsid[] = "$Id$";
#include "QF/cmd.h"
#include "QF/cvar.h"
#include "QF/dstring.h"
#include "QF/keys.h"
#include "QF/msg.h"
#include "QF/qendian.h"
#include "QF/sys.h"
@ -147,6 +148,8 @@ CL_StopPlayback (void)
cls.demoplayback2 = 0;
demotime_cached = 0;
net_blocksend = 0;
key_game_target = IMT_0;
Key_SetKeyDest (key_game);
if (cls.timedemo)
CL_FinishTimeDemo ();
@ -898,6 +901,8 @@ CL_StartDemo (void)
}
cls.demoplayback = true;
key_game_target = IMT_DEMO;
Key_SetKeyDest (key_game);
net_blocksend = 1;
if (strequal (QFS_FileExtension (name->str), ".mvd")) {
cls.demoplayback2 = true;

View file

@ -1149,8 +1149,7 @@ CL_SetState (cactive_t state)
// leaving active state
IN_ClearStates ();
r_active = false;
game_target = IMT_CONSOLE;
key_dest = key_console;
Key_SetKeyDest (key_console);
// Auto demo recorder stops here
if (cl_autorecord->int_val && cls.demorecording)
@ -1160,13 +1159,7 @@ CL_SetState (cactive_t state)
VID_SetCaption (cls.servername->str);
IN_ClearStates ();
r_active = true;
if (cls.demoplayback) {
game_target = IMT_DEMO;
key_dest = key_demo;
} else {
game_target = IMT_0;
key_dest = key_game;
}
Key_SetKeyDest (key_game);
// Auto demo recorder starts here
if (cl_autorecord->int_val && !cls.demoplayback

View file

@ -1713,7 +1713,7 @@ Sbar_FinaleOverlay (void)
int remaining;
//FIXME cleaner test
if (key_dest != key_game && key_dest != key_demo)
if (key_dest != key_game)
return;
scr_copyeverything = 1;
@ -1734,7 +1734,7 @@ Sbar_DrawCenterPrint (void)
return;
//FIXME cleaner test
if (key_dest != key_game && key_dest != key_demo)
if (key_dest != key_game)
return;
Sbar_DrawCenterString (overlay_view, -1);