From 02b9925b125d667f680ca03f6b46735af3ce7888 Mon Sep 17 00:00:00 2001 From: Ivana Kellyerova Date: Tue, 7 Jun 2022 19:35:30 +0200 Subject: [PATCH] Allow ScreenSelectProfile to Finish() with guest players Passing a -3 as profile index to ScreenSelectProfile's SetProfileIndex now allows a player to play without having a local or USB profile assigned. Also adds a message (PlayerProfileSet) that's broadcast anytime a player selects a profile or chooses to play as a guest and subscribes ScreenSelectMusic to it. --- Docs/Luadoc/LuaDocumentation.xml | 3 ++- src/MessageManager.cpp | 1 + src/MessageManager.h | 1 + src/MusicWheelItem.cpp | 4 +++- src/ScreenSelectMusic.cpp | 1 + src/ScreenSelectProfile.cpp | 13 +++++++++++-- 6 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Docs/Luadoc/LuaDocumentation.xml b/Docs/Luadoc/LuaDocumentation.xml index 09f9f501c3..28f00cb28a 100644 --- a/Docs/Luadoc/LuaDocumentation.xml +++ b/Docs/Luadoc/LuaDocumentation.xml @@ -5409,7 +5409,8 @@ Details of the event table: Sets the profile index of Player pn to iProfileIndex.
The following values of iProfileIndex have special, hardcoded behavior:
-1: join the player and play the theme's start sound effect
- • -2: unjoin the player, unlock their MemoryCard, and unmount their MemoryCard + • -2: unjoin the player, unlock their MemoryCard, and unmount their MemoryCard
+ • -3: allow the user to play without a local or USB profile (as a guest) diff --git a/src/MessageManager.cpp b/src/MessageManager.cpp index fe539b8474..1308c2a549 100644 --- a/src/MessageManager.cpp +++ b/src/MessageManager.cpp @@ -57,6 +57,7 @@ static const char *MessageIDNames[] = { "MenuSelectionChanged", "PlayerJoined", "PlayerUnjoined", + "PlayerProfileSet", "AutosyncChanged", "PreferredSongGroupChanged", "PreferredCourseGroupChanged", diff --git a/src/MessageManager.h b/src/MessageManager.h index e8d5e6fe18..851a0948a0 100644 --- a/src/MessageManager.h +++ b/src/MessageManager.h @@ -53,6 +53,7 @@ enum MessageID Message_MenuSelectionChanged, Message_PlayerJoined, Message_PlayerUnjoined, + Message_PlayerProfileSet, Message_AutosyncChanged, Message_PreferredSongGroupChanged, Message_PreferredCourseGroupChanged, diff --git a/src/MusicWheelItem.cpp b/src/MusicWheelItem.cpp index fa75be1568..24f531cc2b 100644 --- a/src/MusicWheelItem.cpp +++ b/src/MusicWheelItem.cpp @@ -118,6 +118,7 @@ MusicWheelItem::MusicWheelItem( RString sType ): this->SubscribeToMessage( Message_CurrentTrailP2Changed ); this->SubscribeToMessage( Message_PreferredDifficultyP1Changed ); this->SubscribeToMessage( Message_PreferredDifficultyP2Changed ); + this->SubscribeToMessage( Message_PlayerProfileSet ); } MusicWheelItem::MusicWheelItem( const MusicWheelItem &cpy ): @@ -382,7 +383,8 @@ void MusicWheelItem::HandleMessage( const Message &msg ) msg == Message_CurrentTrailP1Changed || msg == Message_CurrentTrailP2Changed || msg == Message_PreferredDifficultyP1Changed || - msg == Message_PreferredDifficultyP2Changed ) + msg == Message_PreferredDifficultyP2Changed || + msg == Message_PlayerProfileSet ) { const MusicWheelItemData *pWID = dynamic_cast( m_pData ); MusicWheelItemType type = MusicWheelItemType_Invalid; diff --git a/src/ScreenSelectMusic.cpp b/src/ScreenSelectMusic.cpp index 9d536aa4e5..e8816c349d 100644 --- a/src/ScreenSelectMusic.cpp +++ b/src/ScreenSelectMusic.cpp @@ -137,6 +137,7 @@ void ScreenSelectMusic::Init() ScreenWithMenuElements::Init(); this->SubscribeToMessage( Message_PlayerJoined ); + this->SubscribeToMessage( Message_PlayerProfileSet ); // Cache these values // Marking for change -- Midiman (why? -aj) diff --git a/src/ScreenSelectProfile.cpp b/src/ScreenSelectProfile.cpp index a21d6013e0..e5d2171658 100644 --- a/src/ScreenSelectProfile.cpp +++ b/src/ScreenSelectProfile.cpp @@ -128,7 +128,7 @@ bool ScreenSelectProfile::SetProfileIndex( PlayerNumber pn, int iProfileIndex ) return false; // wrong selection - if( iProfileIndex < -2 ) + if( iProfileIndex < -3 ) return false; // unload player @@ -160,7 +160,7 @@ bool ScreenSelectProfile::Finish(){ FOREACH_PlayerNumber( p ) { - // not all players has made their choices + // not all players have made their choices if( GAMESTATE->IsHumanPlayer( p ) && ( m_iSelectedProfiles[p] == -1 ) ) iUnselectedProfiles++; @@ -209,7 +209,16 @@ bool ScreenSelectProfile::Finish(){ MEMCARDMAN->LockCard( p ); } } + + // If the player picked a profile (>= 0) or chose to play as a guest (-3), + // broadcast a message + if( m_iSelectedProfiles[p] >= 0 || m_iSelectedProfiles[p] == -3 ) { + Message msg( MessageIDToString(Message_PlayerProfileSet) ); + msg.SetParam( "Player", p ); + MESSAGEMAN->Broadcast( msg ); + } } + StartTransitioningScreen( SM_GoToNextScreen ); return true; }