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.
138 lines
3.9 KiB
138 lines
3.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//===========================================================================// |
|
|
|
#include "inputsystem.h" |
|
#include "key_translation.h" |
|
#include "inputsystem/ButtonCode.h" |
|
#include "inputsystem/AnalogCode.h" |
|
#include "tier1/convar.h" |
|
|
|
typedef void*(*NovintGetIHaptics_t)(void); |
|
typedef bool (*NovintAttemptHWND_t)(void *hWnd); |
|
typedef void (*NovintDisableHWND_t)(void); |
|
typedef void (*NovintPollDevices_t)(void); |
|
typedef bool (*NovintButtonState_t)(int nDevice, |
|
int &down, |
|
int &pressed, |
|
int &released); |
|
typedef int (*NovintDeviceCount_t)(); |
|
typedef int (*NovintButtonCount_t)(int nDevice); |
|
typedef bool (__cdecl *NovintMouseModeCallback_t) (void); |
|
typedef void (*NovintInputActive_t)(bool bGameInput); |
|
typedef __int64 (*NovintGetDeviceID_t)(int nDevice); |
|
|
|
NovintGetIHaptics_t NovintGetIHaptics = NULL; |
|
NovintAttemptHWND_t NovintAttemptHWND = NULL; |
|
NovintDisableHWND_t NovintDisableHWND = NULL; |
|
NovintPollDevices_t NovintPollDevices = NULL; |
|
NovintButtonState_t NovintButtonState = NULL; |
|
NovintDeviceCount_t NovintDeviceCount = NULL; |
|
NovintButtonCount_t NovintButtonCount = NULL; |
|
NovintInputActive_t NovintInputActive = NULL; |
|
NovintGetDeviceID_t NovintGetDeviceID = NULL; |
|
|
|
static CInputSystem *pNovintInputSystem = 0; |
|
|
|
static bool bNovintPure = false; |
|
|
|
bool __cdecl NovintDevicesInputMode(void) |
|
{ |
|
if(pNovintInputSystem) |
|
{ |
|
return !bNovintPure; |
|
} |
|
return false; |
|
} |
|
|
|
void *CInputSystem::GetHapticsInterfaceAddress(void)const |
|
{ |
|
if( NovintGetIHaptics ) |
|
return NovintGetIHaptics(); |
|
|
|
return NULL; |
|
} |
|
|
|
void CInputSystem::AttachWindowToNovintDevices( void * hWnd ) |
|
{ |
|
if( NovintAttemptHWND ) |
|
NovintAttemptHWND( hWnd ); |
|
} |
|
|
|
void CInputSystem::DetachWindowFromNovintDevices(void) |
|
{ |
|
if( NovintDisableHWND ) |
|
NovintDisableHWND(); |
|
} |
|
|
|
void CInputSystem::InitializeNovintDevices() |
|
{ |
|
pNovintInputSystem = this; |
|
// assume no novint devices |
|
m_bNovintDevices = false; |
|
m_nNovintDeviceCount = 0; |
|
|
|
if(!m_pNovintDLL) |
|
return; |
|
|
|
NovintGetIHaptics = (NovintGetIHaptics_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintGetIHaptics" ); |
|
NovintAttemptHWND = (NovintAttemptHWND_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintAttemptHWND" ); |
|
NovintDisableHWND = (NovintDisableHWND_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintDisableHWND" ); |
|
NovintPollDevices = (NovintPollDevices_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintPollDevices" ); |
|
NovintButtonState = (NovintButtonState_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintButtonState" ); |
|
NovintDeviceCount = (NovintDeviceCount_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintDeviceCount" ); |
|
NovintButtonCount = (NovintButtonCount_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintButtonCount" ); |
|
NovintGetDeviceID = (NovintGetDeviceID_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintGetDeviceID" ); |
|
NovintInputActive = (NovintInputActive_t)GetProcAddress( (HMODULE)m_pNovintDLL, "NovintInputActive" ); |
|
|
|
|
|
m_nNovintDeviceCount = NovintDeviceCount(); |
|
|
|
if( m_nNovintDeviceCount > 0 ) |
|
m_bNovintDevices = true; |
|
} |
|
|
|
void CInputSystem::PollNovintDevices() |
|
{ |
|
if( NovintPollDevices ) |
|
NovintPollDevices(); |
|
|
|
for ( int i = 0; i < m_nNovintDeviceCount; i++ ) |
|
{ |
|
UpdateNovintDeviceButtonState(i); |
|
} |
|
} |
|
|
|
void CInputSystem::UpdateNovintDeviceButtonState(int nDevice) |
|
{ |
|
int nDown; |
|
int nPressed; |
|
int nReleased; |
|
if(NovintButtonState(nDevice, nDown, nPressed, nReleased)) |
|
{ |
|
for ( int i = 0; i < 4; i++ ) |
|
{ |
|
ButtonCode_t code = (ButtonCode_t)( NOVINT_FIRST + ( nDevice * 4 ) + i ); |
|
|
|
if( nPressed & (1 << i) ) |
|
{ |
|
PostButtonPressedEvent(IE_ButtonPressed, m_nLastSampleTick, code, KEY_NONE); |
|
} |
|
|
|
if( nReleased & (1 << i) ) |
|
{ |
|
PostButtonReleasedEvent(IE_ButtonReleased, m_nLastSampleTick, code, KEY_NONE); |
|
} |
|
} |
|
} |
|
} |
|
|
|
void CInputSystem::SetNovintPure( bool bPure ) |
|
{ |
|
bNovintPure = bPure; |
|
if(NovintInputActive) |
|
NovintInputActive(bNovintPure); |
|
|
|
} |