jediacademy/code/ff/ff_system.cpp
2013-04-04 17:35:38 -05:00

151 lines
3.3 KiB
C++

#include "common_headers.h"
#ifdef _IMMERSION
//#include "ff.h"
//#include "ff_ffset.h"
//#include "ff_compound.h"
//#include "ff_system.h"
extern cvar_t *ff_developer;
////--------------
/// FFSystem::Init
//------------------
//
//
qboolean FFSystem::Init( const char *channels )
{
// kludgy restart mechanism
typedef struct
{ TNameTable name;
vector<int> channel;
} TRestartInfo;
TRestartInfo restart;
if ( mInitialized )
{
restart.name.resize( mHandle.size(), "" );
restart.channel.resize( mHandle.size(), FF_CHANNEL_MAX );
mChannel.GetRegisteredNames( restart.name );
mHandle.GetFailedNames( restart.name );
mHandle.GetChannels( restart.channel );
Shutdown();
}
mHandle.Init();
if ( mConfig.Init( "fffx/fffx.cfg" ) // Process config file
&& mChannel.Init( mConfig, channels ) ) // Init devices
{
if ( restart.name.size() > 1 )
{
for
( int i = 1
; i < restart.name.size()
; i++
){ // ignore leading device-specific set name -- (may be switching devices)
Register( mConfig.RightOfSet( restart.name[ i ].c_str() ), restart.channel[ i ] );
}
}
else
ffShake = Register( "fffx/player/shake", FF_CHANNEL_BODY );
mInitialized = qtrue;
}
return mInitialized;
}
#ifdef FF_CONSOLECOMMAND
void FFSystem::GetDisplayTokens( TNameTable &Tokens )
{
FFChannelSet::GetDisplayTokens( Tokens );
if ( ff_developer->integer )
{
Tokens.push_back( "effects" );
}
}
void FFSystem::Display( TNameTable &Unprocessed, TNameTable &Processed )
{
for
( TNameTable::iterator itName = Unprocessed.begin()
; itName != Unprocessed.end()
;
){
if ( stricmp( "effects", (*itName).c_str() ) == 0 )
{
if ( ff_developer->integer )
{
Com_Printf( "[registered effects]\n" );
TNameTable EffectNames;
int total = 0;
Channel::Set &ffSet = mChannel.GetSets();
for
( int i = 0
; i < ffSet.size()
; i++
){
char ProductName[ FF_MAX_PATH ];
*ProductName = 0;
ffSet[ i ]->GetDevice()->GetProductName( ProductName, FF_MAX_PATH - 1 );
Com_Printf( "%s...\n", ProductName );
EffectNames.clear();
EffectNames.resize( mHandle.size(), "" );
ffSet[ i ]->GetRegisteredNames( EffectNames );
for
( int j = 1
; j < EffectNames.size()
; j++
){
if ( EffectNames[ j ].length() )
Com_Printf( "%3d) \"%s\" channel=%d\n", total++, EffectNames[ j ].c_str(), mHandle[ j ].GetChannel() );
}
}
EffectNames.clear();
EffectNames.resize( mHandle.size(), "" );
if ( mHandle.GetFailedNames( EffectNames ) )
{
Com_Printf( "Failed Registrants...\n" );
for
( int j = 1
; j < EffectNames.size()
; j++
){
if ( EffectNames[ j ].length() )
Com_Printf( "%3d) \"%s\" channel=%d\n", total++, EffectNames[ j ].c_str(), mHandle[ j ].GetChannel() );
}
}
}
//else
//{
// Com_Printf( "\"effects\" only available when ff_developer is set\n" );
//}
Processed.push_back( *itName );
itName = Unprocessed.erase( itName );
}
else
{
itName++;
}
}
mChannel.Display( Unprocessed, Processed );
}
#endif // FF_CONSOLECOMMAND
#endif // _IMMERSION