working on explicit profile load/saves: do this in a screen, not implicitly

as part of other operations
separate profile loads/locks for each player
This commit is contained in:
Glenn Maynard
2007-04-17 22:27:25 +00:00
parent 3e5206f810
commit a8a4803ed8
8 changed files with 361 additions and 51 deletions
+24 -18
View File
@@ -270,9 +270,9 @@ MemoryCardManager::MemoryCardManager()
g_pWorker = new ThreadedMemoryCardWorker;
m_bCardsLocked = false;
FOREACH_PlayerNumber( p )
{
m_bCardLocked[p] = false;
m_bMounted[p] = false;
m_State[p] = MemoryCardState_NoCard;
}
@@ -414,7 +414,7 @@ void MemoryCardManager::CheckStateChanges()
MemoryCardState state = MemoryCardState_Invalid;
RString sError;
if( m_bCardsLocked )
if( m_bCardLocked[p] )
{
if( m_FinalDevice[p].m_State == UsbStorageDevice::STATE_NONE )
{
@@ -500,11 +500,8 @@ void MemoryCardManager::CheckStateChanges()
SCREENMAN->RefreshCreditsMessages();
}
void MemoryCardManager::LockCards()
void MemoryCardManager::WaitForCheckingToComplete()
{
if( m_bCardsLocked )
return;
g_pWorker->SetTimeout( 5 );
/* If either player's card is in STATE_CHECKING, we need to give it a chance
@@ -538,27 +535,36 @@ void MemoryCardManager::LockCards()
}
g_pWorker->SetTimeout( -1 );
}
bool MemoryCardManager::CardInserted( PlayerNumber pn )
{
return m_Device[pn].m_State == UsbStorageDevice::STATE_CHECKING ||
m_Device[pn].m_State == UsbStorageDevice::STATE_READY;
}
void MemoryCardManager::LockCard( PlayerNumber pn )
{
if( m_bCardLocked[pn] )
return;
/* Set the final state. */
CheckStateChanges();
FOREACH_PlayerNumber( p )
{
/* If the card in this player's slot is ready, then use it. If there is
* no card ready when we finalize, clear m_FinalDevice. */
if( m_Device[p].m_State == UsbStorageDevice::STATE_READY )
m_FinalDevice[p] = m_Device[p];
else
m_FinalDevice[p] = UsbStorageDevice();
}
/* If the card in this player's slot is ready, then use it. If there is
* no card ready when we finalize, clear m_FinalDevice. */
if( m_Device[pn].m_State == UsbStorageDevice::STATE_READY )
m_FinalDevice[pn] = m_Device[pn];
else
m_FinalDevice[pn] = UsbStorageDevice();
/* Set this last, since it changes the behavior of CheckStateChanges. */
m_bCardsLocked = true;
m_bCardLocked[pn] = true;
}
void MemoryCardManager::UnlockCards()
void MemoryCardManager::UnlockCard( PlayerNumber pn )
{
m_bCardsLocked = false;
m_bCardLocked[pn] = false;
g_pWorker->SetMountThreadState( ThreadedMemoryCardWorker::detect_and_mount );