diff --git a/src/InputFilter.cpp b/src/InputFilter.cpp index 00d8228f9c..9a7faa1d68 100644 --- a/src/InputFilter.cpp +++ b/src/InputFilter.cpp @@ -7,6 +7,8 @@ #include "RageThreads.h" #include "Preference.h" #include "Foreach.h" +#include "GameInput.h" +#include "InputMapper.h" // for mouse stuff: -aj #include "PrefsManager.h" #include "ScreenDimensions.h" @@ -229,12 +231,26 @@ void InputFilter::CheckButtonChange( ButtonState &bs, DeviceInput di, const Rage { if( bs.m_BeingHeld == bs.m_bLastReportedHeld ) return; + + GameInput gi; - /* If the last IET_FIRST_PRESS or IET_RELEASE event was sent too recently, - * wait a while before sending it. */ - if( now - bs.m_LastReportTime < g_fInputDebounceTime ) - return; - + /* Possibly apply debounce, + * If the input was coin, possibly apply distinct coin debounce in the else below. */ + if (! INPUTMAPPER->DeviceToGame(di, gi) || gi.button != GAME_BUTTON_COIN ) + { + /* If the last IET_FIRST_PRESS or IET_RELEASE event was sent too recently, + * wait a while before sending it. */ + if( now - bs.m_LastReportTime < g_fInputDebounceTime ) + { + return; + } + } else { + if( now - bs.m_LastReportTime < PREFSMAN->m_fDebounceCoinInputTime ) + { + return; + } + } + bs.m_LastReportTime = now; bs.m_bLastReportedHeld = bs.m_BeingHeld; bs.m_fSecsHeld = 0; diff --git a/src/PrefsManager.cpp b/src/PrefsManager.cpp index 79ef13dace..7fd7c2e6aa 100644 --- a/src/PrefsManager.cpp +++ b/src/PrefsManager.cpp @@ -254,6 +254,7 @@ PrefsManager::PrefsManager() : m_bAllowMultipleHighScoreWithSameName ( "AllowMultipleHighScoreWithSameName", true ), m_bCelShadeModels ( "CelShadeModels", false ), // Work-In-Progress.. disable by default. m_bPreferredSortUsesGroups ( "PreferredSortUsesGroups", true ), + m_fDebounceCoinInputTime ( "DebounceCoinInputTime", 0 ), m_fPadStickSeconds ( "PadStickSeconds", 0 ), m_bForceMipMaps ( "ForceMipMaps", false ), diff --git a/src/PrefsManager.h b/src/PrefsManager.h index e27daf627e..dddacbcef7 100644 --- a/src/PrefsManager.h +++ b/src/PrefsManager.h @@ -245,6 +245,7 @@ public: Preference m_bAllowMultipleHighScoreWithSameName; Preference m_bCelShadeModels; Preference m_bPreferredSortUsesGroups; + Preference m_fDebounceCoinInputTime; // allow users to apply a distinct debounce to coin input // Number of seconds it takes for a button on the controller to release // after pressed.