From 636dbcabccad34d4fb96b08e9587b5347bff3153 Mon Sep 17 00:00:00 2001 From: Charles Lohr Date: Fri, 21 Jul 2006 22:31:55 +0000 Subject: [PATCH] Support entering of passworded rooms. --- stepmania/src/ScreenNetRoom.cpp | 57 +++++++++++++++++++++++++++------ stepmania/src/ScreenNetRoom.h | 5 +++ 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/stepmania/src/ScreenNetRoom.cpp b/stepmania/src/ScreenNetRoom.cpp index c43894ddbd..819760a07f 100644 --- a/stepmania/src/ScreenNetRoom.cpp +++ b/stepmania/src/ScreenNetRoom.cpp @@ -9,7 +9,6 @@ #include "ScreenTextEntry.h" #include "Command.h" #include "WheelItemBase.h" -//#include "RageLog.h" #include "InputEventPlus.h" #include "LocalizedString.h" @@ -27,7 +26,8 @@ AutoScreenMessage( SM_SMOnlinePack ) AutoScreenMessage( SM_BackFromRoomName ) AutoScreenMessage( SM_BackFromRoomDesc ) -AutoScreenMessage( SM_BackFromRoomPass ); +AutoScreenMessage( SM_BackFromRoomPass ) +AutoScreenMessage( SM_BackFromReqPass ) REGISTER_SCREEN_CLASS( ScreenNetRoom ); @@ -77,6 +77,7 @@ void ScreenNetRoom::Input( const InputEventPlus &input ) static LocalizedString ENTER_ROOM_DESCRIPTION ("ScreenNetRoom","Enter a description for the room:"); static LocalizedString ENTER_ROOM_PASSWORD ("ScreenNetRoom","Enter a password for the room (blank, no password):"); +static LocalizedString ENTER_ROOM_REQPASSWORD ("ScreenNetRoom","Enter Room's Password:"); void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) { if( SM == SM_GoToPrevScreen ) @@ -87,6 +88,18 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) { SCREENMAN->SetNewScreen( THEME->GetMetric (m_sName, "NextScreen") ); } + else if( SM == SM_BackFromReqPass ) + { + if ( !ScreenTextEntry::s_bCancelledLast ) + { + NSMAN->m_SMOnlinePacket.ClearPacket(); + NSMAN->m_SMOnlinePacket.Write1( 1 ); + NSMAN->m_SMOnlinePacket.Write1( 1 ); //Type (enter a room) + NSMAN->m_SMOnlinePacket.WriteNT( m_sLastPickedRoom ); + NSMAN->m_SMOnlinePacket.WriteNT( ScreenTextEntry::s_sLastAnswer ); + NSMAN->SendSMOnline( ); + } + } else if( SM == SM_SMOnlinePack ) { switch(NSMAN->m_SMOnlinePacket.Read1()) @@ -122,6 +135,9 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) for (int i=0;im_SMOnlinePacket.Read1()); + for (int i=0;im_SMOnlinePacket.Read1()); + if (m_iRoomPlace<0) m_iRoomPlace=0; if( m_iRoomPlace >= (int) m_Rooms.size() ) @@ -189,13 +205,34 @@ void ScreenNetRoom::Update( float fDeltaTime ) void ScreenNetRoom::MenuStart( PlayerNumber pn ) { - NSMAN->m_SMOnlinePacket.ClearPacket(); - NSMAN->m_SMOnlinePacket.Write1( 1 ); - NSMAN->m_SMOnlinePacket.Write1( 1 ); //Type (enter a room) m_RoomWheel.Select(); if (m_RoomWheel.LastSelected() != NULL) - NSMAN->m_SMOnlinePacket.WriteNT( m_RoomWheel.LastSelected()->m_sText ); - NSMAN->SendSMOnline( ); + { + //XXX: Big yuck, we should put the flags, and state position in RoomWheelData. That way + //we don't have to search for it. Realistically, this isn't going to slow us down, since at + //peak time SMOnline has never had more than 55 rooms in any one section. + + int iPlace; + for ( iPlace = 0; iPlace < m_Rooms.size(); iPlace++ ) + if ( m_Rooms[iPlace].Name() == m_RoomWheel.LastSelected()->m_sText ) + break; + if ( iPlace == m_Rooms.size() ) + return; + + if ( m_Rooms[iPlace].GetFlags() % 2 ) + { + m_sLastPickedRoom = m_RoomWheel.LastSelected()->m_sText; + ScreenTextEntry::TextEntry( SM_BackFromReqPass, ENTER_ROOM_REQPASSWORD, "", 255 ); + } + else + { + NSMAN->m_SMOnlinePacket.ClearPacket(); + NSMAN->m_SMOnlinePacket.Write1( 1 ); + NSMAN->m_SMOnlinePacket.Write1( 1 ); //Type (enter a room) + NSMAN->m_SMOnlinePacket.WriteNT( m_RoomWheel.LastSelected()->m_sText ); + NSMAN->SendSMOnline( ); + } + } ScreenNetSelectBase::MenuStart( pn ); } @@ -273,9 +310,6 @@ void ScreenNetRoom::UpdateRoomsList() case 0: itemData->m_color = THEME->GetMetricC( m_sName, "OpenRoomColor"); break; - case 1: - itemData->m_color = THEME->GetMetricC( m_sName, "PasswdRoomColor"); - break; case 2: itemData->m_color = THEME->GetMetricC( m_sName, "InGameRoomColor"); break; @@ -283,6 +317,9 @@ void ScreenNetRoom::UpdateRoomsList() itemData->m_color = THEME->GetMetricC( m_sName, "OpenRoomColor"); break; } + + if ( m_Rooms[i].GetFlags() % 2 ) + itemData->m_color = THEME->GetMetricC( m_sName, "PasswdRoomColor"); } m_RoomWheel.RebuildWheelItems(); diff --git a/stepmania/src/ScreenNetRoom.h b/stepmania/src/ScreenNetRoom.h index 4c80089863..65b973349c 100644 --- a/stepmania/src/ScreenNetRoom.h +++ b/stepmania/src/ScreenNetRoom.h @@ -13,13 +13,16 @@ public: void SetName( const RString& name ) { m_name = name; } void SetDescription( const RString& desc ) { m_description = desc; } void SetState(unsigned int state) { m_state = state; } + void SetFlags( unsigned int iFlags ) { m_iFlags = iFlags; } inline RString Name() { return m_name; } inline RString Description() { return m_description; } inline unsigned int State() { return m_state; } + inline unsigned int GetFlags() { return m_iFlags; } private: RString m_name; RString m_description; unsigned int m_state; + unsigned int m_iFlags; }; class ScreenNetRoom : public ScreenNetSelectBase @@ -53,6 +56,8 @@ private: vector < RoomData > m_Rooms; int m_iRoomPlace; + string m_sLastPickedRoom; + RString m_newRoomName, m_newRoomDesc, m_newRoomPass; RoomWheel m_RoomWheel;