Ability to color code room based on status

This commit is contained in:
Josh Allen
2005-01-28 23:59:34 +00:00
parent a449b838b3
commit 685ea445a2
2 changed files with 93 additions and 29 deletions
+75 -27
View File
@@ -16,8 +16,10 @@
#define ROOMSBG_HEIGHT THEME->GetMetricF(m_sName,"RoomsBGHeight") #define ROOMSBG_HEIGHT THEME->GetMetricF(m_sName,"RoomsBGHeight")
#define SELECTION_WIDTH THEME->GetMetricF(m_sName,"SelectionWidth") #define SELECTION_WIDTH THEME->GetMetricF(m_sName,"SelectionWidth")
#define SELECTION_HEIGHT THEME->GetMetricF(m_sName,"SelectionHeight") #define SELECTION_HEIGHT THEME->GetMetricF(m_sName,"SelectionHeight")
#define ROOMSPACEX THEME->GetMetricF(m_sName,"RoomsSpacingX")
#define NUM_ROOMS_SHOW THEME->GetMetricI(m_sName,"NumRoomsShow"); #define ROOMSPACEY THEME->GetMetricF(m_sName,"RoomsSpacingY")
#define ROOMLOWERBOUND THEME->GetMetricF(m_sName,"RoomsLowerBound")
#define ROOMUPPERBOUND THEME->GetMetricF(m_sName,"RoomsUpperBound")
const ScreenMessage SM_SMOnlinePack = ScreenMessage(SM_User+8); //Unused, but should be known const ScreenMessage SM_SMOnlinePack = ScreenMessage(SM_User+8); //Unused, but should be known
const ScreenMessage SM_BackFromRoomName = ScreenMessage(SM_User+15); const ScreenMessage SM_BackFromRoomName = ScreenMessage(SM_User+15);
@@ -118,9 +120,15 @@ void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM )
m_Rooms.clear(); m_Rooms.clear();
for (int i=0;i<numRooms;i++) for (int i=0;i<numRooms;i++)
{ {
m_Rooms.push_back( NSMAN->m_SMOnlinePacket.ReadNT() ); RoomData tmpRoomData;
NSMAN->m_SMOnlinePacket.ReadNT(); tmpRoomData.SetName(NSMAN->m_SMOnlinePacket.ReadNT());
tmpRoomData.SetDescription(NSMAN->m_SMOnlinePacket.ReadNT());
m_Rooms.push_back( tmpRoomData );
} }
//Abide by protocol and read room status
for (int i=0;i<numRooms;i++)
m_Rooms[i].SetState(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() )
@@ -169,7 +177,7 @@ void ScreenNetRoom::MenuStart( PlayerNumber pn )
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)
NSMAN->m_SMOnlinePacket.WriteNT( m_Rooms[m_iRoomPlace] ); NSMAN->m_SMOnlinePacket.WriteNT( m_RoomList[m_iRoomPlace].GetText() );
NSMAN->SendSMOnline( ); NSMAN->SendSMOnline( );
ScreenNetSelectBase::MenuStart( pn ); ScreenNetSelectBase::MenuStart( pn );
break; break;
@@ -193,12 +201,10 @@ void ScreenNetRoom::MenuUp( PlayerNumber pn, const InputEventType type )
{ {
switch (m_SelectMode) { switch (m_SelectMode) {
case SelectRooms: case SelectRooms:
m_iRoomPlace--; if (m_iRoomPlace+1 < m_RoomList.size()) {
if (m_iRoomPlace<0) ShiftRoomsUp();
m_iRoomPlace=0; m_iRoomPlace++;
if( m_iRoomPlace >= (int) m_Rooms.size() ) }
m_iRoomPlace=m_Rooms.size()-1;
UpdateRoomsList();
ScreenNetSelectBase::MenuUp( pn ); ScreenNetSelectBase::MenuUp( pn );
break; break;
}; };
@@ -208,12 +214,10 @@ void ScreenNetRoom::MenuDown( PlayerNumber pn, const InputEventType type )
{ {
switch (m_SelectMode) { switch (m_SelectMode) {
case SelectRooms: case SelectRooms:
m_iRoomPlace++; if (m_iRoomPlace > 0) {
if (m_iRoomPlace<0) ShiftRoomsDown();
m_iRoomPlace=0; m_iRoomPlace--;
if( m_iRoomPlace >= (int) m_Rooms.size() ) }
m_iRoomPlace=m_Rooms.size()-1;
UpdateRoomsList();
ScreenNetSelectBase::MenuDown( pn ); ScreenNetSelectBase::MenuDown( pn );
break; break;
}; };
@@ -239,18 +243,38 @@ void ScreenNetRoom::MenuRight( PlayerNumber pn, const InputEventType type )
void ScreenNetRoom::UpdateRoomsList() void ScreenNetRoom::UpdateRoomsList()
{ {
CString TempText=""; float cx = THEME->GetMetricF(m_sName, "RoomsX");
float cy = THEME->GetMetricF(m_sName, "RoomsY");
//It doesn't like this stuff inline //It doesn't like this stuff inline
int min = m_iRoomPlace-NUM_ROOMS_SHOW; for (unsigned int i = 0; i < m_RoomList.size(); ++i)
int max = m_iRoomPlace+NUM_ROOMS_SHOW; this->RemoveChild(&m_RoomList[i]);
for (int i=min; i<max; i++ )
{ m_RoomList.clear();
if( i >= 0 && i < (int) m_Rooms.size() ) m_RoomList.resize(m_Rooms.size());
TempText += m_Rooms[i] + '\n';
else for (unsigned int i = 0; i < m_Rooms.size(); ++i) {
TempText += '\n'; m_RoomList[i].LoadFromFont( THEME->GetPathF(m_sName,"Rooms") );
m_RoomList[i].SetName( "RoomListEliment" );
m_RoomList[i].SetShadowLength( 1 );
m_RoomList[i].SetXY( cx, cy );
m_RoomList[i].SetText(m_Rooms[i].Name());
switch (m_Rooms[i].State()) {
case 0:
m_RoomList[i].SetDiffuseColor (THEME->GetMetricC( m_sName, "OpenRoomColor"));
break;
case 1:
m_RoomList[i].SetDiffuseColor (THEME->GetMetricC( m_sName, "PasswdRoomColor"));
break;
case 2:
m_RoomList[i].SetDiffuseColor (THEME->GetMetricC( m_sName, "InGameRoomColor"));
break;
}
this->AddChild( &m_RoomList[i] );
if (cy > ROOMLOWERBOUND)
COMMAND(m_RoomList[i], "RoomsOff");
cx+=ROOMSPACEX;
cy+=ROOMSPACEY;
} }
m_textRooms.SetText( TempText );
} }
void ScreenNetRoom::CreateNewRoom( const CString& rName, const CString& rDesc ) { void ScreenNetRoom::CreateNewRoom( const CString& rName, const CString& rDesc ) {
@@ -262,6 +286,30 @@ void ScreenNetRoom::CreateNewRoom( const CString& rName, const CString& rDesc )
NSMAN->SendSMOnline( ); NSMAN->SendSMOnline( );
} }
void ScreenNetRoom::ShiftRoomsUp() {
for (unsigned int x = 0; x < m_RoomList.size(); ++x) {
if ((m_RoomList[x].GetY()-ROOMSPACEY >= ROOMUPPERBOUND)&&(m_RoomList[x].GetY()-ROOMSPACEY < ROOMLOWERBOUND)) {
COMMAND(m_RoomList[x], "ShiftUp");
COMMAND(m_RoomList[x], "RoomsOn");
} else {
COMMAND(m_RoomList[x], "ShiftUp");
COMMAND(m_RoomList[x], "RoomsOff");
}
}
}
void ScreenNetRoom::ShiftRoomsDown() {
for ( int x = 0; x < m_RoomList.size(); ++x) {
if ((m_RoomList[x].GetY()+ROOMSPACEY >= ROOMUPPERBOUND)&&(m_RoomList[x].GetY()+ROOMSPACEY < ROOMLOWERBOUND)) {
COMMAND(m_RoomList[x], "ShiftDown");
COMMAND(m_RoomList[x], "RoomsOn");
} else {
COMMAND(m_RoomList[x], "ShiftDown");
COMMAND(m_RoomList[x], "RoomsOff");
}
}
}
#endif #endif
/* /*
+18 -2
View File
@@ -7,6 +7,20 @@
#include "ScreenNetSelectBase.h" #include "ScreenNetSelectBase.h"
#include <vector> #include <vector>
class RoomData {
public:
void SetName(CString& name) { m_name = name; }
void SetDescription(CString& desc) { m_description = desc; }
void SetState(unsigned int state) { m_state = state; }
inline CString Name() { return m_name; }
inline CString Description() { return m_description; }
inline unsigned int State() { return m_state; }
private:
CString m_name;
CString m_description;
uint8_t m_state;
};
class ScreenNetRoom : public ScreenNetSelectBase class ScreenNetRoom : public ScreenNetSelectBase
{ {
public: public:
@@ -30,6 +44,8 @@ private:
void MenuLeft( PlayerNumber pn, const InputEventType type ); void MenuLeft( PlayerNumber pn, const InputEventType type );
void MenuRight( PlayerNumber pn, const InputEventType type ); void MenuRight( PlayerNumber pn, const InputEventType type );
void CreateNewRoom( const CString& rName, const CString& rDesc ); void CreateNewRoom( const CString& rName, const CString& rDesc );
void ShiftRoomsUp();
void ShiftRoomsDown();
enum NetSelectModes enum NetSelectModes
{ {
@@ -52,12 +68,12 @@ private:
Sprite m_sprCreateRoom; Sprite m_sprCreateRoom;
vector < CString > m_Rooms; vector < BitmapText > m_RoomList;
vector < RoomData > m_Rooms;
int m_iRoomPlace; int m_iRoomPlace;
CString m_newRoomName, m_newRoomDesc; CString m_newRoomName, m_newRoomDesc;
}; };
#endif #endif
/* /*