Support entering of passworded rooms.

This commit is contained in:
Charles Lohr
2006-07-21 22:31:55 +00:00
parent 8921458276
commit 636dbcabcc
2 changed files with 52 additions and 10 deletions
+44 -7
View File
@@ -9,7 +9,6 @@
#include "ScreenTextEntry.h" #include "ScreenTextEntry.h"
#include "Command.h" #include "Command.h"
#include "WheelItemBase.h" #include "WheelItemBase.h"
//#include "RageLog.h"
#include "InputEventPlus.h" #include "InputEventPlus.h"
#include "LocalizedString.h" #include "LocalizedString.h"
@@ -27,7 +26,8 @@
AutoScreenMessage( SM_SMOnlinePack ) AutoScreenMessage( SM_SMOnlinePack )
AutoScreenMessage( SM_BackFromRoomName ) AutoScreenMessage( SM_BackFromRoomName )
AutoScreenMessage( SM_BackFromRoomDesc ) AutoScreenMessage( SM_BackFromRoomDesc )
AutoScreenMessage( SM_BackFromRoomPass ); AutoScreenMessage( SM_BackFromRoomPass )
AutoScreenMessage( SM_BackFromReqPass )
REGISTER_SCREEN_CLASS( ScreenNetRoom ); 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_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_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 ) void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM )
{ {
if( SM == SM_GoToPrevScreen ) if( SM == SM_GoToPrevScreen )
@@ -87,6 +88,18 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM )
{ {
SCREENMAN->SetNewScreen( THEME->GetMetric (m_sName, "NextScreen") ); 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 ) else if( SM == SM_SMOnlinePack )
{ {
switch(NSMAN->m_SMOnlinePacket.Read1()) switch(NSMAN->m_SMOnlinePacket.Read1())
@@ -122,6 +135,9 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM )
for (int i=0;i<numRooms;i++) for (int i=0;i<numRooms;i++)
m_Rooms[i].SetState(NSMAN->m_SMOnlinePacket.Read1()); m_Rooms[i].SetState(NSMAN->m_SMOnlinePacket.Read1());
for (int i=0;i<numRooms;i++)
m_Rooms[i].SetFlags(NSMAN->m_SMOnlinePacket.Read1());
if (m_iRoomPlace<0) if (m_iRoomPlace<0)
m_iRoomPlace=0; m_iRoomPlace=0;
if( m_iRoomPlace >= (int) m_Rooms.size() ) if( m_iRoomPlace >= (int) m_Rooms.size() )
@@ -189,13 +205,34 @@ void ScreenNetRoom::Update( float fDeltaTime )
void ScreenNetRoom::MenuStart( PlayerNumber pn ) void ScreenNetRoom::MenuStart( PlayerNumber pn )
{ {
m_RoomWheel.Select();
if (m_RoomWheel.LastSelected() != NULL)
{
//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.ClearPacket();
NSMAN->m_SMOnlinePacket.Write1( 1 ); NSMAN->m_SMOnlinePacket.Write1( 1 );
NSMAN->m_SMOnlinePacket.Write1( 1 ); //Type (enter a room) 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->m_SMOnlinePacket.WriteNT( m_RoomWheel.LastSelected()->m_sText );
NSMAN->SendSMOnline( ); NSMAN->SendSMOnline( );
}
}
ScreenNetSelectBase::MenuStart( pn ); ScreenNetSelectBase::MenuStart( pn );
} }
@@ -273,9 +310,6 @@ void ScreenNetRoom::UpdateRoomsList()
case 0: case 0:
itemData->m_color = THEME->GetMetricC( m_sName, "OpenRoomColor"); itemData->m_color = THEME->GetMetricC( m_sName, "OpenRoomColor");
break; break;
case 1:
itemData->m_color = THEME->GetMetricC( m_sName, "PasswdRoomColor");
break;
case 2: case 2:
itemData->m_color = THEME->GetMetricC( m_sName, "InGameRoomColor"); itemData->m_color = THEME->GetMetricC( m_sName, "InGameRoomColor");
break; break;
@@ -283,6 +317,9 @@ void ScreenNetRoom::UpdateRoomsList()
itemData->m_color = THEME->GetMetricC( m_sName, "OpenRoomColor"); itemData->m_color = THEME->GetMetricC( m_sName, "OpenRoomColor");
break; break;
} }
if ( m_Rooms[i].GetFlags() % 2 )
itemData->m_color = THEME->GetMetricC( m_sName, "PasswdRoomColor");
} }
m_RoomWheel.RebuildWheelItems(); m_RoomWheel.RebuildWheelItems();
+5
View File
@@ -13,13 +13,16 @@ public:
void SetName( const RString& name ) { m_name = name; } void SetName( const RString& name ) { m_name = name; }
void SetDescription( const RString& desc ) { m_description = desc; } void SetDescription( const RString& desc ) { m_description = desc; }
void SetState(unsigned int state) { m_state = state; } void SetState(unsigned int state) { m_state = state; }
void SetFlags( unsigned int iFlags ) { m_iFlags = iFlags; }
inline RString Name() { return m_name; } inline RString Name() { return m_name; }
inline RString Description() { return m_description; } inline RString Description() { return m_description; }
inline unsigned int State() { return m_state; } inline unsigned int State() { return m_state; }
inline unsigned int GetFlags() { return m_iFlags; }
private: private:
RString m_name; RString m_name;
RString m_description; RString m_description;
unsigned int m_state; unsigned int m_state;
unsigned int m_iFlags;
}; };
class ScreenNetRoom : public ScreenNetSelectBase class ScreenNetRoom : public ScreenNetSelectBase
@@ -53,6 +56,8 @@ private:
vector < RoomData > m_Rooms; vector < RoomData > m_Rooms;
int m_iRoomPlace; int m_iRoomPlace;
string m_sLastPickedRoom;
RString m_newRoomName, m_newRoomDesc, m_newRoomPass; RString m_newRoomName, m_newRoomDesc, m_newRoomPass;
RoomWheel m_RoomWheel; RoomWheel m_RoomWheel;