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