diff --git a/stepmania/src/NetworkSyncManager.cpp b/stepmania/src/NetworkSyncManager.cpp index d3e6a53794..f25b4e5c39 100644 --- a/stepmania/src/NetworkSyncManager.cpp +++ b/stepmania/src/NetworkSyncManager.cpp @@ -17,6 +17,7 @@ void NetworkSyncManager::StartRequest(short position) { } void NetworkSyncManager::DisplayStartupStatus() { } void NetworkSyncManager::Update( float fDeltaTime ) { } bool NetworkSyncManager::ChangedScoreboard(int Column) { return false; } +void NetworkSyncManager::SendChat( CString message ) { } #else #include "ezsockets.h" #include "ProfileManager.h" @@ -474,9 +475,14 @@ void NetworkSyncManager::ProcessInput() case 6: //System message from server { CString SysMSG = m_packet.ReadNT(); - SCREENMAN->SystemMessage(SysMSG); + SCREENMAN->SystemMessage( SysMSG ); } break; + case 7: //Chat message from server + { + m_WaitingChat = m_packet.ReadNT(); + SCREENMAN->SendMessageToTopScreen( SM_AddToChat ); + } } m_packet.ClearPacket(); } @@ -490,6 +496,14 @@ bool NetworkSyncManager::ChangedScoreboard(int Column) return true; } +void NetworkSyncManager::SendChat( CString message ) +{ + m_packet.ClearPacket(); + m_packet.Write1( 7 ); + m_packet.WriteNT( message ); + NetPlayerClient->SendPack((char*)&m_packet.Data, m_packet.Position); +} + uint8_t PacketFunctions::Read1() { diff --git a/stepmania/src/NetworkSyncManager.h b/stepmania/src/NetworkSyncManager.h index fdb9de97b3..f73d466fe6 100644 --- a/stepmania/src/NetworkSyncManager.h +++ b/stepmania/src/NetworkSyncManager.h @@ -70,6 +70,10 @@ public: //Used togeather for bool ChangedScoreboard(int Column); //If scoreboard changed since this function last called, then true. CString m_Scoreboard[NUM_NSSB_CATEGORIES]; + + //Used for chatting + void SendChat( CString message ); + CString m_WaitingChat; private: #if !defined(WITHOUT_NETWORKING) diff --git a/stepmania/src/ScreenNetSelectMusic.cpp b/stepmania/src/ScreenNetSelectMusic.cpp index 66d7306906..25e7c158f3 100644 --- a/stepmania/src/ScreenNetSelectMusic.cpp +++ b/stepmania/src/ScreenNetSelectMusic.cpp @@ -16,6 +16,7 @@ #include "RageTextureManager.h" #include "AnnouncerManager.h" #include "MenuTimer.h" +#include "NetworkSyncManager.h" #include "StepsUtil.h" #define CHATINPUT_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","ChatInputBoxWidth") @@ -24,6 +25,8 @@ #define CHATOUTPUT_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","ChatOutputBoxWidth") #define CHATOUTPUT_HEIGHT THEME->GetMetricF("ScreenNetSelectMusic","ChatOutputBoxHeight") #define CHATOUTPUT_COLOR THEME->GetMetricC("ScreenNetSelectMusic","ChatOutputBoxColor") +#define SHOW_CHAT_LINES THEME->GetMetricI("ScreenNetSelectMusic","ChatOutputLines") + #define GROUPSBG_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","GroupsBGWidth") #define GROUPSBG_HEIGHT THEME->GetMetricF("ScreenNetSelectMusic","GroupsBGHeight") @@ -33,6 +36,14 @@ #define SONGSBG_HEIGHT THEME->GetMetricF("ScreenNetSelectMusic","SongsBGHeight") #define SONGSBG_COLOR THEME->GetMetricC("ScreenNetSelectMusic","SongsBGColor") +#define DIFFBG_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","DiffBGWidth") +#define DIFFBG_HEIGHT THEME->GetMetricF("ScreenNetSelectMusic","DiffBGHeight") +#define DIFFBG_COLOR THEME->GetMetricC("ScreenNetSelectMusic","DiffBGColor") + +#define EXINFOBG_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","ExInfoBGWidth") +#define EXINFOBG_HEIGHT THEME->GetMetricF("ScreenNetSelectMusic","ExInfoBGHeight") +#define EXINFOBG_COLOR THEME->GetMetricC("ScreenNetSelectMusic","ExInfoBGColor") + #define NUM_GROUPS_SHOW THEME->GetMetricI("ScreenNetSelectMusic","NumGroupsShow"); #define NUM_SONGS_SHOW THEME->GetMetricI("ScreenNetSelectMusic","NumSongsShow"); @@ -43,7 +54,10 @@ #define SUBTITLE_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","SongsSubtitleWidth") #define ARTIST_WIDTH THEME->GetMetricF("ScreenNetSelectMusic","SongsArtistWidth") -const ScreenMessage SM_NoSongs = ScreenMessage(SM_User+3); +const ScreenMessage SM_NoSongs = ScreenMessage(SM_User+3); +const ScreenMessage SM_AddToChat = ScreenMessage(SM_User+4); +const ScreenMessage SM_ChangeSong = ScreenMessage(SM_User+5); + const CString AllGroups = "[ALL MUSIC]"; ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElements( sName ) @@ -80,7 +94,7 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElem m_textChatOutput.SetVertAlign( align_top ); m_textChatOutput.SetShadowLength( 0 ); m_textChatOutput.SetName( "ChatOutput" ); - m_textChatOutput.SetWrapWidthPixels( (int)(CHATOUTPUT_WIDTH * 2) ); + m_textChatOutput.SetMaxWidth( (int)(CHATOUTPUT_WIDTH * 2) ); SET_XY_AND_ON_COMMAND( m_textChatOutput ); this->AddChild( &m_textChatOutput ); @@ -115,13 +129,12 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElem SET_XY_AND_ON_COMMAND( m_textSongs ); this->AddChild( &m_textSongs); - m_SelectMode = SelectGroup; - m_rectSelection.SetDiffuse( SEL_COLOR ); - m_rectSelection.SetName( "Sel" ); - m_rectSelection.SetWidth( SEL_WIDTH ); - m_rectSelection.SetHeight( SEL_HEIGHT ); - SET_XY_AND_ON_COMMAND( m_rectSelection ); - this->AddChild( &m_rectSelection ); + m_rectExInfo.SetDiffuse( EXINFOBG_COLOR ); + m_rectExInfo.SetName( "ExInfoBG" ); + m_rectExInfo.SetWidth( EXINFOBG_WIDTH ); + m_rectExInfo.SetHeight( EXINFOBG_HEIGHT ); + SET_XY_AND_ON_COMMAND( m_rectExInfo ); + this->AddChild( &m_rectExInfo ); m_textArtist.LoadFromFont( THEME->GetPathF(m_sName,"chat") ); m_textArtist.SetShadowLength( 0 ); @@ -138,6 +151,15 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElem this->AddChild( &m_textSubtitle ); + //Diff Icon background + m_rectDiff.SetDiffuse( DIFFBG_COLOR ); + m_rectDiff.SetName( "DiffBG" ); + m_rectDiff.SetWidth( DIFFBG_WIDTH ); + m_rectDiff.SetHeight( DIFFBG_HEIGHT ); + SET_XY_AND_ON_COMMAND( m_rectDiff ); + this->AddChild( &m_rectDiff ); + + FOREACH_EnabledPlayer (p) { m_DifficultyIcon[p].SetName( ssprintf("DifficultyIconP%d",p+1) ); @@ -149,6 +171,15 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElem m_DifficultyIcon[p].SetFromDifficulty( p, m_DC[p] ); } + m_SelectMode = SelectGroup; + m_rectSelection.SetDiffuse( SEL_COLOR ); + m_rectSelection.SetName( "Sel" ); + m_rectSelection.SetWidth( SEL_WIDTH ); + m_rectSelection.SetHeight( SEL_HEIGHT ); + SET_XY_AND_ON_COMMAND( m_rectSelection ); + this->AddChild( &m_rectSelection ); + + SONGMAN->GetGroupNames( m_vGroups ); if (m_vGroups.size()<1) { @@ -175,6 +206,11 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElem m_iSongNum = i; UpdateSongsListPos(); + + //Load SFX next + m_soundChangeOpt.Load( THEME->GetPathToS("ScreenNetSelectMusic change opt")); + m_soundChangeSel.Load( THEME->GetPathToS("ScreenNetSelectMusic change sel")); + return; } @@ -193,7 +229,8 @@ void ScreenNetSelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy bool bHoldingCtrl = INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, SDLK_LCTRL)) || - INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, SDLK_RCTRL)); + INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, SDLK_RCTRL)) || + (!NSMAN->useSMserver); //If we are disconnected, assume no chatting switch( DeviceI.button ) { @@ -201,6 +238,7 @@ void ScreenNetSelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy case SDLK_KP_ENTER: if (!bHoldingCtrl) { + NSMAN->SendChat( m_sTextInput ); m_sTextInput=""; UpdateTextInput(); return; @@ -283,18 +321,33 @@ void ScreenNetSelectMusic::HandleScreenMessage( const ScreenMessage SM ) case SM_GoToNextScreen: SOUND->StopMusic(); SCREENMAN->SetNewScreen( "ScreenStage" ); + break; case SM_NoSongs: SCREENMAN->SetNewScreen( "ScreenTitleMenu" ); - break; + break; + case SM_AddToChat: + { + CString OutText = ""; + m_vChatText.push_back ( NSMAN->m_WaitingChat ); + NSMAN->m_WaitingChat = ""; + int i; + for ( i= max( (int) m_vChatText.size() - SHOW_CHAT_LINES, 0 ); + im_pCurSong = pSong; - SCREENMAN->SetNewScreen( "ScreenStage" ); + TweenOffScreen(); + StartTransitioning( SM_GoToNextScreen ); } void ScreenNetSelectMusic::MenuBack( PlayerNumber pn ) @@ -421,6 +478,9 @@ void ScreenNetSelectMusic::TweenOffScreen() OFF_COMMAND( m_textArtist ); OFF_COMMAND( m_textSubtitle ); + OFF_COMMAND( m_rectExInfo ); + OFF_COMMAND( m_rectDiff ); + FOREACH_EnabledPlayer (pn) OFF_COMMAND( m_DifficultyIcon[pn] ); } @@ -462,7 +522,7 @@ void ScreenNetSelectMusic::UpdateSongsListPos() m_textSubtitle.SetText( m_vSongs[j]->GetTranslitSubTitle() ); //Update the difficulty Icons - + //Handle difficulty FOREACH_EnabledPlayer (pn) { StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; @@ -483,6 +543,23 @@ void ScreenNetSelectMusic::UpdateSongsListPos() } m_DifficultyIcon[pn].SetFromDifficulty( pn, m_DC[pn] ); } + + + //Then handle sound (Copied from MusicBannerWheel) + SOUND->StopMusic(); + Song* pSong = m_vSongs[j]; + if( pSong && pSong->HasMusic() ) + { + if(SOUND->GetMusicPath().CompareNoCase(pSong->GetMusicPath())) // dont play the same sound over and over + { + + SOUND->StopMusic(); + SOUND->PlayMusic(pSong->GetMusicPath(), true, + pSong->m_fMusicSampleStartSeconds, + pSong->m_fMusicSampleLengthSeconds); + } + } + } void ScreenNetSelectMusic::UpdateGroupsListPos() diff --git a/stepmania/src/ScreenNetSelectMusic.h b/stepmania/src/ScreenNetSelectMusic.h index 8e69c29ce2..05445e8aa4 100644 --- a/stepmania/src/ScreenNetSelectMusic.h +++ b/stepmania/src/ScreenNetSelectMusic.h @@ -61,6 +61,7 @@ protected: Quad m_rectChatInputBox; Quad m_rectChatOutputBox; CString m_sTextInput; + vector m_vChatText; //Selection Quad m_rectSelection; @@ -75,12 +76,18 @@ protected: Quad m_rectSongsBackground; vector m_vSongs; + Quad m_rectExInfo; + Quad m_rectDiff; + BitmapText m_textArtist; BitmapText m_textSubtitle; //Difficulty Icon(s) DifficultyIcon m_DifficultyIcon[NUM_PLAYERS]; Difficulty m_DC[NUM_PLAYERS]; + + RageSound m_soundChangeOpt; + RageSound m_soundChangeSel; }; #endif