From 16818e54c8809f00ba1ddce8e7d3a1b6082eb645 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 7 May 2005 08:34:20 +0000 Subject: [PATCH] broadcast on style change --- stepmania/src/GameCommand.cpp | 4 ++-- stepmania/src/GameState.cpp | 9 ++++++--- stepmania/src/GameState.h | 2 +- stepmania/src/MessageManager.cpp | 1 + stepmania/src/MessageManager.h | 3 ++- stepmania/src/ModeSwitcher.cpp | 2 +- stepmania/src/NetworkSyncManager.cpp | 2 +- stepmania/src/ScreenDemonstration.cpp | 2 +- stepmania/src/ScreenEditMenu.cpp | 2 +- stepmania/src/ScreenEnding.cpp | 2 +- stepmania/src/ScreenEvaluation.cpp | 2 +- stepmania/src/ScreenHowToPlay.cpp | 2 +- stepmania/src/ScreenNameEntryTraditional.cpp | 2 +- stepmania/src/ScreenSelect.cpp | 2 +- stepmania/src/ScreenSelectMusic.cpp | 2 +- 15 files changed, 22 insertions(+), 17 deletions(-) diff --git a/stepmania/src/GameCommand.cpp b/stepmania/src/GameCommand.cpp index e193eee3f5..6848a5ac32 100644 --- a/stepmania/src/GameCommand.cpp +++ b/stepmania/src/GameCommand.cpp @@ -86,7 +86,7 @@ bool GameCommand::DescribesCurrentMode( PlayerNumber pn ) const return false; if( m_pm != PLAY_MODE_INVALID && GAMESTATE->m_PlayMode != m_pm ) return false; - if( m_pStyle && GAMESTATE->m_pCurStyle != m_pStyle ) + if( m_pStyle && GAMESTATE->m_pCurStyle.Get() != m_pStyle ) return false; // HACK: don't compare m_dc if m_pSteps is set. This causes problems // in ScreenSelectOptionsMaster::ImportOptions if m_PreferredDifficulty @@ -679,7 +679,7 @@ void GameCommand::ApplySelf( const vector &vpns ) const if( m_pStyle != NULL ) { - GAMESTATE->m_pCurStyle = m_pStyle; + GAMESTATE->m_pCurStyle.Set( m_pStyle ); // It's possible to choose a style that didn't have enough // players joined. If enough players aren't joined, then diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 24d2a68b3d..55233d19ef 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -49,13 +49,14 @@ ThemeMetric USE_NAME_BLACKLIST("GameState","UseNameBlacklist"); GameState::GameState() : m_PreferredCourseDifficulty( MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P1_CHANGED ), m_PreferredDifficulty( MESSAGE_EDIT_PREFERRED_DIFFICULTY_P1_CHANGED ), + m_pCurStyle( MESSAGE_CURRENT_STYLE_CHANGED ), m_pCurSong( MESSAGE_CURRENT_SONG_CHANGED ), m_pCurSteps( MESSAGE_CURRENT_STEPS_P1_CHANGED ), m_stEdit( MESSAGE_EDIT_STEPS_TYPE_CHANGED ), m_pEditSourceSteps( MESSAGE_EDIT_SOURCE_STEPS_CHANGED ), m_stEditSource( MESSAGE_EDIT_SOURCE_STEPS_TYPE_CHANGED ) { - m_pCurStyle = NULL; + m_pCurStyle.Set( NULL ); m_pCurGame = NULL; m_iCoins = 0; @@ -137,7 +138,7 @@ void GameState::Reset() ASSERT( THEME ); m_timeGameStarted.SetZero(); - m_pCurStyle = NULL; + m_pCurStyle.Set( NULL ); FOREACH_PlayerNumber( p ) m_bSideIsJoined[p] = false; MEMCARDMAN->UnlockCards(); @@ -297,6 +298,8 @@ void GameState::PlayersFinalized() if( MEMCARDMAN->GetCardsLocked() ) return; + MESSAGEMAN->Broadcast( PLAYERS_FINALIZED ); + MEMCARDMAN->LockCards(); // apply saved default modifiers if any @@ -2007,7 +2010,7 @@ public: static int GetCoins( T* p, lua_State *L ) { lua_pushnumber(L, p->m_iCoins ); return 1; } static int IsSideJoined( T* p, lua_State *L ) { lua_pushboolean(L, p->m_bSideIsJoined[(PlayerNumber)IArg(1)] ); return 1; } static int GetCoinsNeededToJoin( T* p, lua_State *L ) { lua_pushnumber(L, p->GetCoinsNeededToJoin() ); return 1; } - static int PlayersCanJoin( T* p, lua_State *L ) { lua_pushnumber(L, p->PlayersCanJoin() ); return 1; } + static int PlayersCanJoin( T* p, lua_State *L ) { lua_pushboolean(L, p->PlayersCanJoin() ); return 1; } static void Register(lua_State *L) { diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 2e0a313c99..d4fb90c631 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -50,7 +50,7 @@ public: // Main state info // const Game* m_pCurGame; - const Style* m_pCurStyle; + BroadcastOnChangePtr m_pCurStyle; bool m_bSideIsJoined[NUM_PLAYERS]; // left side, right side PlayMode m_PlayMode; // many screens display different info depending on this value int m_iCoins; // not "credits" diff --git a/stepmania/src/MessageManager.cpp b/stepmania/src/MessageManager.cpp index f8c4f3d87f..f206da7396 100644 --- a/stepmania/src/MessageManager.cpp +++ b/stepmania/src/MessageManager.cpp @@ -9,6 +9,7 @@ MessageManager* MESSAGEMAN = NULL; // global and accessable from anywhere in our static const CString MessageNames[] = { + "CurrentStyleChanged", "CurrentSongChanged", "CurrentStepsP1Changed", "CurrentStepsP2Changed", diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index 51d634fdc7..9af3b3a475 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -16,6 +16,7 @@ struct lua_State; enum Message { + MESSAGE_CURRENT_STYLE_CHANGED, MESSAGE_CURRENT_SONG_CHANGED, MESSAGE_CURRENT_STEPS_P1_CHANGED, MESSAGE_CURRENT_STEPS_P2_CHANGED, @@ -116,7 +117,7 @@ private: public: BroadcastOnChangePtr( Message m ) { mSendWhenChanged = m; } const T* Get() const { return val; } - void Set( T* t ) { val = t; MESSAGEMAN->Broadcast( MessageToString(mSendWhenChanged) ); } + void Set( T* t ) { val = t; if(MESSAGEMAN) MESSAGEMAN->Broadcast( MessageToString(mSendWhenChanged) ); } operator T* () const { return val; } T* operator->() const { return val; } }; diff --git a/stepmania/src/ModeSwitcher.cpp b/stepmania/src/ModeSwitcher.cpp index 13866c2ee1..774383caf4 100644 --- a/stepmania/src/ModeSwitcher.cpp +++ b/stepmania/src/ModeSwitcher.cpp @@ -310,7 +310,7 @@ void ModeSwitcher::ChangeMode(PlayerNumber pn, int dir) wrap( index, vPossibleStyles.size() ); } - GAMESTATE->m_pCurStyle = vPossibleStyles[index]; + GAMESTATE->m_pCurStyle.Set( vPossibleStyles[index] ); } m_Stylename.SetText(GetStyleName()); m_Nextmode.SetText(GetNextStyleName()); diff --git a/stepmania/src/NetworkSyncManager.cpp b/stepmania/src/NetworkSyncManager.cpp index 533a4b8ae8..b3e3693281 100644 --- a/stepmania/src/NetworkSyncManager.cpp +++ b/stepmania/src/NetworkSyncManager.cpp @@ -678,7 +678,7 @@ void NetworkSyncManager::ProcessInput() StyleName = m_packet.ReadNT(); GAMESTATE->m_pCurGame = GAMEMAN->StringToGameType( GameName ); - GAMESTATE->m_pCurStyle = GAMEMAN->GameAndStringToStyle( GAMESTATE->m_pCurGame, StyleName ); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GameAndStringToStyle(GAMESTATE->m_pCurGame,StyleName) ); SCREENMAN->SetNewScreen( "ScreenNetSelectMusic" ); //Should this be metric'd out? } diff --git a/stepmania/src/ScreenDemonstration.cpp b/stepmania/src/ScreenDemonstration.cpp index 16781f3596..5c41274345 100644 --- a/stepmania/src/ScreenDemonstration.cpp +++ b/stepmania/src/ScreenDemonstration.cpp @@ -23,7 +23,7 @@ ScreenDemonstration::ScreenDemonstration( CString sName ) : ScreenJukebox( sName void ScreenDemonstration::Init() { - GAMESTATE->m_pCurStyle = GAMEMAN->GetDemonstrationStyleForGame(GAMESTATE->m_pCurGame); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GetDemonstrationStyleForGame(GAMESTATE->m_pCurGame) ); GAMESTATE->m_PlayMode = PLAY_MODE_REGULAR; diff --git a/stepmania/src/ScreenEditMenu.cpp b/stepmania/src/ScreenEditMenu.cpp index 71df95cc77..442dd64402 100644 --- a/stepmania/src/ScreenEditMenu.cpp +++ b/stepmania/src/ScreenEditMenu.cpp @@ -208,7 +208,7 @@ void ScreenEditMenu::MenuStart( PlayerNumber pn ) EditMenuAction action = m_Selector.GetSelectedAction(); GAMESTATE->m_pCurSong.Set( pSong ); - GAMESTATE->m_pCurStyle = GAMEMAN->GetEditorStyleForStepsType( st ); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GetEditorStyleForStepsType(st) ); GAMESTATE->m_pCurSteps[PLAYER_1].Set( pSteps ); // diff --git a/stepmania/src/ScreenEnding.cpp b/stepmania/src/ScreenEnding.cpp index 5e2173ab8f..f96a460e5c 100644 --- a/stepmania/src/ScreenEnding.cpp +++ b/stepmania/src/ScreenEnding.cpp @@ -141,7 +141,7 @@ ScreenEnding::ScreenEnding( CString sClassName ) : ScreenAttract( sClassName, fa PROFILEMAN->LoadFirstAvailableProfile(PLAYER_2); GAMESTATE->m_PlayMode = PLAY_MODE_REGULAR; - GAMESTATE->m_pCurStyle = GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(), "versus" ); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(),"versus") ); GAMESTATE->m_bSideIsJoined[PLAYER_1] = true; GAMESTATE->m_bSideIsJoined[PLAYER_2] = true; GAMESTATE->m_MasterPlayerNumber = PLAYER_1; diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 74ed538056..36952e95bc 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -102,7 +102,7 @@ ScreenEvaluation::ScreenEvaluation( CString sClassName ) : ScreenWithMenuElement PROFILEMAN->LoadFirstAvailableProfile(PLAYER_2); GAMESTATE->m_PlayMode = PLAY_MODE_REGULAR; - GAMESTATE->m_pCurStyle = GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(), "versus" ); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GameAndStringToStyle(GAMEMAN->GetDefaultGame(),"versus") ); STATSMAN->m_CurStageStats.playMode = GAMESTATE->m_PlayMode; STATSMAN->m_CurStageStats.pStyle = GAMESTATE->m_pCurStyle; STATSMAN->m_CurStageStats.StageType = StageStats::STAGE_NORMAL; diff --git a/stepmania/src/ScreenHowToPlay.cpp b/stepmania/src/ScreenHowToPlay.cpp index 2113838072..40f11f3130 100644 --- a/stepmania/src/ScreenHowToPlay.cpp +++ b/stepmania/src/ScreenHowToPlay.cpp @@ -127,7 +127,7 @@ void ScreenHowToPlay::Init() m_pLifeMeterBar->FillForHowToPlay( NUM_PERFECTS, NUM_MISSES ); } - GAMESTATE->m_pCurStyle = GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GetHowToPlayStyleForGame(GAMESTATE->m_pCurGame) ); if( USEPLAYER ) { diff --git a/stepmania/src/ScreenNameEntryTraditional.cpp b/stepmania/src/ScreenNameEntryTraditional.cpp index c3ee052a54..21fca7970d 100644 --- a/stepmania/src/ScreenNameEntryTraditional.cpp +++ b/stepmania/src/ScreenNameEntryTraditional.cpp @@ -146,7 +146,7 @@ ScreenNameEntryTraditional::ScreenNameEntryTraditional( CString sClassName ) : S GAMESTATE->m_bSideIsJoined[PLAYER_2] = true; GAMESTATE->m_MasterPlayerNumber = PLAYER_1; GAMESTATE->m_PlayMode = PLAY_MODE_REGULAR; - GAMESTATE->m_pCurStyle = GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(), "versus" ); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(),"versus") ); StageStats ss; for( int z = 0; z < 3; ++z ) { diff --git a/stepmania/src/ScreenSelect.cpp b/stepmania/src/ScreenSelect.cpp index 0e7289b0fd..fc5924a48d 100644 --- a/stepmania/src/ScreenSelect.cpp +++ b/stepmania/src/ScreenSelect.cpp @@ -191,7 +191,7 @@ void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) { const int sel = GetSelectionIndex( p ); if( m_aGameCommands[sel].m_pStyle ) - GAMESTATE->m_pCurStyle = m_aGameCommands[sel].m_pStyle; + GAMESTATE->m_pCurStyle.Set( m_aGameCommands[sel].m_pStyle ); } SCREENMAN->RefreshCreditsMessages(); } diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index 0b8b6e5050..dd813a580f 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -80,7 +80,7 @@ ScreenSelectMusic::ScreenSelectMusic( CString sClassName ) : ScreenWithMenuEleme if( PREFSMAN->m_bScreenTestMode ) { GAMESTATE->m_PlayMode = PLAY_MODE_REGULAR; - GAMESTATE->m_pCurStyle = GAMEMAN->GameAndStringToStyle( GAMEMAN->GetDefaultGame(), "versus" ); + GAMESTATE->m_pCurStyle.Set( GAMEMAN->GameAndStringToStyle(GAMEMAN->GetDefaultGame(),"versus") ); GAMESTATE->m_bSideIsJoined[PLAYER_1] = true; GAMESTATE->m_MasterPlayerNumber = PLAYER_1; }