]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/playerlist.c
Initial checkout of Vore Tournament 0.1.alpha.
[voretournament/voretournament.git] / data / qcsrc / menu / voret / playerlist.c
1 #ifdef INTERFACE\r
2 CLASS(VoretPlayerList) EXTENDS(VoretListBox)\r
3         ATTRIB(VoretPlayerList, rowsPerItem, float, 1)\r
4         METHOD(VoretPlayerList, resizeNotify, void(entity, vector, vector, vector, vector))\r
5         METHOD(VoretPlayerList, drawListBoxItem, void(entity, float, vector, float))\r
6         ATTRIB(VoretPlayerList, realFontSize, vector, '0 0 0')\r
7         ATTRIB(VoretPlayerList, columnNameOrigin, float, 0)\r
8         ATTRIB(VoretPlayerList, columnNameSize, float, 0)\r
9         ATTRIB(VoretPlayerList, columnScoreOrigin, float, 0)\r
10         ATTRIB(VoretPlayerList, columnScoreSize, float, 0)\r
11         ATTRIB(VoretPlayerList, realUpperMargin, float, 0)\r
12         ATTRIB(VoretPlayerList, origin, vector, '0 0 0')\r
13         ATTRIB(VoretPlayerList, itemAbsSize, vector, '0 0 0')\r
14         METHOD(VoretPlayerList, setPlayerList, void(entity, string))\r
15         METHOD(VoretPlayerList, getPlayerList, string(entity, float, float))\r
16         ATTRIB(VoretPlayerList, playerList, float, -1)\r
17 ENDCLASS(VoretPlayerList)\r
18 entity makeVoretPlayerList();\r
19 #endif\r
20 \r
21 #ifdef IMPLEMENTATION\r
22 \r
23 #define PLAYERPARM_SCORE 0\r
24 #define PLAYERPARM_PING 1\r
25 #define PLAYERPARM_TEAM 2\r
26 #define PLAYERPARM_NAME 3\r
27 #define PLAYERPARM_COUNT 4\r
28 \r
29 entity makeVoretPlayerList()\r
30 {\r
31         entity me;\r
32         me = spawnVoretPlayerList();\r
33         me.configureVoretListBox(me);\r
34         return me;\r
35 }\r
36 \r
37 void setPlayerListVoretPlayerList(entity me, string plist)\r
38 {\r
39         dprint(plist,"------------\n");\r
40 \r
41         float buf,i,n;\r
42         string s;\r
43 \r
44         buf = buf_create();\r
45         me.nItems = tokenizebyseparator(plist, "\n");\r
46         for(i = 0; i < me.nItems; ++i)\r
47         {\r
48                 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(i)); // -666 100 "^4Nex ^2Player"\r
49         }\r
50 \r
51         for(i = 0; i < me.nItems; ++i)\r
52         {\r
53                 s = bufstr_get(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME);\r
54                 n = tokenize_console(s);\r
55 \r
56                 if(n == 4)\r
57                 {\r
58                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666\r
59                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100\r
60                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  argv(2)); // 0 for spec, else 1, 2, 3, 4\r
61                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(3)); // ^4Nex ^2Player\r
62                 }\r
63                 else\r
64                 {\r
65                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666\r
66                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100\r
67                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  "-1");\r
68                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(2)); // ^4Nex ^2Player\r
69                 }\r
70         }\r
71         me.playerList = buf;\r
72 }\r
73 \r
74 string getPlayerListVoretPlayerList(entity me, float i, float key)\r
75 {\r
76         return bufstr_get(me.playerList, i * PLAYERPARM_COUNT + key);\r
77 }\r
78 \r
79 void resizeNotifyVoretPlayerList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)\r
80 {\r
81         me.itemAbsSize = '0 0 0';\r
82         resizeNotifyVoretListBox(me, relOrigin, relSize, absOrigin, absSize);\r
83 \r
84         me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));\r
85         me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));\r
86         me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);\r
87 \r
88         // this list does 1 char left and right margin\r
89         me.columnScoreSize = 3 * me.realFontSize_x;\r
90         me.columnNameSize = 1 - 3 * me.realFontSize_x - me.columnScoreSize;\r
91 \r
92         me.columnNameOrigin = me.realFontSize_x;\r
93         me.columnScoreOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x;\r
94 }\r
95 \r
96 void drawListBoxItemVoretPlayerList(entity me, float i, vector absSize, float isSelected)\r
97 {\r
98         string s;\r
99         string score;\r
100         float t;\r
101         vector rgb;\r
102 \r
103         t = stof(me.getPlayerList(me, i, PLAYERPARM_TEAM));\r
104         if(t == 1)\r
105                 rgb = colormapPaletteColor(4, 0);\r
106         else if(t == 2)\r
107                 rgb = colormapPaletteColor(13, 0);\r
108         else if(t == 3)\r
109                 rgb = colormapPaletteColor(12, 0);\r
110         else if(t == 4)\r
111                 rgb = colormapPaletteColor(9, 0);\r
112         else\r
113                 rgb = '1 1 1';\r
114         \r
115         s = me.getPlayerList(me, i, PLAYERPARM_NAME);\r
116         score = me.getPlayerList(me, i, PLAYERPARM_SCORE);\r
117 \r
118         if(substring(score, strlen(score) - 10, 10) == ":spectator")\r
119         {\r
120                 score = "-666";\r
121         }\r
122         else\r
123         {\r
124                 if((t = strstrofs(score, ":", 0)) >= 0)\r
125                         score = substring(score, 0, t);\r
126                 if((t = strstrofs(score, ",", 0)) >= 0)\r
127                         score = substring(score, 0, t);\r
128         }\r
129 \r
130         s = draw_TextShortenToWidth(s, me.columnNameSize, 1, me.realFontSize);\r
131         score = draw_TextShortenToWidth(score, me.columnScoreSize, 0, me.realFontSize);\r
132 \r
133         draw_Text(me.realUpperMargin2 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 1, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', 1, 1);\r
134         draw_Text(me.realUpperMargin2 * eY + (me.columnScoreOrigin + 1.00 * (me.columnScoreSize - draw_TextWidth(score, 1, me.realFontSize))) * eX, score, me.realFontSize, rgb, 1, 0);\r
135 }\r
136 \r
137 #endif\r