2 CLASS(NexuizServerList) EXTENDS(NexuizListBox)
3 METHOD(NexuizServerList, configureNexuizServerList, void(entity))
4 ATTRIB(NexuizServerList, rowsPerItem, float, 1)
5 METHOD(NexuizServerList, draw, void(entity))
6 METHOD(NexuizServerList, drawListBoxItem, void(entity, float, vector, float))
7 METHOD(NexuizServerList, resizeNotify, void(entity, vector, vector, vector, vector))
9 ATTRIB(NexuizServerList, realFontSize, vector, '0 0 0')
10 ATTRIB(NexuizServerList, realUpperMargin, float, 0)
11 ATTRIB(NexuizServerList, columnPingOrigin, float, 0)
12 ATTRIB(NexuizServerList, columnPingSize, float, 0)
13 ATTRIB(NexuizServerList, columnNameOrigin, float, 0)
14 ATTRIB(NexuizServerList, columnNameSize, float, 0)
15 ATTRIB(NexuizServerList, columnMapOrigin, float, 0)
16 ATTRIB(NexuizServerList, columnMapSize, float, 0)
17 ATTRIB(NexuizServerList, columnPlayersOrigin, float, 0)
18 ATTRIB(NexuizServerList, columnPlayersSize, float, 0)
20 ATTRIB(NexuizServerList, selectedServer, string, string_null) // to restore selected server when needed
21 METHOD(NexuizServerList, setSelected, void(entity, float))
22 ENDCLASS(NexuizServerList)
23 entity makeNexuizServerList();
27 float SLIST_FIELD_CNAME;
28 float SLIST_FIELD_PING;
29 float SLIST_FIELD_GAME;
30 float SLIST_FIELD_MOD;
31 float SLIST_FIELD_MAP;
32 float SLIST_FIELD_NAME;
33 float SLIST_FIELD_MAXPLAYERS;
34 float SLIST_FIELD_NUMPLAYERS;
35 float SLIST_FIELD_NUMHUMANS;
36 float SLIST_FIELD_NUMBOTS;
37 float SLIST_FIELD_PROTOCOL;
38 void ServerList_UpdateFieldIDs()
40 SLIST_FIELD_CNAME = gethostcacheindexforkey( "cname" );
41 SLIST_FIELD_PING = gethostcacheindexforkey( "ping" );
42 SLIST_FIELD_GAME = gethostcacheindexforkey( "game" );
43 SLIST_FIELD_MOD = gethostcacheindexforkey( "mod" );
44 SLIST_FIELD_MAP = gethostcacheindexforkey( "map" );
45 SLIST_FIELD_NAME = gethostcacheindexforkey( "name" );
46 SLIST_FIELD_MAXPLAYERS = gethostcacheindexforkey( "maxplayers" );
47 SLIST_FIELD_NUMPLAYERS = gethostcacheindexforkey( "numplayers" );
48 SLIST_FIELD_NUMHUMANS = gethostcacheindexforkey( "numhumans" );
49 SLIST_FIELD_NUMBOTS = gethostcacheindexforkey( "numbots" );
50 SLIST_FIELD_PROTOCOL = gethostcacheindexforkey( "protocol" );
53 entity makeNexuizServerList()
56 me = spawnNexuizServerList();
57 me.configureNexuizServerList(me);
60 void configureNexuizServerListNexuizServerList(entity me)
62 me.configureNexuizListBox(me);
64 ServerList_UpdateFieldIDs();
65 resethostcachemasks();
70 void setSelectedNexuizServerList(entity me, float i)
73 save = me.selectedItem;
74 setSelectedListBox(me, i);
76 if(me.selectedItem == save)
81 if(gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT) != me.nItems)
82 return; // sorry, it would be wrong
84 strunzone(me.selectedServer);
85 me.selectedServer = strzone(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
87 void drawNexuizServerList(entity me)
90 me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT);
91 for(i = 0; i < me.nItems; ++i)
93 if(gethostcachestring(SLIST_FIELD_CNAME, i) == me.selectedServer)
101 void resizeNotifyNexuizServerList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
103 resizeNotifyNexuizListBox(me, relOrigin, relSize, absOrigin, absSize);
105 me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);
106 me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));
107 me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
109 me.columnPingOrigin = 0;
110 me.columnPingSize = me.realFontSize_x * 4;
111 me.columnMapSize = me.realFontSize_x * 12;
112 me.columnPlayersSize = me.realFontSize_x * 6;
113 me.columnNameSize = 1 - me.columnPlayersSize - me.columnMapSize - me.columnPingSize - 3 * me.realFontSize_x;
114 me.columnNameOrigin = me.columnPingOrigin + me.columnPingSize + me.realFontSize_x;
115 me.columnMapOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x;
116 me.columnPlayersOrigin = me.columnMapOrigin + me.columnMapSize + me.realFontSize_x;
118 void drawListBoxItemNexuizServerList(entity me, float i, vector absSize, float isSelected)
120 // layout: Ping, Server name, Map name, NP, TP, MP
127 draw_Fill('0 0 0', '1 1 0', '0 0 1', 0.5);
129 if(gethostcachenumber(SLIST_FIELD_NUMPLAYERS, i) >= gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i))
131 else if(!gethostcachenumber(SLIST_FIELD_NUMHUMANS, i))
136 p = gethostcachenumber(SLIST_FIELD_PING, i);
138 theColor = eX * (p / 50) + eY;
140 theColor = eX + eY * ((150 - p) / 100);
144 theAlpha *= (650 - p) / 500;
148 draw_Text(me.realUpperMargin * eY + (me.columnPingSize - draw_TextWidth(s) * me.realFontSize_x) * eX, s, me.realFontSize, theColor, theAlpha);
149 s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_NAME, i), me.columnNameSize / me.realFontSize_x);
150 draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, me.realFontSize, theColor, theAlpha);
151 s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_MAP, i), me.columnMapSize / me.realFontSize_x);
152 draw_Text(me.realUpperMargin * eY + (me.columnMapOrigin + (me.columnMapSize - draw_TextWidth(s) * me.realFontSize_x) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha);
153 s = strcat(ftos(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i)), "/", ftos(gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i)));
154 draw_Text(me.realUpperMargin * eY + (me.columnPlayersOrigin + (me.columnPlayersSize - draw_TextWidth(s) * me.realFontSize_x) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha);