]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/playerlist.qc
take3: format 903 files
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / playerlist.qc
1 #include "playerlist.qh"
2
3 .float realUpperMargin2;
4
5 const float PLAYERPARM_SCORE = 0;
6 const float PLAYERPARM_PING = 1;
7 const float PLAYERPARM_TEAM = 2;
8 const float PLAYERPARM_NAME = 3;
9 const float PLAYERPARM_COUNT = 4;
10
11 entity makeXonoticPlayerList()
12 {
13         entity me;
14         me = NEW(XonoticPlayerList);
15         me.configureXonoticListBox(me);
16         return me;
17 }
18
19 void XonoticPlayerList_setPlayerList(entity me, string plist)
20 {
21         int buf, i, n;
22         string s;
23
24         buf = buf_create();
25         me.nItems = tokenizebyseparator(plist, "\n");
26         for (i = 0; i < me.nItems; ++i) {
27                 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(i)); // -666 100 "^4Nex ^2Player"
28         }
29
30         for (i = 0; i < me.nItems; ++i) {
31                 s = bufstr_get(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME);
32                 n = tokenize_console(s);
33
34                 if (n == 4) {
35                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
36                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
37                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  argv(2)); // 0 for spec, else 1, 2, 3, 4
38                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(3)); // ^4Nex ^2Player
39                 } else {
40                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
41                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING,  argv(1)); // 100
42                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM,  "-1");
43                         bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME,  argv(2)); // ^4Nex ^2Player
44                 }
45         }
46         me.playerList = buf;
47 }
48
49 string XonoticPlayerList_getPlayerList(entity me, float i, float key)
50 {
51         return bufstr_get(me.playerList, i * PLAYERPARM_COUNT + key);
52 }
53
54 void XonoticPlayerList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
55 {
56         me.itemAbsSize = '0 0 0';
57         SUPER(XonoticPlayerList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
58
59         me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize.y * me.itemHeight));
60         me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize.x * (1 - me.controlWidth)));
61         me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
62
63         // this list does 1 char left and right margin
64         me.columnScoreSize = 5 * me.realFontSize.x;
65         me.columnNameSize = 1 - 3 * me.realFontSize.x - me.columnScoreSize;
66
67         me.columnNameOrigin = me.realFontSize.x;
68         me.columnScoreOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize.x;
69 }
70
71 void XonoticPlayerList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
72 {
73         string s;
74         string score;
75         float t;
76         vector rgb;
77
78         t = stof(me.getPlayerList(me, i, PLAYERPARM_TEAM));
79         if (t == 1) {
80                 rgb = colormapPaletteColor(4, 0);
81         } else if (t == 2) {
82                 rgb = colormapPaletteColor(13, 0);
83         } else if (t == 3) {
84                 rgb = colormapPaletteColor(12, 0);
85         } else if (t == 4) {
86                 rgb = colormapPaletteColor(9, 0);
87         } else {
88                 rgb = SKINCOLOR_TEXT;
89         }
90
91         s = me.getPlayerList(me, i, PLAYERPARM_NAME);
92         score = me.getPlayerList(me, i, PLAYERPARM_SCORE);
93
94         if (substring(score, strlen(score) - 10, 10) == ":spectator") {
95                 score = _("spectator");
96         } else {
97                 if ((t = strstrofs(score, ":", 0)) >= 0) {
98                         score = substring(score, 0, t);
99                 }
100                 if ((t = strstrofs(score, ",", 0)) >= 0) {
101                         score = substring(score, 0, t);
102                 }
103
104                 if (stof(score) == FRAGS_SPECTATOR) {
105                         score = _("spectator");
106                 }
107         }
108
109         s = draw_TextShortenToWidth(s, me.columnNameSize, 1, me.realFontSize);
110         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);
111
112         score = draw_TextShortenToWidth(score, me.columnScoreSize, 0, me.realFontSize);
113         draw_Text(me.realUpperMargin2 * eY + (me.columnScoreOrigin + 1.00 * (me.columnScoreSize - draw_TextWidth(score, 1, me.realFontSize))) * eX, score, me.realFontSize, rgb, 1, 0);
114 }