From c072b260f6443979eaff7aaf35b2ce091b8e889d Mon Sep 17 00:00:00 2001 From: Josh Allen Date: Fri, 3 Dec 2004 01:10:09 +0000 Subject: [PATCH] Add: Ability to tell server to create a room Transitioning from quads to sprites --- stepmania/src/ScreenNetRoom.cpp | 149 +++++++++++++++++++++++--------- stepmania/src/ScreenNetRoom.h | 19 +++- 2 files changed, 127 insertions(+), 41 deletions(-) diff --git a/stepmania/src/ScreenNetRoom.cpp b/stepmania/src/ScreenNetRoom.cpp index 3056b424d5..bb4ea43bd5 100644 --- a/stepmania/src/ScreenNetRoom.cpp +++ b/stepmania/src/ScreenNetRoom.cpp @@ -6,14 +6,21 @@ #include "NetworkSyncManager.h" #include "GameState.h" #include "ThemeManager.h" +#include "ScreenTextEntry.h" +#include "ScreenManager.h" +#include "VirtualKeyboard.h" #define TITLEBG_WIDTH THEME->GetMetricF(m_sName,"TitleBGWidth") #define ROOMSBG_WIDTH THEME->GetMetricF(m_sName,"RoomsBGWidth") +#define ROOMSBG_HEIGHT THEME->GetMetricF(m_sName,"RoomsBGHeight") +#define SELECTION_WIDTH THEME->GetMetricF(m_sName,"SelectionWidth") +#define SELECTION_HEIGHT THEME->GetMetricF(m_sName,"SelectionHeight") #define NUM_ROOMS_SHOW THEME->GetMetricI(m_sName,"NumRoomsShow"); const ScreenMessage SM_SMOnlinePack = ScreenMessage(SM_User+8); //Unused, but should be known - +const ScreenMessage SM_BackFromRoomName = ScreenMessage(SM_User+15); +const ScreenMessage SM_BackFromRoomDesc = ScreenMessage(SM_User+16); REGISTER_SCREEN_CLASS( ScreenNetRoom ); ScreenNetRoom::ScreenNetRoom( const CString& sName ) : ScreenNetSelectBase( sName ) @@ -34,9 +41,12 @@ ScreenNetRoom::ScreenNetRoom( const CString& sName ) : ScreenNetSelectBase( sNam SET_XY_AND_ON_COMMAND( m_textTitle ); this->AddChild( &m_textTitle); - m_rectRoomsBG.SetName( "RoomsBG" ); - SET_QUAD_INIT( m_rectRoomsBG ); - this->AddChild( &m_rectRoomsBG); + m_sprRoomsBG.Load( THEME->GetPathG(m_sName,"List") ); + m_sprRoomsBG.SetName( "RoomsBG" ); + m_sprRoomsBG.SetWidth( ROOMSBG_WIDTH ); + m_sprRoomsBG.SetHeight( ROOMSBG_HEIGHT ); + SET_XY_AND_ON_COMMAND( m_sprRoomsBG ); + this->AddChild( &m_sprRoomsBG); m_textRooms.LoadFromFont( THEME->GetPathF(m_sName,"wheel") ); m_textRooms.SetShadowLength( 0 ); @@ -45,17 +55,20 @@ ScreenNetRoom::ScreenNetRoom( const CString& sName ) : ScreenNetSelectBase( sNam SET_XY_AND_ON_COMMAND( m_textRooms ); this->AddChild( &m_textRooms ); - m_rectRoomsSel.SetName( "Sel" ); - SET_QUAD_INIT( m_rectRoomsSel ); - this->AddChild( &m_rectRoomsSel ); - + //SelectionSprite + m_sprSelection.Load( THEME->GetPathG( m_sName, "Selection" ) ); + m_sprSelection.SetName( "Selection" ); + m_sprSelection.SetWidth( SELECTION_WIDTH ); + m_sprSelection.SetHeight( SELECTION_HEIGHT ); + SET_XY_AND_ON_COMMAND( m_sprSelection ); + this->AddChild( &m_sprSelection ); + //CreateRoom Sprite m_sprCreateRoom.Load( THEME->GetPathG( m_sName, "CreateRoom" ) ); m_sprCreateRoom.SetName( "CreateRoom" ); SET_XY_AND_ON_COMMAND( m_sprCreateRoom ); this->AddChild( &m_sprCreateRoom ); - NSMAN->ReportNSSOnOff(7); return; } @@ -69,7 +82,6 @@ void ScreenNetRoom::Input( const DeviceInput& DeviceI, const InputEventType type void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) { - CString titleSub; switch( SM ) { case SM_GoToPrevScreen: @@ -83,14 +95,17 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) switch ( NSMAN->m_SMOnlinePacket.Read1() ) { case 0: //Room title Change - titleSub = NSMAN->m_SMOnlinePacket.ReadNT() + "\n"; - titleSub += NSMAN->m_SMOnlinePacket.ReadNT(); - m_textTitle.SetText( titleSub ); - if ( NSMAN->m_SMOnlinePacket.Read1() != 0 ) { - CString SMOnlineSelectScreen; - THEME->GetMetric( m_sName, "MusicSelectScreen", SMOnlineSelectScreen ); - SCREENMAN->SetNewScreen( SMOnlineSelectScreen ); + CString titleSub; + titleSub = NSMAN->m_SMOnlinePacket.ReadNT() + "\n"; + titleSub += NSMAN->m_SMOnlinePacket.ReadNT(); + m_textTitle.SetText( titleSub ); + if ( NSMAN->m_SMOnlinePacket.Read1() != 0 ) + { + CString SMOnlineSelectScreen; + THEME->GetMetric( m_sName, "MusicSelectScreen", SMOnlineSelectScreen ); + SCREENMAN->SetNewScreen( SMOnlineSelectScreen ); + } } case 1: //Rooms list change { @@ -109,6 +124,19 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) } } break; + case SM_BackFromRoomName: + if ( !ScreenTextEntry::s_bCancelledLast ) { + m_newRoomName = ScreenTextEntry::s_sLastAnswer; + VIRTUALKB.Reset(VKMODE_PROFILE); // allow all characters + SCREENMAN->TextEntry( SM_BackFromRoomDesc, "Enter Room Description:", ""); + } + break; + case SM_BackFromRoomDesc: + if ( !ScreenTextEntry::s_bCancelledLast ) { + m_newRoomDesc = ScreenTextEntry::s_sLastAnswer; + CreateNewRoom( m_newRoomName, m_newRoomDesc); + } + break; } ScreenNetSelectBase::HandleScreenMessage( SM ); } @@ -117,9 +145,9 @@ void ScreenNetRoom::TweenOffScreen() { OFF_COMMAND( m_textTitle ); OFF_COMMAND( m_rectTitleBG ); - OFF_COMMAND( m_rectRoomsBG ); + OFF_COMMAND( m_sprRoomsBG ); OFF_COMMAND( m_textRooms ); - OFF_COMMAND( m_rectRoomsSel ); + OFF_COMMAND( m_sprSelection ); NSMAN->ReportNSSOnOff(6); } @@ -131,12 +159,20 @@ 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) - NSMAN->m_SMOnlinePacket.WriteNT( m_Rooms[m_iRoomPlace] ); - NSMAN->SendSMOnline( ); - ScreenNetSelectBase::MenuStart( pn ); + switch (m_SelectMode) { + case SelectRooms: + NSMAN->m_SMOnlinePacket.ClearPacket(); + NSMAN->m_SMOnlinePacket.Write1( 1 ); + NSMAN->m_SMOnlinePacket.Write1( 1 ); //Type (enter a room) + NSMAN->m_SMOnlinePacket.WriteNT( m_Rooms[m_iRoomPlace] ); + NSMAN->SendSMOnline( ); + ScreenNetSelectBase::MenuStart( pn ); + break; + case SelectMakeRoom: + VIRTUALKB.Reset(VKMODE_PROFILE); // allow all characters + SCREENMAN->TextEntry( SM_BackFromRoomName, "Enter Room Name:", ""); + break; + }; } void ScreenNetRoom::MenuBack( PlayerNumber pn ) @@ -150,24 +186,50 @@ void ScreenNetRoom::MenuBack( PlayerNumber pn ) void ScreenNetRoom::MenuUp( PlayerNumber pn, const InputEventType type ) { - m_iRoomPlace--; - if (m_iRoomPlace<0) - m_iRoomPlace=0; - if( m_iRoomPlace >= (int) m_Rooms.size() ) - m_iRoomPlace=m_Rooms.size()-1; - UpdateRoomsList(); - ScreenNetSelectBase::MenuUp( pn ); + switch (m_SelectMode) { + case SelectRooms: + m_iRoomPlace--; + if (m_iRoomPlace<0) + m_iRoomPlace=0; + if( m_iRoomPlace >= (int) m_Rooms.size() ) + m_iRoomPlace=m_Rooms.size()-1; + UpdateRoomsList(); + ScreenNetSelectBase::MenuUp( pn ); + break; + }; } void ScreenNetRoom::MenuDown( PlayerNumber pn, const InputEventType type ) { - m_iRoomPlace++; - if (m_iRoomPlace<0) - m_iRoomPlace=0; - if( m_iRoomPlace >= (int) m_Rooms.size() ) - m_iRoomPlace=m_Rooms.size()-1; - UpdateRoomsList(); - ScreenNetSelectBase::MenuDown( pn ); + switch (m_SelectMode) { + case SelectRooms: + m_iRoomPlace++; + if (m_iRoomPlace<0) + m_iRoomPlace=0; + if( m_iRoomPlace >= (int) m_Rooms.size() ) + m_iRoomPlace=m_Rooms.size()-1; + UpdateRoomsList(); + ScreenNetSelectBase::MenuDown( pn ); + break; + }; +} + +void ScreenNetRoom::MenuLeft( PlayerNumber pn, const InputEventType type ) +{ + m_soundChangeSel.Play(); + m_SelectMode = (NetSelectModes) ( ( (int)m_SelectMode - 1) % (int)SelectModes); + if ( (int) m_SelectMode < 0) + m_SelectMode = (NetSelectModes) (SelectModes - 1); + m_sprSelection.StopTweening( ); + COMMAND( m_sprSelection, ssprintf("To%d", m_SelectMode+1 ) ); +} + +void ScreenNetRoom::MenuRight( PlayerNumber pn, const InputEventType type ) +{ + m_soundChangeSel.Play(); + m_SelectMode = (NetSelectModes) ( ( (int)m_SelectMode + 1) % (int)SelectModes); + m_sprSelection.StopTweening( ); + COMMAND( m_sprSelection, ssprintf("To%d", m_SelectMode+1 ) ); } void ScreenNetRoom::UpdateRoomsList() @@ -186,6 +248,15 @@ void ScreenNetRoom::UpdateRoomsList() m_textRooms.SetText( TempText ); } +void ScreenNetRoom::CreateNewRoom( const CString& rName, const CString& rDesc ) { + NSMAN->m_SMOnlinePacket.ClearPacket(); + NSMAN->m_SMOnlinePacket.Write1((uint8_t)2); //Create room command + NSMAN->m_SMOnlinePacket.Write1(1); //Type game room + NSMAN->m_SMOnlinePacket.WriteNT(rName); + NSMAN->m_SMOnlinePacket.WriteNT(rDesc); + NSMAN->SendSMOnline( ); +} + #endif /* diff --git a/stepmania/src/ScreenNetRoom.h b/stepmania/src/ScreenNetRoom.h index 5e539f7593..46e8beafb5 100644 --- a/stepmania/src/ScreenNetRoom.h +++ b/stepmania/src/ScreenNetRoom.h @@ -27,20 +27,35 @@ protected: private: void UpdateRoomsList(); + void MenuLeft( PlayerNumber pn, const InputEventType type ); + void MenuRight( PlayerNumber pn, const InputEventType type ); + void CreateNewRoom( const CString& rName, const CString& rDesc ); + + enum NetSelectModes + { + SelectRooms = 0, + SelectMakeRoom, + SelectModes, + }; + + NetSelectModes m_SelectMode; RageSound m_soundChangeSel; BitmapText m_textTitle; Quad m_rectTitleBG; - Quad m_rectRoomsBG; + Sprite m_sprRoomsBG; BitmapText m_textRooms; - Quad m_rectRoomsSel; + + Sprite m_sprSelection; Sprite m_sprCreateRoom; vector < CString > m_Rooms; int m_iRoomPlace; + + CString m_newRoomName, m_newRoomDesc; }; #endif