]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/menu/nexuiz/playerlist.c
r5752 | div0 | 2009-02-05 09:41:16 +0100 (Thu, 05 Feb 2009) | 4 lines
[divverent/nexuiz.git] / data / qcsrc / menu / nexuiz / playerlist.c
1 #ifdef INTERFACE
2 CLASS(NexuizPlayerList) EXTENDS(NexuizListBox)
3         ATTRIB(NexuizPlayerList, rowsPerItem, float, 1)
4         METHOD(NexuizPlayerList, resizeNotify, void(entity, vector, vector, vector, vector))
5         METHOD(NexuizPlayerList, drawListBoxItem, void(entity, float, vector, float))
6         ATTRIB(NexuizPlayerList, realFontSize, vector, '0 0 0')
7         ATTRIB(NexuizPlayerList, columnNameOrigin, float, 0)
8         ATTRIB(NexuizPlayerList, columnNameSize, float, 0)
9         ATTRIB(NexuizPlayerList, columnScoreOrigin, float, 0)
10         ATTRIB(NexuizPlayerList, columnScoreSize, float, 0)
11         ATTRIB(NexuizPlayerList, realUpperMargin, float, 0)
12         ATTRIB(NexuizPlayerList, origin, vector, '0 0 0')
13         ATTRIB(NexuizPlayerList, itemAbsSize, vector, '0 0 0')
14         METHOD(NexuizPlayerList, setPlayerList, void(entity, string))
15         METHOD(NexuizPlayerList, getPlayerList, string(entity, float, float))
16         ATTRIB(NexuizPlayerList, playerList, float, -1)
17 ENDCLASS(NexuizPlayerList)
18 entity makeNexuizPlayerList();
19 #endif
20
21 #ifdef IMPLEMENTATION
22
23 #define PLAYERPARM_SCORE 0
24 #define PLAYERPARM_PING 1
25 #define PLAYERPARM_TEAM 2
26 #define PLAYERPARM_NAME 3
27 #define PLAYERPARM_COUNT 4
28
29 entity makeNexuizPlayerList()
30 {
31         entity me;
32         me = spawnNexuizPlayerList();
33         me.configureNexuizListBox(me);
34         return me;
35 }
36
37 void setPlayerListNexuizPlayerList(entity me, string plist)
38 {
39         dprint(plist,"------------\n");
40
41         float buf,i,n;
42         string s;
43
44         buf = buf_create();
45         me.nItems = tokenizebyseparator(plist, "\n");
46         for(i = 0; i < me.nItems; ++i)
47         {
48                 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(i)); // -666 100 "^4Nex ^2Player"
49         }
50
51         for(i = 0; i < me.nItems; ++i)
52         {
53                 s = bufstr_get(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME);
54                 n = tokenize_sane(s);
55
56                 if(n == 4)
57                 {
58                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
59                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
60                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  argv(2)); // 0 for spec, else 1, 2, 3, 4
61                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(3)); // ^4Nex ^2Player
62                 }
63                 else
64                 {
65                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
66                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
67                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  "-1");
68                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(2)); // ^4Nex ^2Player
69                 }
70         }
71         me.playerList = buf;
72 }
73
74 string getPlayerListNexuizPlayerList(entity me, float i, float key)
75 {
76         return bufstr_get(me.playerList, i * PLAYERPARM_COUNT + key);
77 }
78
79 void resizeNotifyNexuizPlayerList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
80 {
81         me.origin = absOrigin;
82         me.itemAbsSize = '0 0 0';
83         resizeNotifyNexuizListBox(me, relOrigin, relSize, absOrigin, absSize);
84
85         me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
86         me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
87         me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
88
89         // this list does 1 char left and right margin
90         me.columnScoreSize = 3 * me.realFontSize_x;
91         me.columnNameSize = 1 - 3 * me.realFontSize_x - me.columnScoreSize;
92
93         me.columnNameOrigin = me.realFontSize_x;
94         me.columnScoreOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x;
95 }
96
97 void drawListBoxItemNexuizPlayerList(entity me, float i, vector absSize, float isSelected)
98 {
99         string s;
100         string score;
101         float t;
102         vector rgb;
103
104         t = stof(me.getPlayerList(me, i, PLAYERPARM_TEAM));
105         if(t == 1)
106                 rgb = colormapPaletteColor(4, 0);
107         else if(t == 2)
108                 rgb = colormapPaletteColor(13, 0);
109         else if(t == 3)
110                 rgb = colormapPaletteColor(12, 0);
111         else if(t == 4)
112                 rgb = colormapPaletteColor(9, 0);
113         else
114                 rgb = '1 1 1';
115         
116         s = me.getPlayerList(me, i, PLAYERPARM_NAME);
117         score = me.getPlayerList(me, i, PLAYERPARM_SCORE);
118
119         s = draw_TextShortenToWidth(s, (me.columnNameSize / me.realFontSize_x), 1);
120         score = draw_TextShortenToWidth(score, me.columnScoreSize / me.realFontSize_x, 0);
121
122         draw_Text(me.realUpperMargin2 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 1) * me.realFontSize_x)) * eX, s, me.realFontSize, '1 1 1', 1, 1);
123         draw_Text(me.realUpperMargin2 * eY + (me.columnScoreOrigin + 1.00 * (me.columnScoreSize - draw_TextWidth(score, 1) * me.realFontSize_x)) * eX, score, me.realFontSize, rgb, 1, 0);
124 }
125
126 #endif