summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2016-11-04 22:43:43 -0400
committerFranklin Wei <frankhwei536@gmail.com>2016-11-04 22:43:43 -0400
commit2dd8aee4e7a270fc6d978fd482aea59f2ade2bd7 (patch)
tree0edb2e547b7ee4c8fdce20832d9ee4e556d8c549 /apps
parent9a1bad20ee8b02be42699c199854e81a714a0c32 (diff)
parent1498b7ae6e37df6a03f5125e7cb7bf1a0b6ad9a5 (diff)
downloadrockbox-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.c74
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)