Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "keyrepeat.h"
#include "inputsystem/buttoncode.h"
#include "tier0/dbg.h"
// memdbgon must be the last include file in a .cpp file
#include "tier0/memdbgon.h"
//#define DEBUG_REPEATS
#ifdef DEBUG_REPEATS
#define DbgRepeat(...) ConMsg( __VA_ARGS__ )
#else
#define DbgRepeat(...)
#endif
ButtonCode_t g_iCodesForAliases[FM_NUM_KEYREPEAT_ALIASES] = { KEY_XBUTTON_UP, KEY_XBUTTON_DOWN, KEY_XBUTTON_LEFT, KEY_XBUTTON_RIGHT };
//-----------------------------------------------------------------------------
// Purpose: Map joystick codes to our internal ones
//-----------------------------------------------------------------------------
static int GetIndexForCode( ButtonCode_t code ) { ButtonCode_t localCode = GetBaseButtonCode( code );
switch ( localCode ) { case KEY_XBUTTON_DOWN: case KEY_XSTICK1_DOWN: case KEY_XSTICK2_DOWN: return KR_ALIAS_DOWN; break; case KEY_XBUTTON_UP: case KEY_XSTICK1_UP: case KEY_XSTICK2_UP: return KR_ALIAS_UP; break; case KEY_XBUTTON_LEFT: case KEY_XSTICK1_LEFT: case KEY_XSTICK2_LEFT: return KR_ALIAS_LEFT; break; case KEY_XBUTTON_RIGHT: case KEY_XSTICK1_RIGHT: case KEY_XSTICK2_RIGHT: return KR_ALIAS_RIGHT; break; default: break; } return -1; }
//-----------------------------------------------------------------------------
CKeyRepeatHandler::CKeyRepeatHandler() { Reset(); for ( int i = 0; i < FM_NUM_KEYREPEAT_ALIASES; i++ ) { m_flRepeatTimes[i] = 0.16; } }
//-----------------------------------------------------------------------------
// Purpose: Clear all state
//-----------------------------------------------------------------------------
void CKeyRepeatHandler::Reset() { DbgRepeat( "KeyRepeat: Reset\n" );
memset( m_bAliasDown, 0, sizeof( m_bAliasDown ) ); m_bHaveKeyDown = false; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CKeyRepeatHandler::KeyDown( ButtonCode_t code ) { int joyStick = GetJoystickForCode( code ); int iIndex = GetIndexForCode(code); if ( iIndex == -1 ) return;
if ( m_bAliasDown[ joyStick ][ iIndex ] ) return;
DbgRepeat( "KeyRepeat: KeyDown %d(%d)\n", joyStick, iIndex );
Reset(); m_bAliasDown[ joyStick ][ iIndex ] = true; m_flNextKeyRepeat[ joyStick ] = Plat_FloatTime() + 0.4; m_bHaveKeyDown = true; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CKeyRepeatHandler::KeyUp( ButtonCode_t code ) { int joyStick = GetJoystickForCode( code ); int iIndex = GetIndexForCode(code); if ( iIndex == -1 ) return;
DbgRepeat( "KeyRepeat: KeyUp %d(%d)\n", joyStick, iIndex );
m_bAliasDown[ joyStick ][ iIndex ] = false;
m_bHaveKeyDown = false; for ( int i = 0; i < FM_NUM_KEYREPEAT_ALIASES; i++ ) { for ( int j = 0; j < MAX_JOYSTICKS; j++ ) { if ( m_bAliasDown[ j ][ i ] ) { m_bHaveKeyDown = true; break; } } } }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
ButtonCode_t CKeyRepeatHandler::KeyRepeated( void ) { if ( IsPC() ) return BUTTON_CODE_NONE;
if ( !m_bHaveKeyDown ) return BUTTON_CODE_NONE;
float currentTime = Plat_FloatTime();
for ( int j = 0; j < MAX_JOYSTICKS; j++ ) { if ( m_flNextKeyRepeat[ j ] < currentTime ) { for ( int i = 0; i < FM_NUM_KEYREPEAT_ALIASES; i++ ) { if ( m_bAliasDown[ j ][ i ] ) { m_flNextKeyRepeat[ j ] = currentTime + m_flRepeatTimes[i]; DbgRepeat( "KeyRepeat: Repeat %d(%d)\n", j, i );
return ButtonCodeToJoystickButtonCode( g_iCodesForAliases[i], j ); } } } }
return BUTTON_CODE_NONE; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CKeyRepeatHandler::SetKeyRepeatTime( ButtonCode_t code, float flRepeat ) { int iIndex = GetIndexForCode(code); Assert( iIndex != -1 ); m_flRepeatTimes[ iIndex ] = flRepeat; }
|