poll for memory cards in the editor screens even if MemoryCard=0

This commit is contained in:
Chris Danford
2006-03-12 07:02:50 +00:00
parent 15268245ff
commit 7d0ac62982
3 changed files with 57 additions and 10 deletions
+51 -6
View File
@@ -10,8 +10,9 @@
#include "MessageManager.h" #include "MessageManager.h"
#include "Foreach.h" #include "Foreach.h"
#include "RageUtil_WorkerThread.h" #include "RageUtil_WorkerThread.h"
#include "arch/arch.h" #include "arch/arch.h"
#include "arch/MemoryCard/MemoryCardDriver_Null.h"
#include "PrefsManager.h"
MemoryCardManager* MEMCARDMAN = NULL; // global and accessable from anywhere in our program MemoryCardManager* MEMCARDMAN = NULL; // global and accessable from anywhere in our program
@@ -66,7 +67,7 @@ static const RString MEM_CARD_MOUNT_POINT_INTERNAL[NUM_PLAYERS] =
class ThreadedMemoryCardWorker: public RageWorkerThread class ThreadedMemoryCardWorker: public RageWorkerThread
{ {
public: public:
ThreadedMemoryCardWorker(); ThreadedMemoryCardWorker( bool bInEditScreens );
~ThreadedMemoryCardWorker(); ~ThreadedMemoryCardWorker();
enum MountThreadState enum MountThreadState
@@ -131,11 +132,15 @@ bool ThreadedMemoryCardWorker::StorageDevicesChanged( vector<UsbStorageDevice> &
} }
ThreadedMemoryCardWorker::ThreadedMemoryCardWorker(): ThreadedMemoryCardWorker::ThreadedMemoryCardWorker( bool bInEditScreens ):
RageWorkerThread("MemoryCardWorker"), RageWorkerThread("MemoryCardWorker"),
UsbStorageDevicesMutex("UsbStorageDevicesMutex") UsbStorageDevicesMutex("UsbStorageDevicesMutex")
{ {
if( PREFSMAN->m_bMemoryCards || bInEditScreens )
m_pDriver = MakeMemoryCardDriver(); m_pDriver = MakeMemoryCardDriver();
else
m_pDriver = new MemoryCardDriver_Null;
m_MountThreadState = detect_and_mount; m_MountThreadState = detect_and_mount;
SetHeartbeat( 0.1f ); SetHeartbeat( 0.1f );
@@ -149,6 +154,8 @@ ThreadedMemoryCardWorker::~ThreadedMemoryCardWorker()
delete m_pDriver; delete m_pDriver;
} }
void ThreadedMemoryCardWorker::SetMountThreadState( MountThreadState mts ) void ThreadedMemoryCardWorker::SetMountThreadState( MountThreadState mts )
{ {
/* If "pause", stop calling updates in the heartbeat. In principle, we should /* If "pause", stop calling updates in the heartbeat. In principle, we should
@@ -249,7 +256,7 @@ MemoryCardManager::MemoryCardManager()
{ {
ASSERT( g_pWorker == NULL ); ASSERT( g_pWorker == NULL );
g_pWorker = new ThreadedMemoryCardWorker; g_pWorker = new ThreadedMemoryCardWorker( false );
m_bCardsLocked = false; m_bCardsLocked = false;
FOREACH_PlayerNumber( p ) FOREACH_PlayerNumber( p )
@@ -286,6 +293,12 @@ MemoryCardManager::~MemoryCardManager()
} }
} }
void MemoryCardManager::ResetMemoryCardDriver( bool bInEditScreens )
{
SAFE_DELETE(g_pWorker);
g_pWorker = new ThreadedMemoryCardWorker( bInEditScreens );
}
void MemoryCardManager::Update( float fDelta ) void MemoryCardManager::Update( float fDelta )
{ {
vector<UsbStorageDevice> vOld; vector<UsbStorageDevice> vOld;
@@ -669,8 +682,40 @@ bool IsAnyPlayerUsingMemoryCard()
return false; return false;
} }
#include "LuaFunctions.h"
LuaFunction_NoArgs( IsAnyPlayerUsingMemoryCard, IsAnyPlayerUsingMemoryCard() ) // lua start
#include "LuaBinding.h"
class LunaMemoryCardManager: public Luna<MemoryCardManager>
{
public:
LunaMemoryCardManager() { LUA->Register( Register ); }
static int IsAnyPlayerUsingMemoryCard( T* p, lua_State *L ) { lua_pushboolean(L, ::IsAnyPlayerUsingMemoryCard() ); return 1; }
static int ResetMemoryCardDriver( T* p, lua_State *L ) { p->ResetMemoryCardDriver( BArg(1) ); return 0; }
static void Register(lua_State *L)
{
ADD_METHOD( IsAnyPlayerUsingMemoryCard );
ADD_METHOD( ResetMemoryCardDriver );
Luna<T>::Register( L );
// Add global singleton if constructed already. If it's not constructed yet,
// then we'll register it later when we reinit Lua just before
// initializing the display.
if( MEMCARDMAN )
{
lua_pushstring(L, "MEMCARDMAN");
MEMCARDMAN->PushSelf( L );
lua_settable(L, LUA_GLOBALSINDEX);
}
}
};
LUA_REGISTER_CLASS( MemoryCardManager )
// lua end
/* /*
* (c) 2003-2005 Chris Danford, Glenn Maynard * (c) 2003-2005 Chris Danford, Glenn Maynard
+5
View File
@@ -16,6 +16,8 @@ public:
MemoryCardManager(); MemoryCardManager();
~MemoryCardManager(); ~MemoryCardManager();
void ResetMemoryCardDriver( bool bInEditScreens );
void Update( float fDelta ); void Update( float fDelta );
MemoryCardState GetCardState( PlayerNumber pn ) const { return m_State[pn]; } MemoryCardState GetCardState( PlayerNumber pn ) const { return m_State[pn]; }
@@ -49,6 +51,9 @@ public:
static Preference<RString> m_sEditorMemoryCardOsMountPoint; static Preference<RString> m_sEditorMemoryCardOsMountPoint;
// Lua
void PushSelf( lua_State *L );
protected: protected:
void CheckStateChanges(); void CheckStateChanges();
-3
View File
@@ -161,9 +161,6 @@ LowLevelWindow *MakeLowLevelWindow()
#include "MemoryCard/Selector_MemoryCardDriver.h" #include "MemoryCard/Selector_MemoryCardDriver.h"
MemoryCardDriver *MakeMemoryCardDriver() MemoryCardDriver *MakeMemoryCardDriver()
{ {
if( !PREFSMAN->m_bMemoryCards )
return new MemoryCardDriver_Null;
MemoryCardDriver *ret = NULL; MemoryCardDriver *ret = NULL;
#ifdef ARCH_MEMORY_CARD_DRIVER #ifdef ARCH_MEMORY_CARD_DRIVER