3 #include <client/draw.qh>
4 #include <client/view.qh>
8 int autocvar_cl_timer_countdown = 3; // 0 = disabled, 1 = always on, 2 = only spec, 3 = as dictated by server
10 void HUD_Timer_Export(int fh)
12 // allow saving cvars that aesthetically change the panel into hud skin files
17 if(!autocvar__hud_configure)
19 if(!autocvar_hud_panel_timer) return;
22 HUD_Panel_LoadCvars();
30 if (autocvar_hud_panel_timer_dynamichud)
37 pos += '1 1 0' * panel_bg_padding;
38 mySize -= '2 2 0' * panel_bg_padding;
41 string timer_sub = "";
42 float timelimit, timeleft, minutesLeft, overtimes, timeout_last;
44 timelimit = STAT(TIMELIMIT);
45 overtimes = STAT(OVERTIMESADDED);
46 timeout_last = STAT(TIMEOUT_LAST);
48 timeleft = max(0, timelimit * 60 + STAT(GAMESTARTTIME) - time);
49 timeleft = min(timeleft, timelimit * 60);
50 timeleft = ceil(timeleft);
53 // if 3 use server dictated option, otherwise the client's
55 if(autocvar_cl_timer_countdown == 3)
56 countdown_type = sv_timer_countdown;
58 countdown_type = autocvar_cl_timer_countdown;
60 if(countdown_type && !warmup_stage && timeleft > 0 && timeleft != last_timeleft && timeleft <= 10)
62 if(countdown_type == 1 || (countdown_type == 2 && spectatee_status))
63 sound(NULL, CH_INFO, SND_ENDCOUNT, VOL_BASE, ATTN_NONE);
65 last_timeleft = timeleft;
68 minutesLeft = floor(timeleft / 60);
70 float warmup_timeleft = 0;
73 float warmup_timelimit = STAT(WARMUP_TIMELIMIT);
74 if(warmup_timelimit > 0)
75 warmup_timeleft = max(0, warmup_timelimit - time);
76 else if(warmup_timelimit == 0)
77 warmup_timeleft = timeleft;
78 warmup_timeleft = ceil(warmup_timeleft);
82 if(intermission_time || minutesLeft >= 5 || warmup_stage || timelimit == 0)
83 timer_color = '1 1 1'; //white
84 else if(minutesLeft >= 1)
85 timer_color = '1 1 0'; //yellow
87 timer_color = '1 0 0'; //red
89 if (intermission_time) {
90 timer = max(0, floor(intermission_time - STAT(GAMESTARTTIME)));
91 timer_sub = "Intermission";
92 //} else if (autocvar_hud_panel_timer_increment || (!warmup_stage && timelimit == 0) || (warmup_stage && warmup_timeleft <= 0)) {
93 } else if (timeout_last) {
94 if(autocvar_hud_panel_timer_increment)
95 timer = max(0, floor(timeout_last - STAT(GAMESTARTTIME)));
97 timer = ceil(max(0, timelimit * 60 + STAT(GAMESTARTTIME) - timeout_last));
98 timer_sub = "Timeout";
99 } else if (autocvar_hud_panel_timer_increment || timelimit == 0) {
100 // Time elapsed timer
101 if((warmup_stage && warmup_timeleft <= 0) || time < STAT(GAMESTARTTIME))
104 timer = floor(time - STAT(GAMESTARTTIME));
108 if(warmup_timeleft <= 0)
109 timer = floor(timelimit * 60);
111 timer = warmup_timeleft;
118 timer_sub = "Warmup";
119 else if(overtimes == 1)
120 timer_sub = "Overtime";
121 else if (overtimes > 1)
122 timer_sub = sprintf("Overtime #%d", overtimes);
124 drawstring_aspect(pos, seconds_tostring(timer), mySize, timer_color, panel_fg_alpha, DRAWFLAG_NORMAL);
126 if(timer_sub != "") {
128 mySize.y = mySize.y / 2;
129 drawstring_aspect(pos, timer_sub, mySize, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL);