Ability to color code room based on status
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user