From: z411 Date: Wed, 9 Feb 2022 19:54:41 +0000 (-0300) Subject: Merge branch 'master' into z411/new_timer X-Git-Tag: xonotic-v0.8.5~177^2~20 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=d9e5eb80f2249a018ad83c8444d591b33d8e2eed;p=xonotic%2Fxonotic-data.pk3dir.git Merge branch 'master' into z411/new_timer --- d9e5eb80f2249a018ad83c8444d591b33d8e2eed diff --cc qcsrc/client/hud/panel/timer.qc index b03165660,f70e5a280..87eff1fa0 --- a/qcsrc/client/hud/panel/timer.qc +++ b/qcsrc/client/hud/panel/timer.qc @@@ -35,97 -36,60 +35,107 @@@ void HUD_Timer( mySize -= '2 2 0' * panel_bg_padding; } - string timer; - float timelimit, timeleft, minutesLeft; - - timelimit = STAT(TIMELIMIT); - - if (autocvar_hud_panel_timer_unbound){ - timeleft = max(0, timelimit * 60 + STAT(GAMESTARTTIME) - time); - } else { - timeleft = bound(0, timelimit * 60 + STAT(GAMESTARTTIME) - time, timelimit * 60); - } - timeleft = ceil(timeleft); - - minutesLeft = floor(timeleft / 60); + string timer, subtimer, subtext; + float timelimit, timeleft, overtimes; + float round_timelimit, round_timeleft; - float warmup_timeleft = 0; + // Calculate timelimit if(warmup_stage) { - float warmup_timelimit = STAT(WARMUP_TIMELIMIT); - if(warmup_timelimit > 0) - warmup_timeleft = max(0, warmup_timelimit - time + STAT(GAMESTARTTIME)); - else if(warmup_timelimit == 0) - warmup_timeleft = timeleft; - warmup_timeleft = ceil(warmup_timeleft); + timelimit = STAT(WARMUP_TIMELIMIT); + if(timelimit == 0) + timelimit = STAT(TIMELIMIT) * 60; + } + else + { + timelimit = STAT(TIMELIMIT) * 60; } - + + // Calculate time left - timeleft = bound(0, timelimit + STAT(GAMESTARTTIME) - time, timelimit); ++ timeleft = timelimit + STAT(GAMESTARTTIME) - time; ++ if (!autocvar_hud_panel_timer_unbound) ++ timeleft = bound(0, timeleft, timelimit); + timeleft = ceil(timeleft); + + // Timer color vector timer_color; - if(intermission_time || minutesLeft >= 5 || warmup_stage || timelimit == 0) + if(intermission_time || timeleft >= 300 || warmup_stage || timelimit <= 0) timer_color = '1 1 1'; //white - else if(minutesLeft >= 1) + else if(timeleft >= 60) timer_color = '1 1 0'; //yellow else timer_color = '1 0 0'; //red + // Timer text if (intermission_time) { timer = seconds_tostring(max(0, floor(intermission_time - STAT(GAMESTARTTIME)))); - } else if (warmup_stage && warmup_timeleft >= 60) { - timer = _("WARMUP"); - } else if (autocvar_hud_panel_timer_increment || (!warmup_stage && timelimit == 0) || (warmup_stage && warmup_timeleft <= 0)) { - if (time < STAT(GAMESTARTTIME)) - if (autocvar_hud_panel_timer_unbound){ - timer = seconds_tostring(-(STAT(GAMESTARTTIME) - time)); - } else { - timer = seconds_tostring(0); //while restart is still active, show 00:00 - } - else - timer = seconds_tostring(floor(time - STAT(GAMESTARTTIME))); + } else if (autocvar_hud_panel_timer_increment || timelimit <= 0) { + float time_elapsed = floor(time - STAT(GAMESTARTTIME)); - timer = seconds_tostring(max(0, time_elapsed)); ++ if (!autocvar_hud_panel_timer_unbound) ++ time_elapsed = max(0, time_elapsed); ++ ++ timer = seconds_tostring(time_elapsed); } else { - if(warmup_stage) - timer = seconds_tostring(warmup_timeleft); - else - timer = seconds_tostring(timeleft); + timer = seconds_tostring(timeleft); } - - drawstring_aspect(pos, timer, mySize, timer_color, panel_fg_alpha, DRAWFLAG_NORMAL); + + // Subtimer text + if(STAT(ROUNDSTARTTIME)) + { + round_timelimit = STAT(ROUND_TIMELIMIT); + + if (autocvar_hud_panel_timer_increment || round_timelimit <= 0) { + float round_time_elapsed = floor(time - STAT(ROUNDSTARTTIME)); - subtimer = seconds_tostring(max(0, round_time_elapsed)); ++ if (!autocvar_hud_panel_timer_unbound) ++ round_time_elapsed = max(0, round_time_elapsed); ++ ++ subtimer = seconds_tostring(round_time_elapsed); + } else { - round_timeleft = bound(0, round_timelimit + STAT(ROUNDSTARTTIME) - time, round_timelimit); ++ round_timeleft = round_timelimit + STAT(ROUNDSTARTTIME) - time; ++ if (!autocvar_hud_panel_timer_unbound) ++ round_timeleft = bound(0, round_timeleft, round_timelimit); + round_timeleft = ceil(round_timeleft); + + subtimer = seconds_tostring(round_timeleft); + } + } + else + subtimer = string_null; + + // Subtext + overtimes = STAT(OVERTIMESADDED); + + if(warmup_stage || autocvar__hud_configure) + subtext = _("Warmup"); + else if(intermission_time) + subtext = _("Intermission"); + else if(STAT(TIMEOUT_STATUS)) + subtext = _("Timeout"); + else if (overtimes >= 2) + subtext = sprintf(_("Overtime #%d"), overtimes); + else if(overtimes) + subtext = _("Overtime"); + else + subtext = string_null; + + vector timer_size, subtext_size, subtimer_size; + + subtext_size = vec2(mySize.x, mySize.y / 3); + timer_size = vec2(mySize.x, mySize.y - subtext_size.y); + subtimer_size = vec2(mySize.x / 3, mySize.y - subtext_size.y); + + panel_size.y -= subtext_size.y; + HUD_Panel_DrawBg(); + + if(subtimer) { + timer_size.x -= subtimer_size.x; + drawstring_aspect(pos + eX * timer_size.x, subtimer, subtimer_size, '1 1 0', panel_fg_alpha, DRAWFLAG_NORMAL); + } + + drawstring_aspect(pos, timer, timer_size, timer_color, panel_fg_alpha, DRAWFLAG_NORMAL); + + if(subtext) + drawstring_aspect(pos + eY * timer_size.y, subtext, subtext_size, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL); draw_endBoldFont(); }