Changed GameState::UnjoinPlayer to actually follow its own comment and unjoin the player from STATSMAN first, instead of unjoining from PROFILEMAN, then STATSMAN, then PROFILEMAN again. Changed ProfileManager::UnloadProfile to skip unloading if the profile wasn't actually loaded in the first place.

This commit is contained in:
Kyzentun
2014-03-10 21:54:53 -06:00
parent a428e16cc8
commit 27dc958970
3 changed files with 24 additions and 7 deletions
+17 -6
View File
@@ -411,18 +411,29 @@ void GameState::JoinPlayer( PlayerNumber pn )
void GameState::UnjoinPlayer( PlayerNumber pn )
{
/* Unjoin STATSMAN first, so steps used by this player are released
* and can be released by PROFILEMAN. */
STATSMAN->UnjoinPlayer( pn );
m_bSideIsJoined[pn] = false;
m_iPlayerStageTokens[pn] = 0;
ResetPlayer( pn );
if( this->GetMasterPlayerNumber() == pn )
this->SetMasterPlayerNumber(GetFirstHumanPlayer());
/* Unjoin STATSMAN first, so steps used by this player are released
* and can be released by PROFILEMAN. */
STATSMAN->UnjoinPlayer( pn );
PROFILEMAN->UnloadProfile( pn );
{
// We can't use GetFirstHumanPlayer() because if both players were joined, GetFirstHumanPlayer() will always return PLAYER_1, even when PLAYER_1 is the player we're unjoining.
FOREACH_HumanPlayer( hp )
{
if( pn != hp )
{
this->SetMasterPlayerNumber(hp);
}
}
if( this->GetMasterPlayerNumber() == pn )
{
this->SetMasterPlayerNumber(PLAYER_INVALID);
}
}
Message msg( MessageIDToString(Message_PlayerUnjoined) );
msg.SetParam( "Player", pn );
+6
View File
@@ -349,6 +349,12 @@ bool ProfileManager::SaveLocalProfile( RString sProfileID )
void ProfileManager::UnloadProfile( PlayerNumber pn )
{
if( m_sProfileDir[pn].empty() )
{
// Don't bother unloading a profile that wasn't loaded in the first place.
// Saves us an expensive and pointless trip through all the songs.
return;
}
m_sProfileDir[pn] = "";
m_sProfileDirImportedFrom[pn] = "";
m_bWasLoadedFromMemoryCard[pn] = false;
+1 -1
View File
@@ -134,7 +134,7 @@ bool ScreenSelectProfile::SetProfileIndex( PlayerNumber pn, int iProfileIndex )
// unload player
if( iProfileIndex == -2 )
{
PROFILEMAN->UnloadProfile( pn );
// GAMESTATE->UnjoinPlayer takes care of unloading the profile.
GAMESTATE->UnjoinPlayer( pn );
MEMCARDMAN->UnlockCard( pn );
MEMCARDMAN->UnmountCard( pn );