Files
itgmania212121/stepmania/src/InputFilter.cpp
T

87 lines
2.1 KiB
C++
Raw Normal View History

2002-04-16 17:31:00 +00:00
#include "stdafx.h"
/*
-----------------------------------------------------------------------------
Class: InputFilter
Desc: See header.
2002-05-19 01:59:48 +00:00
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
2002-04-16 17:31:00 +00:00
Chris Danford
-----------------------------------------------------------------------------
*/
#include <math.h> // for fmod
#include "InputFilter.h"
2002-05-01 19:14:55 +00:00
#include "RageLog.h"
2002-04-16 17:31:00 +00:00
#include "RageInput.h"
#include "ErrorCatcher/ErrorCatcher.h"
2002-05-19 01:59:48 +00:00
InputFilter* INPUTFILTER = NULL; // global and accessable from anywhere in our program
2002-04-16 17:31:00 +00:00
void InputFilter::GetInputEvents( InputEventArray &array, float fDeltaTime )
{
2002-05-19 01:59:48 +00:00
INPUTMAN->Update();
2002-04-16 17:31:00 +00:00
for( int d=0; d<NUM_INPUT_DEVICES; d++ ) // foreach InputDevice
{
int iNumButtonsToCheck;
switch( d )
{
case DEVICE_KEYBOARD:
iNumButtonsToCheck = NUM_KEYBOARD_BUTTONS;
break;
case DEVICE_JOY1:
case DEVICE_JOY2:
case DEVICE_JOY3:
case DEVICE_JOY4:
iNumButtonsToCheck = NUM_JOYSTICK_BUTTONS;
break;
default:
ASSERT( false );
}
for( int b=0; b<iNumButtonsToCheck; b++ ) // foreach button
{
const DeviceInput di = DeviceInput(InputDevice(d),b);
2002-05-19 01:59:48 +00:00
if( INPUTMAN->WasBeingPressed(di) )
2002-04-16 17:31:00 +00:00
{
2002-05-19 01:59:48 +00:00
if( INPUTMAN->IsBeingPressed(di) )
2002-04-16 17:31:00 +00:00
{
const float fOldHoldTime = m_fTimeHeld[d][b];
m_fTimeHeld[d][b] += fDeltaTime;
const float fNewHoldTime = m_fTimeHeld[d][b];
float fTimeBetweenRepeats;
InputEventType iet;
if( fOldHoldTime > TIME_BEFORE_SLOW_REPEATS )
{
if( fOldHoldTime > TIME_BEFORE_FAST_REPEATS )
{
fTimeBetweenRepeats = TIME_BETWEEN_FAST_REPEATS;
iet = IET_FAST_REPEAT;
}
else
{
fTimeBetweenRepeats = TIME_BETWEEN_SLOW_REPEATS;
iet = IET_SLOW_REPEAT;
}
if( int(fOldHoldTime/fTimeBetweenRepeats) != int(fNewHoldTime/fTimeBetweenRepeats) )
array.Add( InputEvent(di,iet) );
}
}
2002-05-19 01:59:48 +00:00
else // !INPUTMAN->IsBeingPressed(di)
2002-04-16 17:31:00 +00:00
m_fTimeHeld[d][b] = 0;
}
2002-05-19 01:59:48 +00:00
else // !INPUTMAN->WasBeingPressed(di)
2002-04-16 17:31:00 +00:00
{
2002-05-19 01:59:48 +00:00
if( INPUTMAN->IsBeingPressed(di) )
2002-04-16 17:31:00 +00:00
array.Add( InputEvent(di,IET_FIRST_PRESS) );
2002-05-19 01:59:48 +00:00
else // !INPUTMAN->IsBeingPressed(di)
2002-04-16 17:31:00 +00:00
; // don't care
}
}
}
}