140 lines
2.6 KiB
C++
140 lines
2.6 KiB
C++
|
#include "common_headers.h"
|
||
|
|
||
|
#ifdef _IMMERSION
|
||
|
|
||
|
#include "..\win32\win_local.h"
|
||
|
|
||
|
////----------------
|
||
|
/// FFMultiSet::Init
|
||
|
//--------------------
|
||
|
// Initializes all attached force feedback devices. An empty FFSet is created
|
||
|
// for each device. Each device will have its own copy of whatever .ifr file
|
||
|
// set 'config' specifies.
|
||
|
//
|
||
|
// Always pair with clear()
|
||
|
//
|
||
|
qboolean FFMultiSet::Init( FFSystem::Config &config )
|
||
|
{
|
||
|
mConfig = &config;
|
||
|
|
||
|
#ifdef FF_PRINT
|
||
|
Com_Printf( "Feedback devices:\n" );
|
||
|
#endif
|
||
|
|
||
|
HINSTANCE hInstance = (HINSTANCE)g_wv.hInstance;
|
||
|
HWND hWnd = (HWND)g_wv.hWnd;
|
||
|
|
||
|
mDevices = new CImmDevices;
|
||
|
if ( mDevices && mDevices->CreateDevices( hInstance, hWnd ) )
|
||
|
{
|
||
|
for
|
||
|
( int i = 0
|
||
|
; i < mDevices->GetNumDevices()
|
||
|
; i++
|
||
|
){
|
||
|
FFSet *ffSet = NULL;
|
||
|
ffSet = new FFSet( config, mDevices->GetDevice( i ) );
|
||
|
if ( ffSet )
|
||
|
{
|
||
|
#ifdef FF_PRINT
|
||
|
char ProductName[ FF_MAX_PATH ];
|
||
|
*ProductName = 0;
|
||
|
mDevices->GetDevice( i )->GetProductName( ProductName, FF_MAX_PATH - 1 );
|
||
|
Com_Printf( "%d) %s\n", i, ProductName );
|
||
|
#endif
|
||
|
mSet.push_back( ffSet );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return qboolean( mSet.size() );
|
||
|
}
|
||
|
|
||
|
////------------------------------
|
||
|
/// FFMultiSet::GetRegisteredNames
|
||
|
//----------------------------------
|
||
|
//
|
||
|
//
|
||
|
qboolean FFMultiSet::GetRegisteredNames( TNameTable &NameTable )
|
||
|
{
|
||
|
for
|
||
|
( int i = 0
|
||
|
; i < mSet.size()
|
||
|
; i++
|
||
|
){
|
||
|
mSet[ i ]->GetRegisteredNames( NameTable );
|
||
|
}
|
||
|
|
||
|
return qtrue;
|
||
|
}
|
||
|
|
||
|
////-------------------
|
||
|
/// FFMultiSet::StopAll
|
||
|
//-----------------------
|
||
|
// Stops all effects in every FFSet.
|
||
|
// Returns qfalse if any return false.
|
||
|
//
|
||
|
qboolean FFMultiSet::StopAll()
|
||
|
{
|
||
|
qboolean result = qtrue;
|
||
|
|
||
|
for
|
||
|
( int i = 0
|
||
|
; i < mSet.size()
|
||
|
; i++
|
||
|
){
|
||
|
result &= mSet[ i ]->StopAll();
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
////-----------------
|
||
|
/// FFMultiSet::clear
|
||
|
//---------------------
|
||
|
// Cleans up.
|
||
|
//
|
||
|
void FFMultiSet::clear()
|
||
|
{
|
||
|
mConfig = NULL;
|
||
|
for
|
||
|
( int i = 0
|
||
|
; i < mSet.size()
|
||
|
; i++
|
||
|
){
|
||
|
DeletePointer( mSet[ i ] );
|
||
|
}
|
||
|
mSet.clear();
|
||
|
DeletePointer( mDevices );
|
||
|
}
|
||
|
|
||
|
#ifdef FF_CONSOLECOMMAND
|
||
|
|
||
|
void FFMultiSet::GetDisplayTokens( TNameTable &Tokens )
|
||
|
{
|
||
|
FFSet::GetDisplayTokens( Tokens );
|
||
|
}
|
||
|
|
||
|
////-------------------
|
||
|
/// FFMultiSet::Display
|
||
|
//-----------------------
|
||
|
//
|
||
|
//
|
||
|
void FFMultiSet::Display( TNameTable &Unprocessed, TNameTable &Processed )
|
||
|
{
|
||
|
for
|
||
|
( int i = 0
|
||
|
; i < mSet.size()
|
||
|
; i++
|
||
|
){
|
||
|
TNameTable Temp1, Temp2;
|
||
|
Temp1.clear();
|
||
|
Temp2.clear();
|
||
|
Temp1.insert( Temp1.begin(), Processed.begin(), Processed.end() );
|
||
|
mSet[ i ]->Display( Temp1, Temp2 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#endif // FF_CONSOLECOMMAND
|
||
|
|
||
|
#endif // _IMMERSION
|