3 #include <client/draw.qh>
4 #include <client/view.qh>
8 bool autocvar_hud_panel_timer_count = true;
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 = bound(0, timelimit * 60 + STAT(GAMESTARTTIME) - time, timelimit * 60);
49 timeleft = ceil(timeleft);
52 if(autocvar_hud_panel_timer_count && timeleft > 0 && timeleft != last_timeleft && timeleft <= 10)
54 sound(NULL, CH_INFO, SND_ENDCOUNT, VOL_BASE, ATTN_NONE);
55 last_timeleft = timeleft;
58 minutesLeft = floor(timeleft / 60);
60 float warmup_timeleft = 0;
63 float warmup_timelimit = STAT(WARMUP_TIMELIMIT);
64 if(warmup_timelimit > 0)
65 warmup_timeleft = max(0, warmup_timelimit - time + STAT(GAMESTARTTIME));
66 else if(warmup_timelimit == 0)
67 warmup_timeleft = timeleft;
68 warmup_timeleft = ceil(warmup_timeleft);
72 if(intermission_time || minutesLeft >= 5 || warmup_stage || timelimit == 0)
73 timer_color = '1 1 1'; //white
74 else if(minutesLeft >= 1)
75 timer_color = '1 1 0'; //yellow
77 timer_color = '1 0 0'; //red
79 if (intermission_time) {
80 timer = max(0, floor(intermission_time - STAT(GAMESTARTTIME)));
81 timer_sub = "Intermission";
82 //} else if (autocvar_hud_panel_timer_increment || (!warmup_stage && timelimit == 0) || (warmup_stage && warmup_timeleft <= 0)) {
83 } else if (timeout_last) {
84 if(autocvar_hud_panel_timer_increment)
85 timer = max(0, floor(timeout_last - STAT(GAMESTARTTIME)));
87 timer = ceil(max(0, timelimit * 60 + STAT(GAMESTARTTIME) - timeout_last));
88 timer_sub = "Timeout";
89 } else if (autocvar_hud_panel_timer_increment || timelimit == 0) {
91 if((warmup_stage && warmup_timeleft <= 0) || time < STAT(GAMESTARTTIME))
94 timer = floor(time - STAT(GAMESTARTTIME));
98 if(warmup_timeleft <= 0)
99 timer = floor(timelimit * 60);
101 timer = warmup_timeleft;
103 if (time < STAT(GAMESTARTTIME))
104 timer = floor(timelimit * 60);
105 //else if (overtimes > 0)
106 // timer = floor(time - STAT(OVERTIMESTARTTIME));
113 timer_sub = "Warmup";
114 else if(overtimes == 1)
115 timer_sub = "Overtime";
116 else if (overtimes > 1)
117 timer_sub = sprintf("Overtime #%d", overtimes);
119 drawstring_aspect(pos, seconds_tostring(timer), mySize, timer_color, panel_fg_alpha, DRAWFLAG_NORMAL);
121 if(timer_sub != "") {
123 mySize.y = mySize.y / 2;
124 drawstring_aspect(pos, timer_sub, mySize, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL);