r4734 - in trunk/data: gfx qcsrc/client
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sun Oct 12 12:47:41 EDT 2008
Author: div0
Date: 2008-10-12 12:47:41 -0400 (Sun, 12 Oct 2008)
New Revision: 4734
Added:
trunk/data/gfx/sb_playercolor_base.tga
trunk/data/gfx/sb_playercolor_pants.tga
trunk/data/gfx/sb_playercolor_shirt.tga
Modified:
trunk/data/qcsrc/client/main.qh
trunk/data/qcsrc/client/sbar.qc
Log:
sbar: add columns:
- "color": player color icon (SOME graphics guy has to make usable ones)
- "frags": always kills - suicides (synthetic column), if there is no real "frags" column
Added: trunk/data/gfx/sb_playercolor_base.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/gfx/sb_playercolor_base.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/gfx/sb_playercolor_pants.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/gfx/sb_playercolor_pants.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/gfx/sb_playercolor_shirt.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/gfx/sb_playercolor_shirt.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/data/qcsrc/client/main.qh
===================================================================
--- trunk/data/qcsrc/client/main.qh 2008-10-11 21:19:35 UTC (rev 4733)
+++ trunk/data/qcsrc/client/main.qh 2008-10-12 16:47:41 UTC (rev 4734)
@@ -74,6 +74,8 @@
#define SP_KDRATIO -4
#define SP_CLRATIO -5
#define SP_PL -6
+#define SP_COLOR -7
+#define SP_FRAGS -8
#define SP_SEPARATOR -100
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2008-10-11 21:19:35 UTC (rev 4733)
+++ trunk/data/qcsrc/client/sbar.qc 2008-10-12 16:47:41 UTC (rev 4734)
@@ -332,6 +332,9 @@
print("of game types, then a slash, to make the field show up only in these\n");
print("or in all but these game types.\n");
+ print("The special game type names 'teams' and 'noteams' can be used to\n");
+ print("include/exclude ALL teams/noteams game modes.\n");
+
local float i;
print("Additional columns:\n");
for(i = 0; i < MAX_SCORE; ++i)
@@ -346,13 +349,18 @@
string Sbar_DefaultColumnLayout()
{
- return "ping pl name | -ctf,kh/kills -ctf,kh/deaths +kh/caps +kh/pushes +kh/destroyed +ctf/caps +ctf/pickups +ctf/fckills +ctf/returns -lms/score";
+ return strcat( // fteqcc sucks
+ "ping pl color name | ",
+ "+noteams/kills +noteams/deaths +noteams/suicides -noteams,tdm/frags ", // tdm already has this in "score"
+ "+kh/caps +kh/pushes +kh/destroyed ",
+ "+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns ",
+ "-lms/score");
}
void Cmd_Sbar_SetFields(float argc)
{
float i, j, slash;
- string str, pattern, subpattern;
+ string str, pattern, subpattern, subpattern2;
float digit;
float have_name, have_primary, have_secondary, have_separator;
float missing;
@@ -371,7 +379,7 @@
else if(argv(1) == "all")
{
string s;
- s = "ping pl name |";
+ s = "ping pl color name |";
for(i = 0; i < MAX_SCORE; ++i)
{
if(i != ps_primary)
@@ -394,6 +402,10 @@
digit = stringwidth("0123456789", FALSE) / 10;
subpattern = strcat(",", GametypeNameFromType(gametype), ",");
+ if(teamplay)
+ subpattern2 = ",teams,";
+ else
+ subpattern2 = ",noteams,";
argc = min(argc-1, MAX_SBAR_FIELDS-1);
for(i = 0; i < argc; ++i)
@@ -411,12 +423,15 @@
pattern = substring(pattern, 1, strlen(pattern) - 1);
if(strstrofs(strcat(",", pattern, ","), subpattern, 0) >= 0)
continue;
+ if(strstrofs(strcat(",", pattern, ","), subpattern2, 0) >= 0)
+ continue;
}
else
{
if(substring(pattern, 0, 1) == "+")
pattern = substring(pattern, 1, strlen(pattern) - 1);
if(strstrofs(strcat(",", pattern, ","), subpattern, 0) < 0)
+ if(strstrofs(strcat(",", pattern, ","), subpattern2, 0) < 0)
continue;
}
}
@@ -432,6 +447,11 @@
sbar_field[sbar_num_fields] = SP_PL;
} else if(str == "kd" || str == "kdr" || str == "kdratio" || str == "k/d") {
sbar_field[sbar_num_fields] = SP_KDRATIO;
+ } else if(str == "color") {
+ if(!teamplay)
+ sbar_field[sbar_num_fields] = SP_COLOR;
+ else
+ continue; // can't put this column in teamplay, it is redundant and stupid
} else if(str == "name" || str == "nick") {
sbar_field[sbar_num_fields] = SP_NAME;
sbar_size[sbar_num_fields] = MIN_NAMELEN; // minimum size? any use?
@@ -444,8 +464,15 @@
if(str == strtolower(scores_label[j]))
goto found; // sorry, but otherwise fteqcc -O3 miscompiles this and warns about "unreachable code"
:notfound
- print(strcat("^1Error:^7 Unknown score field: '", str, "'\n"));
- continue;
+ if(str == "frags")
+ {
+ j = SP_FRAGS;
+ }
+ else
+ {
+ print(strcat("^1Error:^7 Unknown score field: '", str, "'\n"));
+ continue;
+ }
:found
sbar_field[sbar_num_fields] = j;
if(j == ps_primary)
@@ -533,11 +560,29 @@
// MOVEUP::
vector sbar_field_rgb;
+string sbar_field_icon0;
+string sbar_field_icon1;
+string sbar_field_icon2;
+vector sbar_field_icon0_rgb;
+vector sbar_field_icon1_rgb;
+vector sbar_field_icon2_rgb;
+float sbar_field_icon0_alpha;
+float sbar_field_icon1_alpha;
+float sbar_field_icon2_alpha;
string Sbar_GetField(entity pl, float field)
{
float tmp, num, denom, f;
string str;
sbar_field_rgb = '1 1 1';
+ sbar_field_icon0 = "";
+ sbar_field_icon1 = "";
+ sbar_field_icon2 = "";
+ sbar_field_icon0_rgb = '1 1 1';
+ sbar_field_icon1_rgb = '1 1 1';
+ sbar_field_icon2_rgb = '1 1 1';
+ sbar_field_icon0_alpha = 1;
+ sbar_field_icon1_alpha = 1;
+ sbar_field_icon2_alpha = 1;
switch(field)
{
case SP_PING:
@@ -563,6 +608,20 @@
case SP_NAME:
return getplayerkey(pl.sv_entnum, "name");
+ case SP_FRAGS:
+ f = pl.(scores[SP_KILLS]);
+ f -= pl.(scores[SP_SUICIDES]);
+ return ftos(f);
+
+ case SP_COLOR:
+ f = stof(getplayerkey(pl.sv_entnum, "colors"));
+ sbar_field_icon0 = "gfx/sb_playercolor_base";
+ sbar_field_icon1 = "gfx/sb_playercolor_shirt";
+ sbar_field_icon1_rgb = colormapPaletteColor(floor(f / 16), 0);
+ sbar_field_icon2 = "gfx/sb_playercolor_pants";
+ sbar_field_icon2_rgb = colormapPaletteColor(mod(f, 16), 1);
+ return "";
+
case SP_KDRATIO:
num = pl.(scores[SP_KILLS]);
denom = pl.(scores[SP_DEATHS]);
@@ -637,12 +696,67 @@
}
float xmin, xmax, ymin, ymax, sbwidth;
+float sbar_fixscoreboardcolumnwidth_len;
+float sbar_fixscoreboardcolumnwidth_iconlen;
+string Sbar_FixScoreboardColumnWidth(float i, string str)
+{
+ float field, maxsize, j;
+ vector sz;
+ field = sbar_field[i];
+
+ if(field == SP_NAME) // name gets all remaining space
+ {
+ maxsize = (xmax - xmin) / sbar_fontsize_x;
+ for(j = 0; j < sbar_num_fields; ++j) if(j != i) if(sbar_field[j] != SP_SEPARATOR)
+ maxsize -= sbar_size[j] + 1;
+ maxsize += 1;
+ str = textShortenToWidth(str, maxsize, TRUE);
+ sbar_fixscoreboardcolumnwidth_len = stringwidth(str, TRUE);
+ }
+ else
+ sbar_fixscoreboardcolumnwidth_len = stringwidth(str, FALSE);
+
+ sbar_fixscoreboardcolumnwidth_iconlen = 0;
+
+ if(sbar_field_icon0 != "")
+ {
+ sz = drawgetimagesize(sbar_field_icon0);
+ if(sbar_fixscoreboardcolumnwidth_iconlen < sz_x / sz_y)
+ sbar_fixscoreboardcolumnwidth_iconlen = sz_x / sz_y;
+ }
+
+ if(sbar_field_icon1 != "")
+ {
+ sz = drawgetimagesize(sbar_field_icon1);
+ if(sbar_fixscoreboardcolumnwidth_iconlen < sz_x / sz_y)
+ sbar_fixscoreboardcolumnwidth_iconlen = sz_x / sz_y;
+ }
+
+ if(sbar_field_icon2 != "")
+ {
+ sz = drawgetimagesize(sbar_field_icon2);
+ if(sbar_fixscoreboardcolumnwidth_iconlen < sz_x / sz_y)
+ sbar_fixscoreboardcolumnwidth_iconlen = sz_x / sz_y;
+ }
+
+ sbar_fixscoreboardcolumnwidth_iconlen *= sbar_fontsize_y / sbar_fontsize_x; // fix icon aspect
+
+ if(sbar_size[i] < sbar_fixscoreboardcolumnwidth_len + sbar_fixscoreboardcolumnwidth_iconlen)
+ {
+ print("size: extended from ", ftos(sbar_size[i]), " to ");
+ sbar_size[i] = sbar_fixscoreboardcolumnwidth_len + sbar_fixscoreboardcolumnwidth_iconlen;
+ print(ftos(sbar_size[i]), "\n");
+ }
+
+ return str;
+}
+
void Sbar_PrintScoreboardItem(vector pos, entity pl, float is_self)
{
vector tmp;
string str;
- float i, field, len;
+ float i, field;
float is_spec;
is_spec = (GetPlayerColor(pl.sv_entnum) == COLOR_SPECTATOR);
@@ -667,36 +781,25 @@
continue;
}
str = Sbar_GetField(pl, field);
+ str = Sbar_FixScoreboardColumnWidth(i, str);
- if(field == SP_NAME)
- {
- float realsize;
- float j;
- realsize = sbar_size[i];
- if(i+1 < sbar_num_fields)
- if(sbar_field[i+1] == SP_SEPARATOR)
- {
- realsize = (xmax - xmin) / sbar_fontsize_x;
- for(j = 0; j < sbar_num_fields; ++j) if(j != i) if(sbar_field[j] != SP_SEPARATOR)
- realsize -= sbar_size[j] + 1;
- realsize += 1;
- }
- str = textShortenToWidth(str, realsize, TRUE);
- }
- len = stringwidth(str, TRUE);
-
- if(sbar_size[i] < len)
- sbar_size[i] = len;
-
pos_x += sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
if(field == SP_NAME) {
- tmp_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
+ tmp_x = sbar_fontsize_x*(sbar_size[i] - sbar_fixscoreboardcolumnwidth_iconlen) + sbar_fontsize_x;
drawcolorcodedstring(pos - tmp, str, sbar_fontsize, 1, DRAWFLAG_NORMAL);
} else {
- tmp_x = len*sbar_fontsize_x + sbar_fontsize_x;
+ tmp_x = sbar_fixscoreboardcolumnwidth_len*sbar_fontsize_x + sbar_fontsize_x;
drawstring(pos - tmp, str, sbar_fontsize, sbar_field_rgb, 1, DRAWFLAG_NORMAL);
}
+
+ tmp_x = sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
+ if(sbar_field_icon0 != "")
+ drawpic(pos - tmp, sbar_field_icon0, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon0_alpha, 0);
+ if(sbar_field_icon1 != "")
+ drawpic(pos - tmp, sbar_field_icon1, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon1_alpha, 0);
+ if(sbar_field_icon2 != "")
+ drawpic(pos - tmp, sbar_field_icon2, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon2_rgb, sbar_field_icon2_alpha, 0);
}
if(sbar_field[i] == SP_SEPARATOR)
@@ -714,21 +817,24 @@
}
str = Sbar_GetField(pl, field);
+ str = Sbar_FixScoreboardColumnWidth(i, str);
- if(field == SP_NAME)
- str = textShortenToWidth(str, sbar_size[i], TRUE);
- len = stringwidth(str, TRUE);
-
- if(sbar_size[i] < len)
- sbar_size[i] = len;
-
if(field == SP_NAME) {
- tmp_x = sbar_fontsize_x*len; // left or right aligned? let's put it right...
+ tmp_x = sbar_fontsize_x*sbar_fixscoreboardcolumnwidth_len; // left or right aligned? let's put it right...
drawcolorcodedstring(pos - tmp, str, sbar_fontsize, 1, DRAWFLAG_NORMAL);
} else {
- tmp_x = sbar_fontsize_x*len; //strlen(str);
+ tmp_x = sbar_fontsize_x*sbar_fixscoreboardcolumnwidth_len; //strlen(str);
drawstring(pos - tmp, str, sbar_fontsize, sbar_field_rgb, 1, DRAWFLAG_NORMAL);
}
+
+ tmp_x = sbar_fontsize_x*sbar_size[i];
+ if(sbar_field_icon0 != "")
+ drawpic(pos - tmp, sbar_field_icon0, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon0_alpha, 0);
+ if(sbar_field_icon1 != "")
+ drawpic(pos - tmp, sbar_field_icon1, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon1_rgb, sbar_field_icon1_alpha, 0);
+ if(sbar_field_icon2 != "")
+ drawpic(pos - tmp, sbar_field_icon2, '0 1 0' * sbar_fontsize_y + '1 0 0' * sbar_fontsize_x * sbar_fixscoreboardcolumnwidth_iconlen, sbar_field_icon2_rgb, sbar_field_icon2_alpha, 0);
+
pos_x -= sbar_fontsize_x*sbar_size[i] + sbar_fontsize_x;
}
}
More information about the nexuiz-commits
mailing list