From bead3edf0ed2fd3023608d670eaae2047ee95da6 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Fri, 21 Apr 2006 00:43:32 +0000 Subject: [PATCH] add multiplayer status --- stepmania/src/GameConstantsAndTypes.cpp | 9 +++++++++ stepmania/src/GameConstantsAndTypes.h | 12 ++++++++++++ stepmania/src/GameState.cpp | 17 ++++++++++++----- stepmania/src/GameState.h | 20 ++++++++++---------- 4 files changed, 43 insertions(+), 15 deletions(-) diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index 607a35887c..98d42d56ec 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -446,6 +446,15 @@ REGISTER_WITH_LUA_FUNCTION( LuaStage ); LuaXToString( Stage ); +static const char *MultiPlayerStatusNames[] = { + "Joined", + "NotJoined", + "Unplugged", + "MissingMultitap", +}; +XToString( MultiPlayerStatus, NUM_MultiPlayerStatus ); + + /* * (c) 2001-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index 6554e9d49f..5e25bf17b5 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -454,6 +454,18 @@ enum ProfileLoadResult }; +enum MultiPlayerStatus +{ + MultiPlayerStatus_Joined, + MultiPlayerStatus_NotJoined, + MultiPlayerStatus_Unplugged, + MultiPlayerStatus_MissingMultitap, + NUM_MultiPlayerStatus, + MultiPlayerStatus_INVALID +}; +const RString& MultiPlayerStatusToString( MultiPlayerStatus i ); + + #endif /* diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 62a56145a6..789c668fc4 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -171,7 +171,7 @@ void GameState::Reset() FOREACH_PlayerNumber( p ) m_bSideIsJoined[p] = false; FOREACH_MultiPlayer( p ) - m_bIsMultiPlayerJoined[p] = false; + m_MultiPlayerStatus[p] = MultiPlayerStatus_NotJoined; MEMCARDMAN->UnlockCards(); // m_iCoins = 0; // don't reset coin count! m_MasterPlayerNumber = PLAYER_INVALID; @@ -819,13 +819,13 @@ bool GameState::IsPlayerEnabled( PlayerNumber pn ) const bool GameState::IsMultiPlayerEnabled( MultiPlayer mp ) const { - return m_bIsMultiPlayerJoined[ mp ]; + return m_MultiPlayerStatus[ mp ] == MultiPlayerStatus_Joined; } bool GameState::IsPlayerEnabled( const PlayerState* pPlayerState ) const { if( pPlayerState->m_mp != MultiPlayer_INVALID ) - return m_bIsMultiPlayerJoined[ pPlayerState->m_mp ]; + return IsMultiPlayerEnabled( pPlayerState->m_mp ); if( pPlayerState->m_PlayerNumber != PLAYER_INVALID ) return IsPlayerEnabled( pPlayerState->m_PlayerNumber ); return false; @@ -1790,8 +1790,8 @@ public: DEFINE_METHOD( IsPlayerEnabled, IsPlayerEnabled((PlayerNumber)IArg(1)) ) DEFINE_METHOD( IsHumanPlayer, IsHumanPlayer((PlayerNumber)IArg(1)) ) - DEFINE_METHOD( GetPlayerDisplayName, GetPlayerDisplayName((PlayerNumber)IArg(1)) ) - DEFINE_METHOD( GetMasterPlayerNumber, m_MasterPlayerNumber ) + DEFINE_METHOD( GetPlayerDisplayName, GetPlayerDisplayName((PlayerNumber)IArg(1)) ) + DEFINE_METHOD( GetMasterPlayerNumber, m_MasterPlayerNumber ) DEFINE_METHOD( GetMultiplayer, m_bMultiplayer ) static int GetPlayerState( T* p, lua_State *L ) { @@ -1799,6 +1799,12 @@ public: p->m_pPlayerState[pn]->PushSelf(L); return 1; } + static int GetMultiPlayerState( T* p, lua_State *L ) + { + MultiPlayer mp = (MultiPlayer)IArg(1); + p->m_pMultiPlayerState[mp]->PushSelf(L); + return 1; + } static int ApplyGameCommand( T* p, lua_State *L ) { PlayerNumber pn = PLAYER_INVALID; @@ -1984,6 +1990,7 @@ public: ADD_METHOD( GetMasterPlayerNumber ); ADD_METHOD( GetMultiplayer ); ADD_METHOD( GetPlayerState ); + ADD_METHOD( GetMultiPlayerState ); ADD_METHOD( ApplyGameCommand ); ADD_METHOD( GetCurrentSong ); ADD_METHOD( SetCurrentSong ); diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 0077812224..1e9fd05671 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -55,12 +55,12 @@ public: void SetCurGame( const Game *pGame ); // Call this instead of m_pCurGame.Set to make sure PREFSMAN->m_sCurrentGame stays in sync BroadcastOnChangePtr m_pCurGame; BroadcastOnChangePtr m_pCurStyle; - bool m_bSideIsJoined[NUM_PLAYERS]; // left side, right side - bool m_bIsMultiPlayerJoined[NUM_MultiPlayer]; - BroadcastOnChange m_PlayMode; // many screens display different info depending on this value - int m_iCoins; // not "credits" - PlayerNumber m_MasterPlayerNumber; // used in Styles where one player controls both sides - bool m_bMultiplayer; + bool m_bSideIsJoined[NUM_PLAYERS]; // left side, right side + MultiPlayerStatus m_MultiPlayerStatus[NUM_MultiPlayer]; + BroadcastOnChange m_PlayMode; // many screens display different info depending on this value + int m_iCoins; // not "credits" + PlayerNumber m_MasterPlayerNumber; // used in Styles where one player controls both sides + bool m_bMultiplayer; bool DifficultiesLocked(); bool ChangePreferredDifficulty( PlayerNumber pn, Difficulty dc ); bool ChangePreferredDifficulty( PlayerNumber pn, int dir ); @@ -75,10 +75,10 @@ public: /* This is set to a random number per-game/round; it can be used for a random seed. */ int m_iGameSeed, m_iStageSeed; - bool PlayersCanJoin() const; // true if it's not too late for a player to join - int GetCoinsNeededToJoin() const; - bool EnoughCreditsToJoin() const { return GetCoinsNeededToJoin() <= 0; } - int GetNumSidesJoined() const; + bool PlayersCanJoin() const; // true if it's not too late for a player to join + int GetCoinsNeededToJoin() const; + bool EnoughCreditsToJoin() const { return GetCoinsNeededToJoin() <= 0; } + int GetNumSidesJoined() const; const Game* GetCurrentGame(); const Style* GetCurrentStyle() const;