// (c) 1995-2014 by Artsoft Entertainment
// Holger Schemel
// info@artsoft.org
-// http://www.artsoft.org/
+// https://www.artsoft.org/
// ----------------------------------------------------------------------------
// events.c
// ============================================================================
local_player->mouse_action.ly = ly;
local_player->mouse_action.button = button;
- if (tape.recording && tape.pausing && tape.use_mouse)
+ if (tape.recording && tape.pausing && tape.use_mouse_actions)
{
// un-pause a paused game only if mouse button was newly pressed down
if (new_button)
{
if (strEqual(setup.touch.control_type, TOUCH_CONTROL_FOLLOW_FINGER))
HandleButtonOrFinger_FollowFinger(mx, my, button);
- else if (level.has_mouse_events && valid_mouse_event)
+ else if (game.use_mouse_actions && valid_mouse_event)
SetPlayerMouseAction(mx, my, button);
}
}
-static boolean checkTextInputKeyModState(void)
+static boolean checkTextInputKey(Key key)
{
// when playing, only handle raw key events and ignore text input
if (game_status == GAME_MODE_PLAYING)
return FALSE;
- return ((GetKeyModState() & KMOD_TextInput) != KMOD_None);
+ // else handle all printable keys as text input
+ return KSYM_PRINTABLE(key);
}
void HandleTextEvent(TextEvent *event)
GetKeyModState());
#endif
-#if !defined(HAS_SCREEN_KEYBOARD)
- // non-mobile devices: only handle key input with modifier keys pressed here
- // (every other key input is handled directly as physical key input event)
- if (!checkTextInputKeyModState())
- return;
-#endif
-
- // process text input as "classic" (with uppercase etc.) key input event
- HandleKey(key, KEY_PRESSED);
- HandleKey(key, KEY_RELEASED);
+ if (checkTextInputKey(key))
+ {
+ // process printable keys (with uppercase etc.) in text input mode
+ HandleKey(key, KEY_PRESSED);
+ HandleKey(key, KEY_RELEASED);
+ }
}
void HandlePauseResumeEvent(PauseResumeEvent *event)
HandleKeyModState(keymod, key_status);
- // only handle raw key input without text modifier keys pressed
- if (!checkTextInputKeyModState())
+ // process all keys if not in text input mode or if non-printable keys
+ if (!checkTextInputKey(key))
HandleKey(key, key_status);
}
if (stored_player[pnr].snap_action)
stored_player[pnr].action |= JOY_BUTTON_SNAP;
- if (tape.single_step && tape.recording && tape.pausing && !tape.use_mouse)
+ if (tape.recording && tape.pausing && tape.use_key_actions)
{
- if (key_status == KEY_PRESSED && key_action & KEY_MOTION)
+ if (tape.single_step)
{
- TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+ if (key_status == KEY_PRESSED && key_action & KEY_MOTION)
+ {
+ TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
- // if snap key already pressed, keep pause mode when releasing
- if (stored_player[pnr].action & KEY_BUTTON_SNAP)
- has_snapped[pnr] = TRUE;
- }
- else if (key_status == KEY_PRESSED && key_action & KEY_BUTTON_DROP)
- {
- TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+ // if snap key already pressed, keep pause mode when releasing
+ if (stored_player[pnr].action & KEY_BUTTON_SNAP)
+ has_snapped[pnr] = TRUE;
+ }
+ else if (key_status == KEY_PRESSED && key_action & KEY_BUTTON_DROP)
+ {
+ TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
- if (level.game_engine_type == GAME_ENGINE_TYPE_SP &&
- getRedDiskReleaseFlag_SP() == 0)
+ if (level.game_engine_type == GAME_ENGINE_TYPE_SP &&
+ getRedDiskReleaseFlag_SP() == 0)
+ {
+ // add a single inactive frame before dropping starts
+ stored_player[pnr].action &= ~KEY_BUTTON_DROP;
+ stored_player[pnr].force_dropping = TRUE;
+ }
+ }
+ else if (key_status == KEY_RELEASED && key_action & KEY_BUTTON_SNAP)
{
- // add a single inactive frame before dropping starts
- stored_player[pnr].action &= ~KEY_BUTTON_DROP;
- stored_player[pnr].force_dropping = TRUE;
+ // if snap key was pressed without direction, leave pause mode
+ if (!has_snapped[pnr])
+ TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+
+ has_snapped[pnr] = FALSE;
}
}
- else if (key_status == KEY_RELEASED && key_action & KEY_BUTTON_SNAP)
+ else
{
- // if snap key was pressed without direction, leave pause mode
- if (!has_snapped[pnr])
- TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
-
- has_snapped[pnr] = FALSE;
+ // prevent key release events from un-pausing a paused game
+ if (key_status == KEY_PRESSED && key_action & KEY_ACTION)
+ TapeTogglePause(TAPE_TOGGLE_MANUAL);
}
}
- else if (tape.recording && tape.pausing && !tape.use_mouse)
- {
- // prevent key release events from un-pausing a paused game
- if (key_status == KEY_PRESSED && key_action & KEY_ACTION)
- TapeTogglePause(TAPE_TOGGLE_MANUAL);
- }
// for MM style levels, handle in-game keyboard input in HandleJoystick()
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
return;
}
- if (tape.single_step && tape.recording && tape.pausing && !tape.use_mouse)
- {
- if (joystick & JOY_ACTION)
- TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
- }
- else if (tape.recording && tape.pausing && !tape.use_mouse)
+ if (tape.recording && tape.pausing && tape.use_key_actions)
{
- if (joystick & JOY_ACTION)
- TapeTogglePause(TAPE_TOGGLE_MANUAL);
+ if (tape.single_step)
+ {
+ if (joystick & JOY_ACTION)
+ TapeTogglePause(TAPE_TOGGLE_AUTOMATIC);
+ }
+ else
+ {
+ if (joystick & JOY_ACTION)
+ TapeTogglePause(TAPE_TOGGLE_MANUAL);
+ }
}
if (level.game_engine_type == GAME_ENGINE_TYPE_MM)