From ec3324f6e9ffc1494ccce49a31c0df81180eddfa Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 7 Nov 2003 20:14:29 +0000 Subject: [PATCH] fix coin/join logic --- stepmania/src/GameState.cpp | 7 +++++++ stepmania/src/GameState.h | 1 + stepmania/src/ModeChoice.cpp | 30 +++++++++++++++++++++-------- stepmania/src/ScreenSelect.cpp | 4 ++-- stepmania/src/ScreenSelectStyle.cpp | 2 +- stepmania/src/ScreenTitleMenu.cpp | 2 +- 6 files changed, 34 insertions(+), 12 deletions(-) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index ca91738f17..5dd1525042 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -1012,3 +1012,10 @@ void GameState::StoreRankingName( PlayerNumber pn, CString name ) *aFeats[i].pStringToFill = name; } } + +bool GameState::UsingPremiumAndPaying() +{ + return + (PREFSMAN->m_bVersusForOneCredit || PREFSMAN->m_bDoubleForOneCredit) && + PREFSMAN->m_iCoinMode == COIN_PAY; +} diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 271cb2c5cd..738975eb8d 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -66,6 +66,7 @@ public: iNumSidesJoined++; // left side, and right side return iNumSidesJoined; }; + bool UsingPremiumAndPaying(); GameDef* GetCurrentGameDef(); const StyleDef* GetCurrentStyleDef(); diff --git a/stepmania/src/ModeChoice.cpp b/stepmania/src/ModeChoice.cpp index 30b8290fca..22ca29c3c9 100644 --- a/stepmania/src/ModeChoice.cpp +++ b/stepmania/src/ModeChoice.cpp @@ -161,7 +161,7 @@ void ModeChoice::Load( int iIndex, CString sChoice ) } } -int GetCreditsToPlayStyle( Style style ) +int GetCreditsRequiredToPlayStyle( Style style ) { switch( GAMEMAN->GetStyleDefForStyle(style)->m_StyleType ) { @@ -177,6 +177,21 @@ int GetCreditsToPlayStyle( Style style ) } } +int GetSidesRequiredToPlayStyle( Style style ) +{ + switch( GAMEMAN->GetStyleDefForStyle(style)->m_StyleType ) + { + case StyleDef::ONE_PLAYER_ONE_CREDIT: + return 1; + case StyleDef::TWO_PLAYERS_TWO_CREDITS: + case StyleDef::ONE_PLAYER_TWO_CREDITS: + return 2; + default: + ASSERT(0); + return 1; + } +} + bool ModeChoice::IsPlayable( CString *why ) const { if( m_bInvalid ) @@ -184,19 +199,19 @@ bool ModeChoice::IsPlayable( CString *why ) const if ( m_style != STYLE_INVALID ) { - bool bUsingPremium = PREFSMAN->m_bVersusForOneCredit || PREFSMAN->m_bDoubleForOneCredit; int iNumCreditsInserted = GAMESTATE->m_iCoins/PREFSMAN->m_iCoinsPerCredit; - int iNumCreditsRequired = GetCreditsToPlayStyle(m_style); + int iNumCreditsRequired = GetCreditsRequiredToPlayStyle(m_style); int iNumSidesJoined = GAMESTATE->GetNumSidesJoined(); + int iNumSidesRequired = GetSidesRequiredToPlayStyle(m_style); - if( bUsingPremium ) + if( GAMESTATE->UsingPremiumAndPaying() ) { if( iNumCreditsInserted < iNumCreditsRequired ) return false; } else { - if( iNumCreditsRequired != iNumSidesJoined ) + if( iNumSidesRequired != iNumSidesJoined ) return false; } } @@ -281,10 +296,9 @@ void ModeChoice::Apply( PlayerNumber pn ) const } // If using a premium setting, subtract coins only after choosing a style. - bool bUsingPremium = PREFSMAN->m_bVersusForOneCredit || PREFSMAN->m_bDoubleForOneCredit; int iNumCoinsInserted = GAMESTATE->m_iCoins; - int iNumCoinsRequired = PREFSMAN->m_iCoinsPerCredit*GetCreditsToPlayStyle(m_style); - if( bUsingPremium ) + int iNumCoinsRequired = PREFSMAN->m_iCoinsPerCredit*GetCreditsRequiredToPlayStyle(m_style); + if( GAMESTATE->UsingPremiumAndPaying() ) { ASSERT( iNumCoinsInserted >= iNumCoinsRequired ); GAMESTATE->m_iCoins -= iNumCoinsRequired; diff --git a/stepmania/src/ScreenSelect.cpp b/stepmania/src/ScreenSelect.cpp index 43258dd9c9..0c1e5dc6f4 100644 --- a/stepmania/src/ScreenSelect.cpp +++ b/stepmania/src/ScreenSelect.cpp @@ -94,12 +94,12 @@ void ScreenSelect::Input( const DeviceInput& DeviceI, const InputEventType type, // LOG->Trace( "ScreenSelect::Input()" ); bool bUsingPremium = PREFSMAN->m_bVersusForOneCredit || PREFSMAN->m_bDoubleForOneCredit; - if( bUsingPremium ) + if( GAMESTATE->UsingPremiumAndPaying() ) { if( MenuI.IsValid() && MenuI.button==MENU_BUTTON_COIN && GAMESTATE->m_iCoins==PREFSMAN->m_iCoinsPerCredit*2 ) this->UpdateSelectableChoices(); } - else // !bUsingPremium + else { if( Screen::JoinInput(DeviceI, type, GameI, MenuI, StyleI) ) { diff --git a/stepmania/src/ScreenSelectStyle.cpp b/stepmania/src/ScreenSelectStyle.cpp index 238c589ebe..a5175d2dae 100644 --- a/stepmania/src/ScreenSelectStyle.cpp +++ b/stepmania/src/ScreenSelectStyle.cpp @@ -108,7 +108,7 @@ ScreenSelectStyle::ScreenSelectStyle( CString sClassName ) : ScreenSelect( sClas m_sprJointPremium.SetName( "JointPremium" ); - if( PREFSMAN->m_bVersusForOneCredit||PREFSMAN->m_bDoubleForOneCredit ) + if( GAMESTATE->UsingPremiumAndPaying() ) { m_sprJointPremium.Load( THEME->GetPathToG(m_sName + " joint premium") ); this->AddChild( &m_sprJointPremium ); diff --git a/stepmania/src/ScreenTitleMenu.cpp b/stepmania/src/ScreenTitleMenu.cpp index 5378f5357e..e8ac3250e5 100644 --- a/stepmania/src/ScreenTitleMenu.cpp +++ b/stepmania/src/ScreenTitleMenu.cpp @@ -71,7 +71,7 @@ ScreenTitleMenu::ScreenTitleMenu( CString sClassName ) : ScreenSelect( sClassNam CodeDetector::RefreshCacheItems(); - if( PREFSMAN->m_iCoinMode!=COIN_HOME && (PREFSMAN->m_bVersusForOneCredit||PREFSMAN->m_bDoubleForOneCredit) ) + if( GAMESTATE->UsingPremiumAndPaying() ) { m_JointPremium.LoadFromAniDir( THEME->GetPathToB("ScreenTitleMenu joint premium") ); this->AddChild( &m_JointPremium );