From b3f77e054b6cb6decfc6c55805c0532ab95ea8db Mon Sep 17 00:00:00 2001 From: blub0 Date: Thu, 10 Jul 2008 21:55:36 +0000 Subject: [PATCH] add csqc_flags cvar for client compatibility defaults to 0, flag 1 enables the stringwidth() builtins and the new font for the scoreboard git-svn-id: svn://svn.icculus.org/nexuiz/trunk@3812 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 3 ++ data/qcsrc/client/Main.qc | 1 + data/qcsrc/client/csqc_builtins.qc | 3 +- data/qcsrc/client/main.qh | 4 +++ data/qcsrc/client/miscfunctions.qc | 45 ++++++++++++++++++++++++++++++ data/qcsrc/client/progs.src | 1 + data/qcsrc/client/sbar.qc | 6 ++-- 7 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 data/qcsrc/client/miscfunctions.qc diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index af3cce113..0059e8e6e 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -1052,3 +1052,6 @@ set capturelimit 0 set sbar_fontsize 11 alias sbar_font "loadfont user1 $*; sbar_columns_set" sbar_font gfx/vera-sans + +// supporting stringwidth +seta csqc_flags 1 diff --git a/data/qcsrc/client/Main.qc b/data/qcsrc/client/Main.qc index b8001b5ad..807a22304 100644 --- a/data/qcsrc/client/Main.qc +++ b/data/qcsrc/client/Main.qc @@ -21,6 +21,7 @@ float using_gps; void CSQC_Init(void) { float i; + CSQC_CheckEngine(); drawfont = 0; menu_visible = FALSE; menu_show = menu_show_error; diff --git a/data/qcsrc/client/csqc_builtins.qc b/data/qcsrc/client/csqc_builtins.qc index 572ec3ca6..47a9e17dc 100644 --- a/data/qcsrc/client/csqc_builtins.qc +++ b/data/qcsrc/client/csqc_builtins.qc @@ -97,7 +97,8 @@ float drawfill(vector position, vector size, vector rgb, float alpha, float flag void drawsetcliparea(float x, float y, float width, float height) = #324; void drawresetcliparea(void) = #325; float drawcolorcodedstring(vector position, string text, vector scale, float alpha, float flag) = #326; -float stringwidth(string text, float handleColors) = #327; +float stringwidth_engine(string text, float handleColors) = #327; +float stringwidth(string text, float handleColors); float drawsubpic(vector position, vector size, string pic, vector srcPosition, vector srcSize, vector rgb, float alpha, float flag) = #328; diff --git a/data/qcsrc/client/main.qh b/data/qcsrc/client/main.qh index 938e71774..2fae3e87b 100644 --- a/data/qcsrc/client/main.qh +++ b/data/qcsrc/client/main.qh @@ -83,3 +83,7 @@ float sbar_field[MAX_SBAR_FIELDS + 1]; float sbar_size[MAX_SBAR_FIELDS + 1]; string sbar_title[MAX_SBAR_FIELDS + 1]; float sbar_num_fields; +float sbar_font; + +float csqc_flags; +#define CSQC_FLAG_STRINGWIDTH 1 diff --git a/data/qcsrc/client/miscfunctions.qc b/data/qcsrc/client/miscfunctions.qc new file mode 100644 index 000000000..47e59ef2b --- /dev/null +++ b/data/qcsrc/client/miscfunctions.qc @@ -0,0 +1,45 @@ +float stringwidth_oldfont(string text, float handleColors) +{ + float i, len, ch, width; + len = strlen(text); + if(!handleColors) + return len; + width = 0; + for(i = 0; i < len; ++i) + { + if(substring(text, i, 1) == "^") + { + ch = str2chr(text, i+1); + if(ch >= '0' && ch <= '9') + ++i; + else + ++width; + } + else + ++width; + } + return width; +} + +void CSQC_CheckEngine() +{ + float i, tmp; + registercvar("csqc_flags", "0"); + csqc_flags = cvar("csqc_flags"); + + if(csqc_flags & CSQC_FLAG_STRINGWIDTH) + { + stringwidth = stringwidth_engine; + sbar_font = FONT_USER+1; + } else { + stringwidth = stringwidth_oldfont; + sbar_font = FONT_DEFAULT; + } +} + +vector Sbar_GetFontsize() +{ + if(csqc_flags & CSQC_FLAG_STRINGWIDTH) + return stov(cvar_string("sbar_fontsize")); + return '8 8' ; +} diff --git a/data/qcsrc/client/progs.src b/data/qcsrc/client/progs.src index 3bde16016..8f83a2bc4 100644 --- a/data/qcsrc/client/progs.src +++ b/data/qcsrc/client/progs.src @@ -7,6 +7,7 @@ csqc_builtins.qc main.qh +miscfunctions.qc sortlist.qc teamplay.qc diff --git a/data/qcsrc/client/sbar.qc b/data/qcsrc/client/sbar.qc index 4601ca449..000610650 100644 --- a/data/qcsrc/client/sbar.qc +++ b/data/qcsrc/client/sbar.qc @@ -285,7 +285,7 @@ void Cmd_Sbar_SetFields(float argc) argc = min(MAX_SBAR_FIELDS, argc); sbar_num_fields = 0; - drawfont = FONT_USER+1; + drawfont = sbar_font; digit = stringwidth("0123456789", FALSE) / 10; for(i = 0; i < argc-1; ++i) { @@ -519,7 +519,7 @@ void Sbar_DrawScoreboard() float center_x; string str; - sbar_fontsize = stov(cvar_string("sbar_fontsize")); + sbar_fontsize = Sbar_GetFontsize(); if(sbar_fontsize_x == 0) sbar_fontsize = '8 8 0'; if(sbar_fontsize_y == 0) @@ -544,7 +544,7 @@ void Sbar_DrawScoreboard() pos_z = 0; // Heading - drawfont = FONT_USER+1; + drawfont = sbar_font; pos_x = center_x - stringwidth("Scoreboard", TRUE)*0.5*24; drawstring(pos, "Scoreboard", '24 24', '1 1 1', 1, DRAWFLAG_NORMAL); pos_x = xmin; -- 2.39.2