From 26ce27d2f28ca48981c93dee1275a6e82cb803b2 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Wed, 2 Feb 2005 06:12:24 +0000 Subject: [PATCH] fix "assert if SHARED_PREVIEW_AND_CURSOR and player joins during fade out" fix commands of shared elements being played once per player --- stepmania/src/ScreenSelectMaster.cpp | 47 ++++++++++++++++++---------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/stepmania/src/ScreenSelectMaster.cpp b/stepmania/src/ScreenSelectMaster.cpp index f817f037be..d007ba09d0 100644 --- a/stepmania/src/ScreenSelectMaster.cpp +++ b/stepmania/src/ScreenSelectMaster.cpp @@ -568,20 +568,32 @@ float ScreenSelectMaster::DoMenuStart( PlayerNumber pn ) { if( m_bChosen[pn] ) return 0; + + bool bAnyChosen = false; + FOREACH_PlayerNumber( p ) + bAnyChosen |= m_bChosen[p]; + m_bChosen[pn] = true; + bool bIsFirstToChoose = bAnyChosen; + float fSecs = 0; - for( int page=0; pageGetTweenTimeLeft() ); - } + for( int page=0; pageGetTweenTimeLeft() ); + } - for( int i=0; iGetTweenTimeLeft() ); + int iIndex = SHARED_PREVIEW_AND_CURSOR ? 0 : pn; + + for( int i=0; iGetTweenTimeLeft() ); + } } return fSecs; @@ -589,6 +601,13 @@ float ScreenSelectMaster::DoMenuStart( PlayerNumber pn ) void ScreenSelectMaster::MenuStart( PlayerNumber pn ) { + // If the player isn't already joined, try to join them. + // Allow a player to join even if input is locked or someone has already already chosen. + MenuInput MenuI; + MenuI.player = pn; + MenuI.button = MENU_BUTTON_START; + Screen::JoinInput( MenuI ); + if( m_fLockInputSecs > 0 ) return; if( m_bChosen[pn] ) @@ -607,21 +626,15 @@ void ScreenSelectMaster::MenuStart( PlayerNumber pn ) return; } - // If the player isn't already joined, join them. - MenuInput MenuI; - MenuI.player = pn; - MenuI.button = MENU_BUTTON_START; - Screen::JoinInput( MenuI ); - - float fSecs = 0; bool bAllDone = true; if( (bool)SHARED_PREVIEW_AND_CURSOR || GetCurrentPage() == PAGE_2 ) { /* Only one player has to pick. Choose this for all the other players, too. */ - FOREACH_HumanPlayer( p ) + FOREACH_PlayerNumber( p ) { - fSecs = max( fSecs, DoMenuStart(p) ); + ASSERT( !m_bChosen[p] ); + fSecs = max( fSecs, DoMenuStart(p) ); // no harm in calling this for an unjoined player } } else