24{
25 static float health_damagetime, armor_damagetime;
26 static int health_beforedamage, armor_beforedamage;
27
28 static int old_p_health, old_p_armor;
29 static float old_p_healthtime, old_p_armortime;
30
31 int health, armor, fuel, air_time, p_health, p_armor;
33 {
35 return;
37 return;
38
39
45 {
49 should_draw = false;
50 }
51
52
53
55 {
56
57 health_beforedamage = 0;
58 armor_beforedamage = 0;
59 health_damagetime = 0;
60 armor_damagetime = 0;
64 old_p_armor = armor;
67 }
69 {
70
71 health_damagetime = 0;
72 armor_damagetime = 0;
75 }
76
77
79 p_armor = armor;
81 {
83 {
84 #define HEALTHARMOR_GFX_SMOOTH(stat) \
85 if (fabs(prev_##stat - stat) >= autocvar_hud_panel_healtharmor_progressbar_gfx_smooth) \
86 { \
87 if (time - old_p_##stat##time < 1) \
88 old_p_##stat = prev_p_##stat; \
89 else \
90 old_p_##stat = prev_##stat; \
91 old_p_##stat##time = time; \
92 } \
93 if (time - old_p_##stat##time < 1) \
94 { \
95 p_##stat += (old_p_##stat - stat) * (1 - (time - old_p_##stat##time)); \
96 prev_p_##stat = p_##stat; \
97 }
100 #undef HEALTHARMOR_GFX_SMOOTH
101 }
103 {
104 #define HEALTHARMOR_GFX_DAMAGE(stat) \
105 if (prev_##stat - stat >= autocvar_hud_panel_healtharmor_progressbar_gfx_damage) \
106 { \
107 if (time - stat##_damagetime >= 1) \
108 stat##_beforedamage = prev_##stat; \
109 stat##_damagetime = time; \
110 }
113 #undef HEALTHARMOR_GFX_DAMAGE
114 }
117 }
118
119 if (!should_draw)
120 return;
121 }
122 else
123 {
124 if (!should_draw)
125 return;
126
128 p_armor = armor = 75;
129 fuel = 20;
130 air_time = 6;
131 }
132
134
136
139
142 else
146 {
149 }
150
151 float air_alpha;
152 if (!
STAT(AIR_FINISHED))
153 air_alpha = 0;
155 {
157 air_time = 10;
158 }
159 else
160 {
164 air_alpha =
bound(0, start_alpha + (1 - start_alpha) * (1 - f), 1);
165 }
166
167 float fuel_alpha;
168 if (!fuel)
169 fuel_alpha = 0;
170 else
171 {
173 float f = (100 - fuel) / 50;
174 fuel_alpha =
bound(0, start_alpha + (1 - start_alpha) * f, 1);
175 }
176
179
183 {
185 float hp =
floor(v.x + 1);
186
187 float maxtotal = maxhealth + maxarmor;
188 string biggercount;
189 if (v.z)
190 {
191 biggercount = "health";
196 }
197 else
198 {
199 biggercount = "armor";
204 }
206 DrawNumIcon(pos, mySize, hp, biggercount,
false,
false, iconalign,
HUD_Get_Num_Color(hp, maxtotal,
true), 1);
207
208 if (fuel)
210 if (air_time)
212 }
213 else
214 {
215 float panel_ar = mySize.x / mySize.y;
216 bool is_vertical = panel_ar < 1;
217 vector health_offset =
'0 0 0', armor_offset =
'0 0 0';
218 if (panel_ar >= 4 || (panel_ar >= 1/4 && panel_ar < 1))
219 {
220 mySize.x *= 0.5;
222 health_offset.x = mySize.x;
223 else
224 armor_offset.x = mySize.x;
225 }
226 else
227 {
228 mySize.y *= 0.5;
230 health_offset.y = mySize.y;
231 else
232 armor_offset.y = mySize.y;
233 }
234
235 bool health_baralign, armor_baralign, fuel_baralign, air_align;
236 bool health_iconalign, armor_iconalign;
238 {
241 air_align = fuel_baralign = health_baralign;
244 }
245 else
246 {
249 air_align = fuel_baralign = armor_baralign;
252 }
253
254
255 {
257 {
258 float pain_health_alpha = 1;
260 {
262 &&
time - health_damagetime < 1)
263 {
264 float health_damagealpha = 1 - (
time - health_damagetime) * (
time - health_damagetime);
266 }
268 pain_health_alpha =
blink(0.85, 0.15, 9);
269 }
271 }
273 DrawNumIcon(pos + health_offset, mySize,
health,
"health", is_vertical,
false, health_iconalign,
HUD_Get_Num_Color(
health, maxhealth,
true), 1);
274 }
275
276
277 {
279 {
281 {
283 &&
time - armor_damagetime < 1)
284 {
285 float armor_damagealpha = 1 - (
time - armor_damagetime) * (
time - armor_damagetime);
287 }
288 }
289 if (p_armor)
291 }
293 DrawNumIcon(pos + armor_offset, mySize, armor,
"armor", is_vertical,
false, armor_iconalign,
HUD_Get_Num_Color(armor, maxarmor,
true), 1);
294 }
295
296 vector cell_size = mySize;
297 if (fuel || air_time)
298 {
299 if (is_vertical)
300 mySize.x *= 0.2 / 2;
301 else
302 mySize.y *= 0.2;
303 if (panel_ar >= 4)
304 mySize.x *= 2;
305 else if (panel_ar < 1/4)
306 mySize.y *= 2;
307 if (fuel)
309 if (air_time)
310 {
311 if (panel_ar > 1 && panel_ar < 4)
312 pos.y += cell_size.y;
313 else if (panel_ar > 1/4 && panel_ar <= 1)
314 pos.x += cell_size.x;
315 if (is_vertical)
316 pos.x += cell_size.x - mySize.x;
317 else
318 pos.y += cell_size.y - mySize.y;
320 }
321 }
322 }
323
325}
#define drawpic_aspect_skin(pos, pic, sz, color, theAlpha, drawflag)
#define draw_beginBoldFont()
#define draw_endBoldFont()
int spectatee_status
the -1 disables HUD panels before CSQC receives necessary data
vector healtharmor_maxdamage(float h, float a, float armorblock, int deathtype)
ERASEABLE float blink_synced(float base, float range, float freq, float start_time, int start_pos)
ERASEABLE float blink(float base, float range, float freq)
const float DRAWFLAG_NORMAL
#define HEALTHARMOR_GFX_DAMAGE(stat)
#define HEALTHARMOR_GFX_SMOOTH(stat)
int autocvar_hud_panel_healtharmor_iconalign
bool autocvar_hud_panel_healtharmor_hide_ondeath
bool autocvar_hud_panel_healtharmor
int autocvar_hud_panel_healtharmor_baralign
vector autocvar_hud_progressbar_oxygen_color
float autocvar_hud_panel_healtharmor_fuelbar_startalpha
bool autocvar_hud_panel_healtharmor_progressbar_gfx
vector autocvar_hud_progressbar_fuel_color
bool autocvar_hud_panel_healtharmor_dynamichud
bool autocvar_hud_panel_healtharmor_flip
bool autocvar_hud_panel_healtharmor_progressbar
string autocvar_hud_panel_healtharmor_progressbar_health
float autocvar_hud_panel_healtharmor_oxygenbar_startalpha
float autocvar_hud_panel_healtharmor_progressbar_gfx_lowhealth
int autocvar_hud_panel_healtharmor_text
vector autocvar_hud_progressbar_armor_color
int autocvar_hud_panel_healtharmor_maxhealth
vector autocvar_hud_progressbar_health_color
int autocvar_hud_panel_healtharmor_maxarmor
string autocvar_hud_panel_healtharmor_progressbar_armor
bool autocvar_hud_panel_healtharmor_combined
void HUD_Panel_DrawProgressBar(vector theOrigin, vector theSize, string pic, float length_ratio, bool vertical, float baralign, vector theColor, float theAlpha, int drawflag)
void HUD_Panel_LoadCvars()
void DrawNumIcon(vector myPos, vector mySize, float theTime, string icon, bool vertical, bool isInfinite, int icon_right_align, vector color, float theAlpha)
vector HUD_Get_Num_Color(float hp, float maxvalue, bool blink)
float autocvar_hud_progressbar_alpha
#define HUD_Panel_DrawBg()
bool autocvar__hud_configure
float health
Legacy fields for the resources. To be removed.