X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Ftimer.qc;h=269d12b5edc800f9f2d50df6e7e70faad317bbb2;hb=d0b3cee6dc12e62e7db192356fe17614ad1e650d;hp=31468b15228da37dbd01c72f6980775d25dbaa76;hpb=dd714ffac6b09917fcff8a0f449ea4e347e01ec0;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud/panel/timer.qc b/qcsrc/client/hud/panel/timer.qc index 31468b152..269d12b5e 100644 --- a/qcsrc/client/hud/panel/timer.qc +++ b/qcsrc/client/hud/panel/timer.qc @@ -1,4 +1,5 @@ #include "timer.qh" +#include "scoreboard.qh" #include #include @@ -12,12 +13,12 @@ void HUD_Timer_Export(int fh) vector HUD_Timer_Color(float timeleft) { - if(timeleft >= 300) - return '1 1 1'; //white - else if(timeleft >= 60) - return '1 1 0'; //yellow + if(timeleft <= 60) + return '1 0 0'; // red + else if(timeleft <= 300) + return '1 1 0'; // yellow else - return '1 0 0'; //red + return '1 1 1'; // white } float HUD_Timer_TimeElapsed(float curtime, float starttime) @@ -61,8 +62,8 @@ void HUD_Timer() mySize -= '2 2 0' * panel_bg_padding; } - string timer; - string subtimer = string_null; + string timer_str = string_null; + string subtimer_str = string_null; string subtext = string_null; float curtime, timelimit, timeleft; vector timer_size, subtext_size, subtimer_size; @@ -72,16 +73,7 @@ void HUD_Timer() // Use real or frozen time and get the time limit curtime = (intermission_time ? intermission_time : time); - if(warmup_stage) - { - timelimit = STAT(WARMUP_TIMELIMIT); - if(timelimit == 0) - timelimit = STAT(TIMELIMIT) * 60; - } - else - { - timelimit = STAT(TIMELIMIT) * 60; - } + timelimit = (warmup_stage ? STAT(WARMUP_TIMELIMIT) : STAT(TIMELIMIT) * 60); // Calculate time left timeleft = HUD_Timer_TimeLeft(curtime, STAT(GAMESTARTTIME), timelimit); @@ -91,17 +83,17 @@ void HUD_Timer() timer_color = HUD_Timer_Color(timeleft); // Timer text - if (autocvar_hud_panel_timer_increment || timelimit == 0) - timer = seconds_tostring(HUD_Timer_TimeElapsed(curtime, STAT(GAMESTARTTIME))); + if (autocvar_hud_panel_timer_increment || timelimit <= 0) + timer = HUD_Timer_TimeElapsed(curtime, STAT(GAMESTARTTIME)); else - timer = seconds_tostring(timeleft); - + timer = timeleft; + // Secondary timer for round-based game modes if(STAT(ROUNDSTARTTIME) && autocvar_hud_panel_timer_secondary) { if(STAT(ROUNDSTARTTIME) == -1) { // Round can't start - subtimer = "--:--"; + subtimer_str = "--:--"; subtimer_color = '1 0 0'; } else { float round_curtime, round_timelimit, round_timeleft; @@ -119,9 +111,9 @@ void HUD_Timer() // Subtimer text if (autocvar_hud_panel_timer_increment || round_timelimit <= 0) - subtimer = seconds_tostring(HUD_Timer_TimeElapsed(round_curtime, STAT(ROUNDSTARTTIME))); + subtimer_str = seconds_tostring(HUD_Timer_TimeElapsed(round_curtime, STAT(ROUNDSTARTTIME))); else - subtimer = seconds_tostring(round_timeleft); + subtimer_str = seconds_tostring(round_timeleft); } } @@ -129,8 +121,19 @@ void HUD_Timer() int overtimes = STAT(OVERTIMES); if(warmup_stage || autocvar__hud_configure) - subtext = _("Warmup"); - else if(STAT(TIMEOUT_STATUS)) + { + if (STAT(WARMUP_TIMELIMIT) > 0) + subtext = _("Warmup"); + else + { + Scoreboard_UpdatePlayerTeams(); // ensure numplayers is current + if (srv_minplayers - numplayers > 0) + subtext = _("Warmup: too few players"); + else + subtext = _("Warmup: no time limit"); + } + } + else if(STAT(TIMEOUT_STATUS) == 2) subtext = _("Timeout"); else if (overtimes == -1) subtext = _("Sudden Death"); @@ -142,17 +145,19 @@ void HUD_Timer() 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); - + timer_str = seconds_tostring(timer); + panel_size.y -= subtext_size.y; HUD_Panel_DrawBg(); - - if(subtimer) { + + if(subtimer_str) { + float subtimer_padding = subtimer_size.y / 5; timer_size.x -= subtimer_size.x; - drawstring_aspect(pos + eX * timer_size.x, (swap ? timer : subtimer), subtimer_size, (swap ? timer_color : subtimer_color), panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eX * timer_size.x + eY * subtimer_padding, (swap ? timer_str : subtimer_str), subtimer_size - eY * subtimer_padding * 2, (swap ? timer_color : subtimer_color), panel_fg_alpha, DRAWFLAG_NORMAL); } - - drawstring_aspect(pos, (swap ? subtimer : timer), timer_size, (swap ? subtimer_color : timer_color), panel_fg_alpha, DRAWFLAG_NORMAL); - + + drawstring_aspect(pos, (swap ? subtimer_str : timer_str), timer_size, (swap ? subtimer_color : timer_color), panel_fg_alpha, DRAWFLAG_NORMAL); + if(subtext) drawstring_aspect(pos + eY * timer_size.y, subtext, subtext_size, '0 1 0', panel_fg_alpha, DRAWFLAG_NORMAL);