diff --git a/stepmania/src/RoomWheel.cpp b/stepmania/src/RoomWheel.cpp index 6cc9cf2961..e8a8b3120e 100644 --- a/stepmania/src/RoomWheel.cpp +++ b/stepmania/src/RoomWheel.cpp @@ -138,10 +138,10 @@ void RoomWheel::RemoveItem( int index ) RoomInfoDisplay::~RoomInfoDisplay() { - for (int i = 0; i < m_playersList.size(); i++) + for (int i = 0; i < m_playerList.size(); i++) { - this->RemoveChild(m_playersList[i]); - SAFE_DELETE(m_playersList[i]); + this->RemoveChild(m_playerList[i]); + SAFE_DELETE(m_playerList[i]); } } @@ -174,7 +174,6 @@ void RoomInfoDisplay::Load( CString sType ) PLAYERLISTOFFSETY.Load(sType, "PlayerListElementOffsetY"); m_state = LOCKED; - m_numPlayers = m_maxPlayers = 0; m_bg.SetName("Background"); m_bg.SetWidth( THEME->GetMetricF(sType,"BackgroundWidth") ); @@ -238,15 +237,10 @@ void RoomInfoDisplay::Load( CString sType ) void RoomInfoDisplay::SetRoom( const RoomWheelData* roomData ) { - m_state = CLOSED; - m_deployDelay.Touch(); + RequestRoomInfo(roomData->m_sText); m_Title.SetText(ssprintf("Name: %s", roomData->m_sText.c_str())); m_Desc.SetText(ssprintf("Description: %s", roomData->m_sDesc.c_str())); - m_songTitle.SetText(ssprintf("Title: %s", NULL)); - m_songSub.SetText(ssprintf("Subtitle: %s", NULL)); - m_songArtist.SetText(ssprintf("Artist: %s", NULL)); - m_players.SetText(ssprintf("Players (%d/%d):", m_numPlayers, m_maxPlayers)); } void RoomInfoDisplay::Update( float fDeltaTime ) @@ -259,55 +253,56 @@ void RoomInfoDisplay::Update( float fDeltaTime ) ActorFrame::Update(fDeltaTime); } -void RoomInfoDisplay::RequestRoomInfo() +void RoomInfoDisplay::RequestRoomInfo(const CString& name) { NSMAN->m_SMOnlinePacket.ClearPacket(); NSMAN->m_SMOnlinePacket.Write1((uint8_t)3); //Request Room Info - NSMAN->m_SMOnlinePacket.WriteNT(m_Title.GetText()); + NSMAN->m_SMOnlinePacket.WriteNT(name); NSMAN->SendSMOnline( ); } void RoomInfoDisplay::SetRoomInfo( const RoomInfo& info) { - m_songTitle.SetText(info.songTitle); - m_songSub.SetText(info.songSubTitle); - m_songArtist.SetText(info.songArtist); - m_numPlayers = info.numPlayers; - m_maxPlayers = info.maxPlayers; - vector players; + m_songTitle.SetText(ssprintf("Title: %s", info.songTitle.c_str())); + m_songSub.SetText(ssprintf("Subtitle: %s", info.songSubTitle.c_str())); + m_songArtist.SetText(ssprintf("Artist: %s", info.songArtist.c_str())); + m_players.SetText(ssprintf("Players (%d/%d):", info.numPlayers, info.maxPlayers)); - if (m_playersList.size() > info.players.size()) + if (m_playerList.size() > info.players.size()) { - for (int i = info.players.size(); i < m_playersList.size(); i++) + for (int i = info.players.size(); i < m_playerList.size(); i++) { //if our old list is larger remove some elements - this->RemoveChild(m_playersList[i]); - SAFE_DELETE(m_playersList[i]); + this->RemoveChild(m_playerList[i]); + SAFE_DELETE(m_playerList[i]); } - m_playersList.resize(info.players.size()); + m_playerList.resize(info.players.size()); } - else if (m_playersList.size() < info.players.size()) + else if (m_playerList.size() < info.players.size()) { //add elements if our old list is smaller - int oldsize = m_playersList.size(); - m_playersList.resize(info.players.size()); - for (int i = oldsize; i < m_playersList.size(); i++) + int oldsize = m_playerList.size(); + m_playerList.resize(info.players.size()); + for (int i = oldsize; i < m_playerList.size(); i++) { - m_playersList[i] = new BitmapText; - m_playersList[i]->LoadFromFont( THEME->GetPathF(GetName(),"text") ); - m_playersList[i]->SetName("PlayersListElement"); - m_playersList[i]->SetShadowLength( 0 ); - m_playersList[i]->SetHorizAlign( align_left ); - m_playersList[i]->SetX(PLAYERLISTX + (i * PLAYERLISTOFFSETX)); - m_playersList[i]->SetY(PLAYERLISTY + (i * PLAYERLISTOFFSETY)); - ON_COMMAND(m_playersList[i]); - this->AddChild(&m_players); + m_playerList[i] = new BitmapText; + m_playerList[i]->LoadFromFont( THEME->GetPathF(GetName(),"text") ); + m_playerList[i]->SetName("PlayerListElement"); + m_playerList[i]->SetShadowLength( 0 ); + m_playerList[i]->SetHorizAlign( align_left ); + m_playerList[i]->SetX(PLAYERLISTX + (i * PLAYERLISTOFFSETX)); + m_playerList[i]->SetY(PLAYERLISTY + (i * PLAYERLISTOFFSETY)); + ON_COMMAND(m_playerList[i]); + this->AddChild(m_playerList[i]); } } - for (int i = 0; i < m_playersList.size(); i++) - m_playersList[i]->SetText(info.players[i]); + for (int i = 0; i < m_playerList.size(); i++) + m_playerList[i]->SetText(info.players[i]); + + m_state = CLOSED; + m_deployDelay.Touch(); } /* diff --git a/stepmania/src/RoomWheel.h b/stepmania/src/RoomWheel.h index cf3208c698..6cb789736b 100644 --- a/stepmania/src/RoomWheel.h +++ b/stepmania/src/RoomWheel.h @@ -55,7 +55,7 @@ public: void DeployInfoBox(); void RetractInfoBox(); private: - void RequestRoomInfo(); + void RequestRoomInfo(const CString& name); enum RoomInfoDisplayState { OPEN = 0, @@ -73,10 +73,8 @@ private: BitmapText m_songSub; BitmapText m_songArtist; - int m_numPlayers; - int m_maxPlayers; BitmapText m_players; - vector m_playersList; + vector m_playerList; RageTimer m_deployDelay; @@ -103,6 +101,7 @@ public: inline RoomWheelData* GetItem(unsigned int i) { return (RoomWheelData*)WheelBase::GetItem(i + m_offset); } void AddPerminateItem(RoomWheelData* itemdata); int GetCurrentIndex() const { return m_iSelection; } + inline void SetRoomInfo( const RoomInfo& info) { m_roomInfo.SetRoomInfo(info); } private: int m_offset; diff --git a/stepmania/src/ScreenNetRoom.cpp b/stepmania/src/ScreenNetRoom.cpp index 2e2fe61db9..5b36e54ce1 100644 --- a/stepmania/src/ScreenNetRoom.cpp +++ b/stepmania/src/ScreenNetRoom.cpp @@ -87,8 +87,9 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) } else if( SM == SM_SMOnlinePack ) { - if ( NSMAN->m_SMOnlinePacket.Read1() == 1 ) + switch(NSMAN->m_SMOnlinePacket.Read1()) { + case 1: switch ( NSMAN->m_SMOnlinePacket.Read1() ) { case 0: //Room title Change @@ -126,6 +127,20 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) UpdateRoomsList(); } } + break; + case 3: + RoomInfo info; + info.songTitle = NSMAN->m_SMOnlinePacket.ReadNT(); + info.songSubTitle = NSMAN->m_SMOnlinePacket.ReadNT(); + info.songArtist = NSMAN->m_SMOnlinePacket.ReadNT(); + info.numPlayers = NSMAN->m_SMOnlinePacket.Read1(); + info.maxPlayers = NSMAN->m_SMOnlinePacket.Read1(); + info.players.resize(info.numPlayers); + for (int i = 0; i < info.numPlayers; i++) + info.players[i] = NSMAN->m_SMOnlinePacket.ReadNT(); + + m_RoomWheel.SetRoomInfo(info); + break; } } else if ( SM == SM_BackFromRoomName )