mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
//========= 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);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user