diff --git a/stepmania/src/arch/Lights/LightsDriver.cpp b/stepmania/src/arch/Lights/LightsDriver.cpp index 4217bf62fe..0d48c59cad 100644 --- a/stepmania/src/arch/Lights/LightsDriver.cpp +++ b/stepmania/src/arch/Lights/LightsDriver.cpp @@ -1,33 +1,33 @@ #include "global.h" #include "LightsDriver.h" #include "RageLog.h" +#include "Foreach.h" #include "arch/arch_default.h" -void LightsDriver::Create( const RString &driver, vector &Add ) +DriverList LightsDriver::m_pDriverList; + +void LightsDriver::Create( const RString &sDrivers, vector &Add ) { - LOG->Trace( "Initializing lights driver: %s", driver.c_str() ); + LOG->Trace( "Initializing lights drivers: %s", sDrivers.c_str() ); - LightsDriver *ret = NULL; + vector asDriversToTry; + split( sDrivers, ",", asDriversToTry, true ); + + FOREACH_CONST( RString, asDriversToTry, Driver ) + { + RageDriver *pRet = m_pDriverList.Create( *Driver ); + if( pRet == NULL ) + { + LOG->Trace( "Unknown lights driver: %s", Driver->c_str() ); + continue; + } -#ifdef USE_LIGHTS_DRIVER_LINUX_PARALLEL - if( !driver.CompareNoCase("LinuxParallel") ) ret = new LightsDriver_LinuxParallel; -#endif -#ifdef USE_LIGHTS_DRIVER_LINUX_WEEDTECH - if( !driver.CompareNoCase("WeedTech") ) ret = new LightsDriver_LinuxWeedTech; -#endif -#ifdef USE_LIGHTS_DRIVER_WIN32_PARALLEL - if( !driver.CompareNoCase("Parallel") ) ret = new LightsDriver_Win32Parallel; -#endif -#ifdef USE_LIGHTS_DRIVER_EXPORT - if( !driver.CompareNoCase("Export") ) ret = new LightsDriver_Export; -#endif + LightsDriver *pDriver = dynamic_cast( pRet ); + ASSERT( pDriver != NULL ); - if( ret == NULL && driver.CompareNoCase("Null") ) - LOG->Trace( "Unknown lights driver name: %s", driver.c_str() ); - else if( ret != NULL ) - Add.push_back( ret ); - - Add.push_back( new LightsDriver_SystemMessage ); + LOG->Info( "Lights driver: %s", Driver->c_str() ); + Add.push_back( pDriver ); + } } /* diff --git a/stepmania/src/arch/Lights/LightsDriver.h b/stepmania/src/arch/Lights/LightsDriver.h index 8d634b6cfe..a7ffd651f4 100644 --- a/stepmania/src/arch/Lights/LightsDriver.h +++ b/stepmania/src/arch/Lights/LightsDriver.h @@ -4,13 +4,15 @@ #define LightsDriver_H #include "LightsManager.h" +#include "arch/RageDriver.h" struct LightsState; -class LightsDriver +class LightsDriver: public RageDriver { public: static void Create( const RString &sDriver, vector &apAdd ); + static DriverList m_pDriverList; LightsDriver() {}; virtual ~LightsDriver() {}; @@ -18,6 +20,10 @@ public: virtual void Set( const LightsState *ls ) = 0; }; +#define REGISTER_SOUND_DRIVER_CLASS2( name, x ) \ + static RegisterRageDriver register_##x( &LightsDriver::m_pDriverList, #name, CreateClass ) +#define REGISTER_SOUND_DRIVER_CLASS( name ) REGISTER_SOUND_DRIVER_CLASS2( name, name ) + #endif /* diff --git a/stepmania/src/arch/Lights/LightsDriver_Export.cpp b/stepmania/src/arch/Lights/LightsDriver_Export.cpp index 51ea2dc69c..17e70356ee 100644 --- a/stepmania/src/arch/Lights/LightsDriver_Export.cpp +++ b/stepmania/src/arch/Lights/LightsDriver_Export.cpp @@ -1,6 +1,8 @@ #include "global.h" #include "LightsDriver_Export.h" +REGISTER_SOUND_DRIVER_CLASS(Export); + RageMutex LightsDriver_Export::m_Lock( "LightsDriver_Export"); LightsState LightsDriver_Export::m_State; diff --git a/stepmania/src/arch/Lights/LightsDriver_Export.h b/stepmania/src/arch/Lights/LightsDriver_Export.h index e7a44e30ca..49f0ed7668 100644 --- a/stepmania/src/arch/Lights/LightsDriver_Export.h +++ b/stepmania/src/arch/Lights/LightsDriver_Export.h @@ -19,7 +19,6 @@ private: static RageMutex m_Lock; static LightsState m_State; }; -#define USE_LIGHTS_DRIVER_EXPORT #endif diff --git a/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.cpp b/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.cpp index 44f7111479..ec0a27beff 100644 --- a/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.cpp +++ b/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.cpp @@ -15,6 +15,8 @@ static const int PORT_ADDRESS = 0x378; static const bool SCREEN_DEBUG = false; +REGISTER_SOUND_DRIVER_CLASS(LinuxParallel); + LightsDriver_LinuxParallel::LightsDriver_LinuxParallel() { // Give port's permissions and reset all bits to zero diff --git a/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.h b/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.h index 4aabedae97..06649497c6 100644 --- a/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.h +++ b/stepmania/src/arch/Lights/LightsDriver_LinuxParallel.h @@ -13,7 +13,6 @@ public: virtual ~LightsDriver_LinuxParallel(); virtual void Set( const LightsState *ls ); }; -#define USE_LIGHTS_DRIVER_LINUX_PARALLEL #endif diff --git a/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp b/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp index a773daee03..96760126e7 100644 --- a/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp +++ b/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.cpp @@ -9,6 +9,8 @@ #include "LightsDriver_LinuxWeedTech.h" #include "RageLog.h" +REGISTER_SOUND_DRIVER_CLASS(LinuxWeedTech); + // Begin serial driver // static int fd = -1; static LightsState CurLights; diff --git a/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.h b/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.h index 56680a529b..27f4b891a2 100644 --- a/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.h +++ b/stepmania/src/arch/Lights/LightsDriver_LinuxWeedTech.h @@ -16,7 +16,6 @@ public: virtual void Set( const LightsState *ls ); }; -#define USE_LIGHTS_DRIVER_LINUX_WEEDTECH #endif diff --git a/stepmania/src/arch/Lights/LightsDriver_Null.h b/stepmania/src/arch/Lights/LightsDriver_Null.h index 1ec39c9d57..bfa48caeba 100644 --- a/stepmania/src/arch/Lights/LightsDriver_Null.h +++ b/stepmania/src/arch/Lights/LightsDriver_Null.h @@ -11,7 +11,6 @@ public: void Set( const LightsState *ls ) {}; }; -#define USE_LIGHTS_DRIVER_NULL #endif diff --git a/stepmania/src/arch/Lights/LightsDriver_SystemMessage.cpp b/stepmania/src/arch/Lights/LightsDriver_SystemMessage.cpp index 59cfabee38..ad60f98556 100644 --- a/stepmania/src/arch/Lights/LightsDriver_SystemMessage.cpp +++ b/stepmania/src/arch/Lights/LightsDriver_SystemMessage.cpp @@ -4,6 +4,7 @@ #include "InputMapper.h" #include "PrefsManager.h" +REGISTER_SOUND_DRIVER_CLASS(SystemMessage); LightsDriver_SystemMessage::LightsDriver_SystemMessage() { diff --git a/stepmania/src/arch/Lights/LightsDriver_SystemMessage.h b/stepmania/src/arch/Lights/LightsDriver_SystemMessage.h index e401789e0c..bc2a807346 100644 --- a/stepmania/src/arch/Lights/LightsDriver_SystemMessage.h +++ b/stepmania/src/arch/Lights/LightsDriver_SystemMessage.h @@ -11,7 +11,6 @@ public: virtual void Set( const LightsState *ls ); }; -#define USE_LIGHTS_DRIVER_SYSTEM_MESSAGE #endif diff --git a/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.cpp b/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.cpp index a205630433..7114c12335 100644 --- a/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.cpp +++ b/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.cpp @@ -3,6 +3,7 @@ #include "windows.h" #include "RageUtil.h" +REGISTER_SOUND_DRIVER_CLASS(Win32Parallel); HINSTANCE hDLL = NULL; diff --git a/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.h b/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.h index cbad956d48..474ac5d8c0 100644 --- a/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.h +++ b/stepmania/src/arch/Lights/LightsDriver_Win32Parallel.h @@ -16,7 +16,6 @@ public: virtual void Set( const LightsState *ls ); }; -#define USE_LIGHTS_DRIVER_WIN32_PARALLEL #endif diff --git a/stepmania/src/arch/arch_default.h b/stepmania/src/arch/arch_default.h index 1a7d5822c0..fe406f472e 100644 --- a/stepmania/src/arch/arch_default.h +++ b/stepmania/src/arch/arch_default.h @@ -4,7 +4,6 @@ /* Define the default driver sets. */ #if defined(_WINDOWS) #include "ArchHooks/ArchHooks_Win32.h" -#include "Lights/LightsDriver_Win32Parallel.h" #include "LoadingWindow/LoadingWindow_Win32.h" #include "LowLevelWindow/LowLevelWindow_Win32.h" #include "MemoryCard/MemoryCardDriverThreaded_Windows.h" @@ -38,12 +37,7 @@ #include "LowLevelWindow/LowLevelWindow_X11.h" #if defined(LINUX) -#include "Lights/LightsDriver_LinuxWeedTech.h" #include "MemoryCard/MemoryCardDriverThreaded_Linux.h" - -#ifndef __PPC__ -#include "Lights/LightsDriver_LinuxParallel.h" -#endif #endif #if defined(HAVE_GTK) @@ -61,9 +55,6 @@ #endif /* All use these. */ -#include "Lights/LightsDriver_Export.h" -#include "Lights/LightsDriver_SystemMessage.h" -#include "Lights/LightsDriver_Null.h" #include "LoadingWindow/LoadingWindow_Null.h" #include "MemoryCard/MemoryCardDriver_Null.h"