static unsigned int special_cursor_delay = 0;
static unsigned int special_cursor_delay_value = 1000;
+static boolean virtual_button_pressed = FALSE;
+
// forward declarations for internal use
static void HandleNoEvent(void);
"KEY_PRESSED");
int i;
+ virtual_button_pressed = (key_status == KEY_PRESSED && key != KSYM_UNDEFINED);
+
// for any touch input event, enable overlay buttons (if activated)
SetOverlayEnabled(TRUE);
// always map the "back" button to the "escape" key on Android devices
key = KSYM_Escape;
}
+ else if (key == KSYM_Menu)
+ {
+ // the "menu" button can be used to toggle displaying virtual buttons
+ if (key_status == KEY_PRESSED)
+ SetOverlayEnabled(!GetOverlayEnabled());
+ }
else
{
- // for any key event other than "back" button, disable overlay buttons
+ // for any other "real" key event, disable virtual buttons
SetOverlayEnabled(FALSE);
}
#endif
#if defined(PLATFORM_ANDROID)
// when playing, only handle gadgets when using "follow finger" controls
// or when using touch controls in combination with the MM game engine
+ // or when using gadgets that do not overlap with virtual buttons
handle_gadgets =
(game_status != GAME_MODE_PLAYING ||
level.game_engine_type == GAME_ENGINE_TYPE_MM ||
- strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER));
+ strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER) ||
+ (strEqual(setup.touch.control_type, TOUCH_CONTROL_VIRTUAL_BUTTONS) &&
+ !virtual_button_pressed));
#endif
if (HandleGlobalAnimClicks(mx, my, button))
}
}
-void HandleKeysDebug(Key key)
+boolean HandleKeysDebug(Key key, int key_status)
{
#ifdef DEBUG
int i;
+ if (key_status != KEY_PRESSED)
+ return FALSE;
+
if (game_status == GAME_MODE_PLAYING || !setup.debug.frame_delay_game_only)
{
boolean mod_key_pressed = ((GetKeyModState() & KMOD_Valid) != KMOD_None);
else
Error(ERR_DEBUG, "frame delay == 0 ms (maximum speed)");
- break;
+ return TRUE;
}
}
}
Error(ERR_DEBUG, "debug mode %s",
(options.debug ? "enabled" : "disabled"));
+
+ return TRUE;
}
else if (key == KSYM_v)
{
Error(ERR_DEBUG, "currently using game engine version %d",
game.engine_version);
+
+ return TRUE;
}
}
#endif
+
+ return FALSE;
}
void HandleKey(Key key, int key_status)
int joy = 0;
int i;
+ if (HandleKeysDebug(key, key_status))
+ return; // do not handle already processed keys again
+
// map special keys (media keys / remote control buttons) to default keys
if (key == KSYM_PlayPause)
key = KSYM_space;
return;
}
}
-
- HandleKeysDebug(key);
}
void HandleNoEvent(void)
return;
}
+ if (newbutton && (game_status == GAME_MODE_PSEUDO_TYPENAME ||
+ anyTextGadgetActive()))
+ {
+ // leave name input in main menu or text input gadget
+ HandleKey(KSYM_Escape, KEY_PRESSED);
+ HandleKey(KSYM_Escape, KEY_RELEASED);
+
+ return;
+ }
+
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
{
if (game_status == GAME_MODE_PLAYING)