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