Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
playerlist.qc
Go to the documentation of this file.
1#include "playerlist.qh"
2
4
5const int PLAYERPARM_SCORE = 0;
6const int PLAYERPARM_PING = 1;
7const int PLAYERPARM_TEAM = 2;
8const int PLAYERPARM_NAME = 3;
9const int PLAYERPARM_COUNT = 4;
10
12{
14 me.configureXonoticListBox(me);
15 return me;
16}
17
19{
20 int i;
21 int buf = buf_create();
22
23 me.nItems = tokenizebyseparator(plist, "\n");
24 for(i = 0; i < me.nItems; ++i)
25 {
26 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(i)); // -666 100 "^4Xon ^2Player"
27 }
28
29 for(i = 0; i < me.nItems; ++i)
30 {
31 string name = bufstr_get(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME);
32 int n = tokenize_console(name);
33
34 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_SCORE, argv(0)); // -666
35 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_PING, argv(1)); // 100
36 if(n == PLAYERPARM_COUNT)
37 {
38 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM, argv(2)); // 0 for spec, else 1, 2, 3, 4
39 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(3)); // ^4Xon ^2Player
40 }
41 else
42 {
43 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_TEAM, "-1");
44 bufstr_set(buf, i * PLAYERPARM_COUNT + PLAYERPARM_NAME, argv(2)); // ^4Xon ^2Player
45 }
46 }
47 me.playerList = buf;
48}
49
50string XonoticPlayerList_getPlayerList(entity me, float i, float key)
51{
52 return bufstr_get(me.playerList, i * PLAYERPARM_COUNT + key);
53}
54
55void XonoticPlayerList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
56{
57 me.itemAbsSize = '0 0 0';
58 SUPER(XonoticPlayerList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
59
60 me.itemAbsSize.y = absSize.y * me.itemHeight;
61 me.itemAbsSize.x = absSize.x * (1 - me.controlWidth);
62 me.realFontSize.y = me.fontSize / me.itemAbsSize.y;
63 me.realFontSize.x = me.fontSize / me.itemAbsSize.x;
64 me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
65
66 // this list does 1 char left and right margin
67 me.columnScoreSize = 5 * me.realFontSize.x;
68 me.columnNameSize = 1 - 3 * me.realFontSize.x - me.columnScoreSize;
69
70 me.columnScoreOrigin = me.realFontSize.x;
71 me.columnNameOrigin = me.columnScoreOrigin + me.columnScoreSize + me.realFontSize.x;
72}
73
74void XonoticPlayerList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
75{
76 float t = stof(me.getPlayerList(me, i, PLAYERPARM_TEAM));
77
78 vector rgb = SKINCOLOR_TEXT;
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
88 string name = me.getPlayerList(me, i, PLAYERPARM_NAME);
89 string score = me.getPlayerList(me, i, PLAYERPARM_SCORE);
90 string ping = me.getPlayerList(me, i, PLAYERPARM_PING);
91
92 bool is_bot = (ping == "0");
93 bool is_spectator = false;
94 if(substring(score, strlen(score) - 10, 10) == ":spectator")
95 {
96 is_spectator = true;
97 }
98 else
99 {
100 if((t = strstrofs(score, ":", 0)) >= 0)
101 score = substring(score, 0, t);
102 if((t = strstrofs(score, ",", 0)) >= 0)
103 score = substring(score, 0, t);
104
105 if(stof(score) == FRAGS_SPECTATOR)
106 is_spectator = true;
107 }
108
109 if(is_bot)
110 name = cons("^9(bot)^7", name);
111
112 if (is_spectator)
113 {
114 score = _("spectator");
115 rgb = '0.3 0.3 0.3';
116 }
117
118 name = draw_TextShortenToWidth(name, me.columnNameSize, 1, me.realFontSize);
119 draw_Text(me.realUpperMargin2 * eY + me.columnNameOrigin * eX, name, me.realFontSize, '1 1 1', 1, 1);
120
121 score = draw_TextShortenToWidth(score, me.columnScoreSize, 0, me.realFontSize);
122 float score_ofs = me.columnScoreSize - draw_TextWidth(score, 1, me.realFontSize);
123 draw_Text(me.realUpperMargin2 * eY + (me.columnScoreOrigin + score_ofs) * eX, score, me.realFontSize, rgb, 1, 0);
124}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
float ping
Definition main.qh:169
#define colormapPaletteColor(c, isPants)
Definition color.qh:5
const int FRAGS_SPECTATOR
Definition constants.qh:4
#define strstrofs
#define strlen
#define tokenize_console
#define tokenizebyseparator
#define buf_create
string draw_TextShortenToWidth(string theText, float maxWidth, float ICanHasKallerz, vector SizeThxBye)
Definition draw.qc:378
void draw_Text(vector theOrigin, string theText, vector theSize, vector theColor, float theAlpha, float ICanHasKallerz)
Definition draw.qc:282
float draw_TextWidth(string theText, float ICanHasKallerz, vector SizeThxBye)
Definition draw.qc:304
string name
Definition menu.qh:30
float stof(string val,...)
string substring(string s, float start, float length)
string argv(float n)
#define NEW(cname,...)
Definition oo.qh:117
#define SUPER(cname)
Definition oo.qh:231
const int PLAYERPARM_NAME
Definition playerlist.qc:8
const int PLAYERPARM_PING
Definition playerlist.qc:6
string XonoticPlayerList_getPlayerList(entity me, float i, float key)
Definition playerlist.qc:50
float realUpperMargin2
Definition playerlist.qc:3
const int PLAYERPARM_TEAM
Definition playerlist.qc:7
entity makeXonoticPlayerList()
Definition playerlist.qc:11
const int PLAYERPARM_SCORE
Definition playerlist.qc:5
const int PLAYERPARM_COUNT
Definition playerlist.qc:9
void XonoticPlayerList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
Definition playerlist.qc:74
void XonoticPlayerList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
Definition playerlist.qc:55
void XonoticPlayerList_setPlayerList(entity me, string plist)
Definition playerlist.qc:18
vector
Definition self.qh:92
ERASEABLE string cons(string a, string b)
Definition string.qh:276
const vector eY
Definition vector.qh:45
const vector eX
Definition vector.qh:44