*** empty log message ***

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@538 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Lee Salzman
2006-11-08 02:49:27 +00:00
parent 6b8d8fc1f9
commit 487de00302
+24 -12
View File
@@ -96,11 +96,10 @@ void renderconsole() // render buffer taking into
struct keym
{
int code;
char *name, *action;
vector<char *> releaseactions;
int code;
char *name, *action;
~keym() { DELETEA(name); DELETEA(action); releaseactions.deletecontentsa(); };
~keym() { DELETEA(name); DELETEA(action); };
};
vector<keym> keyms;
@@ -132,10 +131,19 @@ void bindkey(char *key, char *action)
COMMANDN(bind, bindkey, ARG_2STR);
struct releaseaction
{
keym *key;
char *action;
};
vector<releaseaction> releaseactions;
char *addreleaseaction(char *s)
{
if(!keypressed) return NULL;
keypressed->releaseactions.add(newstring(s));
releaseaction &ra = releaseactions.add();
ra.key = keypressed;
ra.action = newstring(s);
return keypressed->name;
};
@@ -319,21 +327,25 @@ void keypress(int code, bool isdown, int cooked)
loopv(keyms) if(keyms[i].code==code) // keystrokes go to game, lookup in keymap and execute
{
keym &k = keyms[i];
loopv(releaseactions)
{
releaseaction &ra = releaseactions[i];
if(ra.key==&k)
{
if(!isdown) execute(ra.action);
delete[] ra.action;
releaseactions.remove(i--);
};
};
if(isdown)
{
keyaction = k.action;
keypressed = &k;
k.releaseactions.deletecontentsa();
execute(keyaction);
keypressed = NULL;
if(keyaction!=k.action) delete[] keyaction;
}
else if(k.releaseactions.length())
{
loopv(k.releaseactions) execute(k.releaseactions[i]);
k.releaseactions.deletecontentsa();
};
return;
break;
};
};
};