fix AutoJoin in free/home: join both players

This commit is contained in:
Glenn Maynard
2008-06-07 03:21:24 +00:00
parent bd5173fae8
commit d862ba776e
+22 -9
View File
@@ -392,35 +392,48 @@ void GameState::UnjoinPlayer( PlayerNumber pn )
} }
} }
/* Handle an input that can join a player. Return true if the player joined. */ namespace
bool GameState::JoinInput( PlayerNumber pn )
{ {
if( !PlayersCanJoin() ) bool JoinInputInternal( PlayerNumber pn )
{
if( !GAMESTATE->PlayersCanJoin() )
return false; return false;
/* If this side is already in, don't re-join. */ /* If this side is already in, don't re-join. */
if( m_bSideIsJoined[pn] ) if( GAMESTATE->m_bSideIsJoined[pn] )
return false; return false;
/* subtract coins */ /* subtract coins */
int iCoinsNeededToJoin = GetCoinsNeededToJoin(); int iCoinsNeededToJoin = GAMESTATE->GetCoinsNeededToJoin();
if( m_iCoins < iCoinsNeededToJoin ) if( GAMESTATE->m_iCoins < iCoinsNeededToJoin )
return false; // not enough coins return false; // not enough coins
m_iCoins -= iCoinsNeededToJoin; GAMESTATE->m_iCoins -= iCoinsNeededToJoin;
JoinPlayer( pn ); GAMESTATE->JoinPlayer( pn );
return true; return true;
}
};
/* Handle an input that can join a player. Return true if the player joined. */
bool GameState::JoinInput( PlayerNumber pn )
{
/* In free play when AutoJoin is enabled, join all players on a single start press. */
if( GAMESTATE->GetCoinMode() != CoinMode_Pay && GAMESTATE->m_bAutoJoin.Get() )
return JoinPlayers();
else
return JoinInputInternal( pn );
} }
/* Attempt to join all players, as if each player pressed Start. */
bool GameState::JoinPlayers() bool GameState::JoinPlayers()
{ {
bool bJoined = false; bool bJoined = false;
FOREACH_PlayerNumber( pn ) FOREACH_PlayerNumber( pn )
{ {
if( JoinInput(pn) ) if( JoinInputInternal(pn) )
bJoined = true; bJoined = true;
} }
return bJoined; return bJoined;