Improve double tap for jump detection (#12793)

This commit is contained in:
Muhammad Rifqi Priyo Susanto 2022-09-30 19:02:06 +07:00 committed by GitHub
parent e832cee1e6
commit 13a8948edd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -676,7 +676,10 @@ struct GameRunData {
float time_from_last_punch; float time_from_last_punch;
ClientActiveObject *selected_object; ClientActiveObject *selected_object;
float jump_timer; float jump_timer_up; // from key up until key down
float jump_timer_down; // since last key down
float jump_timer_down_before; // from key down until key down again
float damage_flash; float damage_flash;
float update_draw_list_timer; float update_draw_list_timer;
@ -1958,8 +1961,10 @@ void Game::processUserInput(f32 dtime)
#endif #endif
// Increase timer for double tap of "keymap_jump" // Increase timer for double tap of "keymap_jump"
if (m_cache_doubletap_jump && runData.jump_timer <= 0.2f) if (m_cache_doubletap_jump && runData.jump_timer_up <= 0.2f)
runData.jump_timer += dtime; runData.jump_timer_up += dtime;
if (m_cache_doubletap_jump && runData.jump_timer_down <= 0.4f)
runData.jump_timer_down += dtime;
processKeyInput(); processKeyInput();
processItemSelection(&runData.new_playeritem); processItemSelection(&runData.new_playeritem);
@ -2080,7 +2085,7 @@ void Game::processKeyInput()
if (!isKeyDown(KeyType::JUMP) && runData.reset_jump_timer) { if (!isKeyDown(KeyType::JUMP) && runData.reset_jump_timer) {
runData.reset_jump_timer = false; runData.reset_jump_timer = false;
runData.jump_timer = 0.0f; runData.jump_timer_up = 0.0f;
} }
if (quicktune->hasMessage()) { if (quicktune->hasMessage()) {
@ -2221,7 +2226,14 @@ void Game::toggleFreeMove()
void Game::toggleFreeMoveAlt() void Game::toggleFreeMoveAlt()
{ {
if (m_cache_doubletap_jump && runData.jump_timer < 0.2f) if (!runData.reset_jump_timer) {
runData.jump_timer_down_before = runData.jump_timer_down;
runData.jump_timer_down = 0.0f;
}
// key down (0.2 s max.), then key up (0.2 s max.), then key down
if (m_cache_doubletap_jump && runData.jump_timer_up < 0.2f &&
runData.jump_timer_down_before < 0.4f) // 0.2 + 0.2
toggleFreeMove(); toggleFreeMove();
runData.reset_jump_timer = true; runData.reset_jump_timer = true;