mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	Improve double tap for jump detection (#12793)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							e832cee1e6
						
					
				
				
					commit
					13a8948edd
				
			@@ -676,7 +676,10 @@ struct GameRunData {
 | 
			
		||||
	float time_from_last_punch;
 | 
			
		||||
	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 update_draw_list_timer;
 | 
			
		||||
 | 
			
		||||
@@ -1958,8 +1961,10 @@ void Game::processUserInput(f32 dtime)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	// Increase timer for double tap of "keymap_jump"
 | 
			
		||||
	if (m_cache_doubletap_jump && runData.jump_timer <= 0.2f)
 | 
			
		||||
		runData.jump_timer += dtime;
 | 
			
		||||
	if (m_cache_doubletap_jump && runData.jump_timer_up <= 0.2f)
 | 
			
		||||
		runData.jump_timer_up += dtime;
 | 
			
		||||
	if (m_cache_doubletap_jump && runData.jump_timer_down <= 0.4f)
 | 
			
		||||
		runData.jump_timer_down += dtime;
 | 
			
		||||
 | 
			
		||||
	processKeyInput();
 | 
			
		||||
	processItemSelection(&runData.new_playeritem);
 | 
			
		||||
@@ -2080,7 +2085,7 @@ void Game::processKeyInput()
 | 
			
		||||
 | 
			
		||||
	if (!isKeyDown(KeyType::JUMP) && runData.reset_jump_timer) {
 | 
			
		||||
		runData.reset_jump_timer = false;
 | 
			
		||||
		runData.jump_timer = 0.0f;
 | 
			
		||||
		runData.jump_timer_up = 0.0f;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (quicktune->hasMessage()) {
 | 
			
		||||
@@ -2221,7 +2226,14 @@ void Game::toggleFreeMove()
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
 | 
			
		||||
	runData.reset_jump_timer = true;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user