diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2016-11-04 22:43:43 -0400 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2016-11-04 22:43:43 -0400 |
| commit | 2dd8aee4e7a270fc6d978fd482aea59f2ade2bd7 (patch) | |
| tree | 0edb2e547b7ee4c8fdce20832d9ee4e556d8c549 /apps | |
| parent | 9a1bad20ee8b02be42699c199854e81a714a0c32 (diff) | |
| parent | 1498b7ae6e37df6a03f5125e7cb7bf1a0b6ad9a5 (diff) | |
| download | rockbox-2dd8aee4e7a270fc6d978fd482aea59f2ade2bd7.zip rockbox-2dd8aee4e7a270fc6d978fd482aea59f2ade2bd7.tar.gz rockbox-2dd8aee4e7a270fc6d978fd482aea59f2ade2bd7.tar.bz2 rockbox-2dd8aee4e7a270fc6d978fd482aea59f2ade2bd7.tar.xz | |
Merge branch 'xworldfix7' into working
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/plugins/xworld/sys.c | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/apps/plugins/xworld/sys.c b/apps/plugins/xworld/sys.c index 15fdb46..942ab3a 100644 --- a/apps/plugins/xworld/sys.c +++ b/apps/plugins/xworld/sys.c @@ -698,10 +698,13 @@ void sys_processEvents(struct System* sys) int btn = rb->button_status(); rb->button_clear_queue(); btn &= ~BUTTON_REDRAW; + + static int oldbuttonstate = 0; + debug(DBG_SYS, "button is 0x%08x", btn); /* exit early if we can */ - if(btn == BUTTON_NONE) + if(btn == BUTTON_NONE && btn == oldbuttonstate) { return; } @@ -713,10 +716,12 @@ void sys_processEvents(struct System* sys) if(btn & 0x80000000) return; #endif + #if (CONFIG_KEYPAD == SANSA_E200_PAD) if(btn == (BUTTON_SCROLL_FWD || BUTTON_SCROLL_BACK)) return; #endif + #if (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD) if(btn == (BUTTON_SELECT)) return; @@ -736,6 +741,72 @@ void sys_processEvents(struct System* sys) break; } + /* copied from doom which was copied from rockboy... */ + unsigned released = ~btn & oldbuttonstate; + unsigned pressed = btn & ~oldbuttonstate; + oldbuttonstate = newbuttonstate; + + if(released) + { + if(btn & BTN_FIRE) + sys->input.button = false; + if(btn & sys->keymap.up) + sys->input.dirMask &= ~DIR_UP; + if(btn & sys->keymap.down) + sys->input.dirMask &= ~DIR_DOWN; + if(btn & sys->keymap.left) + sys->input.dirMask &= ~DIR_LEFT; + if(btn & sys->keymap.right) + sys->input.dirMask &= ~DIR_RIGHT; +#ifdef BTN_DOWN_LEFT + if(btn & sys->keymap.downleft) + sys->input.dirMask &= ~(DIR_DOWN | DIR_LEFT); +#endif +#ifdef BTN_DOWN_RIGHT + if(btn & sys->keymap.downright) + sys->input.dirMask &= ~(DIR_DOWN | DIR_RIGHT); +#endif +#ifdef BTN_UP_LEFT + if(btn & sys->keymap.upleft) + sys->input.dirMask &= ~(DIR_UP | DIR_LEFT); +#endif +#ifdef BTN_UP_RIGHT + if(btn & sys->keymap.upright) + sys->input.dirMask &= ~(DIR_UP | DIR_RIGHT); +#endif + } + + if(pressed) + { + if(btn & BTN_FIRE) + sys->input.button = true; + if(btn & sys->keymap.up) + sys->input.dirMask |= DIR_UP; + if(btn & sys->keymap.down) + sys->input.dirMask |= DIR_DOWN; + if(btn & sys->keymap.left) + sys->input.dirMask |= DIR_LEFT; + if(btn & sys->keymap.right) + sys->input.dirMask |= DIR_RIGHT; +#ifdef BTN_DOWN_LEFT + if(btn & sys->keymap.downleft) + sys->input.dirMask |= (DIR_DOWN | DIR_LEFT); +#endif +#ifdef BTN_DOWN_RIGHT + if(btn & sys->keymap.downright) + sys->input.dirMask |= (DIR_DOWN | DIR_RIGHT); +#endif +#ifdef BTN_UP_LEFT + if(btn & sys->keymap.upleft) + sys->input.dirMask |= (DIR_UP | DIR_LEFT); +#endif +#ifdef BTN_UP_RIGHT + if(btn & sys->keymap.upright) + sys->input.dirMask |= (DIR_UP | DIR_RIGHT); +#endif + } + +#if 0 /* handle releases */ if(btn & BUTTON_REL) { @@ -801,6 +872,7 @@ void sys_processEvents(struct System* sys) } debug(DBG_SYS, "dirMask is 0x%02x", sys->input.dirMask); debug(DBG_SYS, "button is %s", sys->input.button == true ? "true" : "false"); +#endif } void sys_sleep(struct System* sys, uint32_t duration) |