improve menu autorepeat

git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@634 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2009-02-03 10:45:56 +00:00
parent 0b3e1198e7
commit 6c263f30cc

View file

@ -273,33 +273,27 @@ int in_menu_wait_any(int timeout_ms)
int in_menu_wait(int interesting) int in_menu_wait(int interesting)
{ {
static int inp_prev = 0; static int inp_prev = 0;
static int repeats = 0, wait = 20; static int repeats = 0;
int ret = 0, release = 0, i; int ret, release = 0, wait = 666;
if (repeats == 2) wait = 3; if (repeats)
else if (repeats == 4) wait = 2; wait = 33;
else if (repeats == 6) wait = 1;
for (i = 0; i < wait; i++) { ret = in_menu_wait_any(wait);
ret = in_menu_wait_any(30); if (ret == inp_prev)
if (ret != inp_prev) break; repeats++;
if (i == 0) repeats++;
}
while (!(ret & interesting)) { while (!(ret & interesting)) {
ret = in_menu_wait_any(-1); ret = in_menu_wait_any(-1);
release = 1; release = 1;
} }
if (release || ret != inp_prev) { if (release || ret != inp_prev)
repeats = 0; repeats = 0;
wait = 20;
}
if (wait > 6 && (ret & (PBTN_UP|PBTN_DOWN|PBTN_LEFT|PBTN_RIGHT)))
wait = 6;
inp_prev = ret; inp_prev = ret;
// we don't need diagonals in menus /* we don't need diagonals in menus */
if ((ret & PBTN_UP) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT; if ((ret & PBTN_UP) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT;
if ((ret & PBTN_UP) && (ret & PBTN_RIGHT)) ret &= ~PBTN_RIGHT; if ((ret & PBTN_UP) && (ret & PBTN_RIGHT)) ret &= ~PBTN_RIGHT;
if ((ret & PBTN_DOWN) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT; if ((ret & PBTN_DOWN) && (ret & PBTN_LEFT)) ret &= ~PBTN_LEFT;
@ -452,6 +446,11 @@ int in_config_parse_dev(const char *name)
return i; return i;
} }
/*
* To reduce size of game specific configs, default binds are not saved.
* So we mark default binds in in_config_start(), override them in in_config_bind_key(),
* and restore whatever default binds are left in in_config_end().
*/
void in_config_start(void) void in_config_start(void)
{ {
int i; int i;