diff --git a/stepmania/src/InputFilter.cpp b/stepmania/src/InputFilter.cpp index 3b18f36e76..b5f2b3aa30 100644 --- a/stepmania/src/InputFilter.cpp +++ b/stepmania/src/InputFilter.cpp @@ -19,8 +19,7 @@ static float g_fTimeBeforeSlow, g_fTimeBeforeFast, g_fTimeBetweenSlow, g_fTimeBe InputFilter::InputFilter() { queuemutex = new RageMutex("InputFilter"); - memset( m_BeingHeld, 0, sizeof(m_BeingHeld) ); - memset( m_fSecsHeld, 0, sizeof(m_fSecsHeld) ); + memset( m_ButtonState, 0, sizeof(m_ButtonState) ); Reset(); ResetRepeatRate(); @@ -54,13 +53,17 @@ void InputFilter::ButtonPressed( DeviceInput di, bool Down ) { LockMut(*queuemutex); - if(m_BeingHeld[di.device][di.button] == Down) + ButtonState &bs = m_ButtonState[di.device][di.button]; + + bs.m_Level = di.level; + + if( bs.m_BeingHeld == Down ) return; const bool WasBeingPressed = IsBeingPressed( di ); - m_BeingHeld[di.device][di.button] = Down; - m_fSecsHeld[di.device][di.button] = 0; + bs.m_BeingHeld = Down; + bs.m_fSecsHeld = 0; if( WasBeingPressed != IsBeingPressed(di) ) { InputEventType iet = IsBeingPressed(di)? IET_FIRST_PRESS:IET_RELEASE; @@ -97,7 +100,7 @@ void InputFilter::Update(float fDeltaTime) // Don't reconstruct "di" inside the loop. This line alone is // taking 4% of the CPU on a P3-666. - DeviceInput di( (InputDevice)0,0,now); + DeviceInput di( (InputDevice)0,0,1.0f,now); for( int d=0; d InputEventArray; class RageMutex; class InputFilter { - bool m_BeingHeld[NUM_INPUT_DEVICES][MAX_DEVICE_BUTTONS]; - float m_fSecsHeld[NUM_INPUT_DEVICES][MAX_DEVICE_BUTTONS]; + struct ButtonState + { + bool m_BeingHeld; + float m_fSecsHeld; + float m_Level, m_LastLevel; + }; + ButtonState m_ButtonState[NUM_INPUT_DEVICES][MAX_DEVICE_BUTTONS]; InputEventArray queue; RageMutex *queuemutex;