X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Fracetimer.qc;h=7ecdf1a8216afd975b9f8054ac49fa8cf0d2c153;hb=78f029e455509478f3756ef6c9c0936222b54bbd;hp=2f54e2a37981bfa42c166fbe8ea18f1d7a5b7c42;hpb=d5a954d00e5c66bd5e68eadef172e50cf392bc4c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud/panel/racetimer.qc b/qcsrc/client/hud/panel/racetimer.qc index 2f54e2a37..7ecdf1a82 100644 --- a/qcsrc/client/hud/panel/racetimer.qc +++ b/qcsrc/client/hud/panel/racetimer.qc @@ -1,18 +1,21 @@ #include "racetimer.qh" -#include +#include -// Race timer (#6) +// Race timer (#8) + +void HUD_RaceTimer_Export(int fh) +{ + // allow saving cvars that aesthetically change the panel into hud skin files +} // return the string of the onscreen race timer -string MakeRaceString(int cp, float mytime, float theirtime, float lapdelta, string theirname) +string MakeRaceString(int cp, float mytime, float theirtime, float othertime, float lapdelta, string theirname) { TC(int, cp); - string col; - string timestr; - string cpname; - string lapstr; - lapstr = ""; + string cpname, lapstr = "", timestr = "", col = "^7", othercol = "^7", othertimestr = ""; + if(theirname == "" || !autocvar_cl_race_cptimes_showself) + othertime = 0; // don't count personal time if(theirtime == 0) // goal hit { @@ -32,6 +35,22 @@ string MakeRaceString(int cp, float mytime, float theirtime, float lapdelta, str col = "^2"; } + if(othertime > 0) + { + othertimestr = strcat("+", ftos_decimals(+othertime, TIME_DECIMALS)); + othercol = "^1"; + } + else if(othertime == 0) + { + othertimestr = "+0.0"; + othercol = "^3"; + } + else + { + othertimestr = strcat("-", ftos_decimals(-othertime, TIME_DECIMALS)); + othercol = "^2"; + } + if(lapdelta > 0) { lapstr = sprintf(_(" (-%dL)"), lapdelta); @@ -50,11 +69,11 @@ string MakeRaceString(int cp, float mytime, float theirtime, float lapdelta, str else timestr = TIME_ENCODED_TOSTRING(TIME_ENCODE(theirtime)); col = "^3"; - } - else - { - col = "^7"; - timestr = ""; + if(mytime >= othertime) + othertimestr = strcat("+", ftos_decimals(mytime - othertime, TIME_DECIMALS)); + else + othertimestr = TIME_ENCODED_TOSTRING(TIME_ENCODE(othertime)); + othercol = "^7"; } if(cp == 254) @@ -70,6 +89,8 @@ string MakeRaceString(int cp, float mytime, float theirtime, float lapdelta, str return strcat(col, cpname); else if(theirname == "") return strcat(col, sprintf("%s (%s)", cpname, timestr)); + else if(othertime) + return strcat(col, sprintf("%s %s(%s)%s (%s %s)", cpname, othercol, othertimestr, col, timestr, strcat(ColorTranslateRGB(theirname), col, lapstr))); else return strcat(col, sprintf("%s (%s %s)", cpname, timestr, strcat(ColorTranslateRGB(theirname), col, lapstr))); } @@ -79,7 +100,7 @@ void HUD_RaceTimer () if(!autocvar__hud_configure) { if(!autocvar_hud_panel_racetimer) return; - if(!(gametype == MAPINFO_TYPE_RACE || gametype == MAPINFO_TYPE_CTS)) return; + if(!MUTATOR_CALLHOOK(ShowRaceTimer)) return; if(spectatee_status == -1) return; } @@ -129,10 +150,11 @@ void HUD_RaceTimer () str_pos = pos + eX * 0.5 * (mySize.x - stringwidth(s, false, '1 1 0' * 0.6 * mySize.y)); drawstring(str_pos, s, '1 1 0' * 0.6 * mySize.y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); draw_endBoldFont(); - s = _("^1Intermediate 1 (+15.42)"); + s = strcat("^1", sprintf(_("Intermediate %d"), 1), " (+15.42)"); str_pos = pos + vec2(0.5 * (mySize.x - stringwidth(s, true, '1 1 0' * 0.2 * mySize.y)), 0.6 * mySize.y); drawcolorcodedstring(str_pos, s, '1 1 0' * 0.2 * mySize.y, panel_fg_alpha, DRAWFLAG_NORMAL); - s = sprintf(_("^1PENALTY: %.1f (%s)"), 2, "missing a checkpoint"); + s = sprintf(_("PENALTY: %.1f (%s)"), 2, _("missing a checkpoint")); + s = strcat("^1", s); str_pos = pos + vec2(0.5 * (mySize.x - stringwidth(s, true, '1 1 0' * 0.2 * mySize.y)), 0.8 * mySize.y); drawcolorcodedstring(str_pos, s, '1 1 0' * 0.2 * mySize.y, panel_fg_alpha, DRAWFLAG_NORMAL); } @@ -146,20 +168,24 @@ void HUD_RaceTimer () if(race_checkpoint != 254) { if(race_time && race_previousbesttime) - s = MakeRaceString(race_checkpoint, TIME_DECODE(race_time) - TIME_DECODE(race_previousbesttime), 0, 0, race_previousbestname); + s = MakeRaceString(race_checkpoint, TIME_DECODE(race_time) - TIME_DECODE(race_previousbesttime), 0, ((race_mypreviousbesttime) ? TIME_DECODE(race_time) - TIME_DECODE(race_mypreviousbesttime) : 0), 0, race_previousbestname); else - s = MakeRaceString(race_checkpoint, 0, -1, 0, race_previousbestname); + s = MakeRaceString(race_checkpoint, 0, -1, 0, 0, race_previousbestname); if(race_time) forcetime = TIME_ENCODED_TOSTRING(race_time); } } else { - if(race_laptime && race_nextbesttime && race_nextcheckpoint != 254) + if(race_laptime && race_nextcheckpoint != 254) { - a = bound(0, 2 - ((race_laptime + TIME_DECODE(race_nextbesttime)) - (time + TIME_DECODE(race_penaltyaccumulator))), 1); - if(a > 0) // next one? - s = MakeRaceString(race_nextcheckpoint, (time + TIME_DECODE(race_penaltyaccumulator)) - race_laptime, TIME_DECODE(race_nextbesttime), 0, race_nextbestname); + if(race_nextbesttime) + { + a = bound(0, 2 - ((race_laptime + TIME_DECODE(race_nextbesttime)) - (time + TIME_DECODE(race_penaltyaccumulator))), 1); + float a2 = ((race_mybesttime) ? bound(0, 2 - ((race_laptime + TIME_DECODE(race_mybesttime)) - (time + TIME_DECODE(race_penaltyaccumulator))), 1) : 0); + if(a > 0) // next one? + s = MakeRaceString(race_nextcheckpoint, (time + TIME_DECODE(race_penaltyaccumulator)) - race_laptime, TIME_DECODE(race_nextbesttime), ((a2 > 0) ? TIME_DECODE(race_mybesttime) : 0), 0, race_nextbestname); + } } } @@ -174,7 +200,8 @@ void HUD_RaceTimer () a = bound(0, 2 - (time - race_penaltyeventtime), 1); if(a > 0) { - s = sprintf(_("^1PENALTY: %.1f (%s)"), race_penaltytime * 0.1, race_penaltyreason); + s = sprintf(_("PENALTY: %.1f (%s)"), race_penaltytime * 0.1, race_penaltyreason); + s = strcat("^1", s); str_pos = pos + vec2(0.5 * (mySize.x - stringwidth(s, true, '1 1 0' * 0.2 * mySize.y)), 0.8 * mySize.y); drawcolorcodedstring(str_pos, s, '1 1 0' * 0.2 * mySize.y, panel_fg_alpha * a, DRAWFLAG_NORMAL); } @@ -205,14 +232,14 @@ void HUD_RaceTimer () if(race_mycheckpointtime) { a = bound(0, 2 - (time - race_mycheckpointtime), 1); - s = MakeRaceString(race_mycheckpoint, TIME_DECODE(race_mycheckpointdelta), -(race_mycheckpointenemy == ""), race_mycheckpointlapsdelta, race_mycheckpointenemy); + s = MakeRaceString(race_mycheckpoint, TIME_DECODE(race_mycheckpointdelta), -(race_mycheckpointenemy == ""), 0, race_mycheckpointlapsdelta, race_mycheckpointenemy); str_pos = pos + vec2(0.5 * (mySize.x - stringwidth(s, true, '1 1 0' * 0.2 * mySize.y)), 0.6 * mySize.y); drawcolorcodedstring(str_pos, s, '1 1 0' * 0.2 * mySize.y, panel_fg_alpha * a, DRAWFLAG_NORMAL); } if(race_othercheckpointtime && race_othercheckpointenemy != "") { a = bound(0, 2 - (time - race_othercheckpointtime), 1); - s = MakeRaceString(race_othercheckpoint, -TIME_DECODE(race_othercheckpointdelta), -(race_othercheckpointenemy == ""), race_othercheckpointlapsdelta, race_othercheckpointenemy); + s = MakeRaceString(race_othercheckpoint, -TIME_DECODE(race_othercheckpointdelta), -(race_othercheckpointenemy == ""), 0, race_othercheckpointlapsdelta, race_othercheckpointenemy); str_pos = pos + vec2(0.5 * (mySize.x - stringwidth(s, true, '1 1 0' * 0.2 * mySize.y)), 0.6 * mySize.y); drawcolorcodedstring(str_pos, s, '1 1 0' * 0.2 * mySize.y, panel_fg_alpha * a, DRAWFLAG_NORMAL); } @@ -223,10 +250,19 @@ void HUD_RaceTimer () a = bound(0, (1 + t - time), 1); if(a > 0) { + string col; if(time < t) - s = sprintf(_("^1PENALTY: %.1f (%s)"), (t - time) * 0.1, race_penaltyreason); + { + t = (t - time) * 0.1; + col = "^1"; + } else - s = sprintf(_("^2PENALTY: %.1f (%s)"), 0, race_penaltyreason); + { + t = 0; + col = "^2"; + } + s = sprintf(_("PENALTY: %.1f (%s)"), t, race_penaltyreason); + s = strcat(col, s); str_pos = pos + vec2(0.5 * (mySize.x - stringwidth(s, true, '1 1 0' * 0.2 * mySize.y)), 0.6 * mySize.y); drawcolorcodedstring(str_pos, s, '1 1 0' * 0.2 * mySize.y, panel_fg_alpha * a, DRAWFLAG_NORMAL); }