jediacademy/code/ff/ff_MultiSet.cpp

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