]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/client/hud/panel/timer.qc
Merge branch 'drjaska/mayhem' into z411/bai-server
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / panel / timer.qc
1 #include "timer.qh"
2
3 #include <client/draw.qh>
4 #include <client/view.qh>
5
6 // Timer (#5)
7
8 void HUD_Timer_Export(int fh)
9 {
10         // allow saving cvars that aesthetically change the panel into hud skin files
11 }
12
13 void HUD_Timer()
14 {
15         if(!autocvar__hud_configure)
16         {
17                 if(!autocvar_hud_panel_timer) return;
18         }
19
20         HUD_Panel_LoadCvars();
21
22         draw_beginBoldFont();
23
24         vector pos, mySize;
25         pos = panel_pos;
26         mySize = panel_size;
27
28         if (autocvar_hud_panel_timer_dynamichud)
29                 HUD_Scale_Enable();
30         else
31                 HUD_Scale_Disable();
32         HUD_Panel_DrawBg();
33         if(panel_bg_padding)
34         {
35                 pos += '1 1 0' * panel_bg_padding;
36                 mySize -= '2 2 0' * panel_bg_padding;
37         }
38
39         string timer_sub = "";
40         float timelimit, timeleft, minutesLeft, overtimes, timeout_last;
41
42         timelimit = STAT(TIMELIMIT);
43         overtimes = STAT(OVERTIMESADDED);
44         timeout_last = STAT(TIMEOUT_LAST);
45
46         timeleft = max(0, timelimit * 60 + STAT(GAMESTARTTIME) - time);
47         timeleft = ceil(timeleft);
48
49         minutesLeft = floor(timeleft / 60);
50
51         float warmup_timeleft = 0;
52         if(warmup_stage)
53         {
54                 float warmup_timelimit = STAT(WARMUP_TIMELIMIT);
55                 if(warmup_timelimit > 0)
56                         warmup_timeleft = max(0, warmup_timelimit - time);
57                 else if(warmup_timelimit == 0)
58                         warmup_timeleft = timeleft;
59                 warmup_timeleft = ceil(warmup_timeleft);
60         }
61
62         vector timer_color;
63         if(intermission_time || minutesLeft >= 5 || warmup_stage || timelimit == 0)
64                 timer_color = '1 1 1'; //white
65         else if(minutesLeft >= 1)
66                 timer_color = '1 1 0'; //yellow
67         else
68                 timer_color = '1 0 0'; //red
69
70         if (intermission_time) {
71                 timer = max(0, floor(intermission_time - STAT(GAMESTARTTIME)));
72                 timer_sub = "Intermission";
73         //} else if (autocvar_hud_panel_timer_increment || (!warmup_stage && timelimit == 0) || (warmup_stage && warmup_timeleft <= 0)) {
74         } else if (timeout_last) {
75                 if(autocvar_hud_panel_timer_increment)
76                         timer = max(0, floor(timeout_last - STAT(GAMESTARTTIME)));
77                 else
78                         timer = ceil(max(0, timelimit * 60 + STAT(GAMESTARTTIME) - timeout_last));
79                 timer_sub = "Timeout";
80         } else if (autocvar_hud_panel_timer_increment || timelimit == 0) {
81                 // Time elapsed timer
82                 if((warmup_stage && warmup_timeleft <= 0) || time < STAT(GAMESTARTTIME))
83                         timer = 0;
84                 else
85                         timer = floor(time - STAT(GAMESTARTTIME));
86         } else {
87                 // Time left timer
88                 if(warmup_stage) {
89                         if(warmup_timeleft <= 0)
90                                 timer = floor(timelimit * 60);
91                         else
92                                 timer = warmup_timeleft;
93                 } else {
94                         if (time < STAT(GAMESTARTTIME))
95                                 timer = floor(timelimit * 60);
96                         //else if (overtimes > 0)
97                         //      timer = floor(time - STAT(OVERTIMESTARTTIME));
98                         else
99                                 timer = timeleft;
100                 }
101         }
102         
103         if(warmup_stage)
104                 timer_sub = "Warmup";
105         else if(overtimes == 1)
106                 timer_sub = "Overtime";
107         else if (overtimes > 1)
108                 timer_sub = sprintf("Overtime #%d", overtimes);
109         
110         drawstring_aspect(pos, seconds_tostring(timer), mySize, timer_color, panel_fg_alpha, DRAWFLAG_NORMAL);
111         
112         if(timer_sub != "") {
113                 pos.y += mySize.y;
114                 mySize.y = mySize.y / 2;
115                 drawstring_aspect(pos, timer_sub, mySize, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL);
116         }
117
118         draw_endBoldFont();
119 }