|
|
//===== Copyright � 1996-2005, 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);
}
|