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