X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud%2Fpanel%2Fhealtharmor.qc;h=d6bf99fd60494d31670feee9dff583e02920c0cb;hp=4c08ef900f02283ddd9fe24ca545f59334ffa31f;hb=e860f4fc6e3c8cb1ef89eb47fa205c6ff4018c47;hpb=fdbfb6f9364d8aeae67e108400a6bd1dd37dc0b7 diff --git a/qcsrc/client/hud/panel/healtharmor.qc b/qcsrc/client/hud/panel/healtharmor.qc index 4c08ef900..d6bf99fd6 100644 --- a/qcsrc/client/hud/panel/healtharmor.qc +++ b/qcsrc/client/hud/panel/healtharmor.qc @@ -7,9 +7,24 @@ // Health/armor (#3) +void HUD_HealthArmor_Export(int fh) +{ + // allow saving cvars that aesthetically change the panel into hud skin files + HUD_Write_Cvar("hud_panel_healtharmor_combined"); + HUD_Write_Cvar("hud_panel_healtharmor_flip"); + HUD_Write_Cvar("hud_panel_healtharmor_iconalign"); + HUD_Write_Cvar("hud_panel_healtharmor_baralign"); + HUD_Write_Cvar("hud_panel_healtharmor_progressbar"); + HUD_Write_Cvar("hud_panel_healtharmor_progressbar_health"); + HUD_Write_Cvar("hud_panel_healtharmor_progressbar_armor"); + HUD_Write_Cvar("hud_panel_healtharmor_progressbar_gfx"); + HUD_Write_Cvar("hud_panel_healtharmor_progressbar_gfx_smooth"); + HUD_Write_Cvar("hud_panel_healtharmor_text"); +} + void HUD_HealthArmor() { - int armor, health, fuel; + int armor, health, fuel, air_time; if(!autocvar__hud_configure) { if((!autocvar_hud_panel_healtharmor) || (spectatee_status == -1)) @@ -52,12 +67,14 @@ void HUD_HealthArmor() prev_armor = 0; } fuel = STAT(FUEL); + air_time = bound(0, STAT(AIR_FINISHED) - time, 10); } else { health = 150; armor = 75; fuel = 20; + air_time = 6; } HUD_Panel_LoadCvars(); @@ -79,6 +96,13 @@ void HUD_HealthArmor() mySize -= '2 2 0' * panel_bg_padding; } + float air_alpha = 1; + if (STAT(AIR_FINISHED) && time > STAT(AIR_FINISHED)) + { + air_alpha = blink_synced(0.5, 0.5, 7, STAT(AIR_FINISHED), -1); + air_time = 10; + } + int baralign = autocvar_hud_panel_healtharmor_baralign; int iconalign = autocvar_hud_panel_healtharmor_iconalign; @@ -86,9 +110,7 @@ void HUD_HealthArmor() int maxarmor = autocvar_hud_panel_healtharmor_maxarmor; if(autocvar_hud_panel_healtharmor_combined) // combined health and armor display { - vector v; - v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON.m_id); - + vector v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON.m_id); float hp = floor(v.x + 1); float maxtotal = maxhealth + maxarmor; @@ -110,10 +132,12 @@ void HUD_HealthArmor() drawpic_aspect_skin(pos + eX * mySize.x - eX * 0.5 * mySize.y, "health", '0.5 0.5 0' * mySize.y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); } if(autocvar_hud_panel_healtharmor_text) - DrawNumIcon(pos, mySize, hp, biggercount, 0, iconalign, HUD_Get_Num_Color(hp, maxtotal), 1); + DrawNumIcon(pos, mySize, hp, biggercount, 0, iconalign, HUD_Get_Num_Color(hp, maxtotal, true), 1); if(fuel) HUD_Panel_DrawProgressBar(pos, vec2(mySize.x, 0.2 * mySize.y), "progressbar", fuel/100, 0, (baralign == 1 || baralign == 3), autocvar_hud_progressbar_fuel_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL); + if(air_time) + HUD_Panel_DrawProgressBar(pos + eY * 0.8 * mySize.y, vec2(mySize.x, 0.2 * mySize.y), "progressbar", air_time / 10, 0, (baralign == 1 || baralign == 3), autocvar_hud_progressbar_oxygen_color, air_alpha * panel_fg_alpha * 0.8, DRAWFLAG_NORMAL); } else { @@ -137,13 +161,13 @@ void HUD_HealthArmor() armor_offset.y = mySize.y; } - bool health_baralign, armor_baralign, fuel_baralign; + bool health_baralign, armor_baralign, fuel_baralign, air_align; bool health_iconalign, armor_iconalign; if (autocvar_hud_panel_healtharmor_flip) { armor_baralign = (autocvar_hud_panel_healtharmor_baralign == 2 || autocvar_hud_panel_healtharmor_baralign == 1); health_baralign = (autocvar_hud_panel_healtharmor_baralign == 3 || autocvar_hud_panel_healtharmor_baralign == 1); - fuel_baralign = health_baralign; + air_align = fuel_baralign = health_baralign; armor_iconalign = (autocvar_hud_panel_healtharmor_iconalign == 2 || autocvar_hud_panel_healtharmor_iconalign == 1); health_iconalign = (autocvar_hud_panel_healtharmor_iconalign == 3 || autocvar_hud_panel_healtharmor_iconalign == 1); } @@ -151,7 +175,7 @@ void HUD_HealthArmor() { health_baralign = (autocvar_hud_panel_healtharmor_baralign == 2 || autocvar_hud_panel_healtharmor_baralign == 1); armor_baralign = (autocvar_hud_panel_healtharmor_baralign == 3 || autocvar_hud_panel_healtharmor_baralign == 1); - fuel_baralign = armor_baralign; + air_align = fuel_baralign = armor_baralign; health_iconalign = (autocvar_hud_panel_healtharmor_iconalign == 2 || autocvar_hud_panel_healtharmor_iconalign == 1); armor_iconalign = (autocvar_hud_panel_healtharmor_iconalign == 3 || autocvar_hud_panel_healtharmor_iconalign == 1); } @@ -199,16 +223,13 @@ void HUD_HealthArmor() if (health <= autocvar_hud_panel_healtharmor_progressbar_gfx_lowhealth) { - float BLINK_FACTOR = 0.15; - float BLINK_BASE = 0.85; - float BLINK_FREQ = 9; - pain_health_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ); + pain_health_alpha = blink(0.85, 0.15, 9); } } HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, p_health/maxhealth, is_vertical, health_baralign, autocvar_hud_progressbar_health_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * pain_health_alpha, DRAWFLAG_NORMAL); } if(autocvar_hud_panel_healtharmor_text) - DrawNumIcon(pos + health_offset, mySize, health, "health", is_vertical, health_iconalign, HUD_Get_Num_Color(health, maxhealth), 1); + DrawNumIcon(pos + health_offset, mySize, health, "health", is_vertical, health_iconalign, HUD_Get_Num_Color(health, maxhealth, true), 1); } //if(armor) @@ -255,10 +276,11 @@ void HUD_HealthArmor() } if(!autocvar_hud_panel_healtharmor_progressbar || p_armor) if(autocvar_hud_panel_healtharmor_text) - DrawNumIcon(pos + armor_offset, mySize, armor, "armor", is_vertical, armor_iconalign, HUD_Get_Num_Color(armor, maxarmor), 1); + DrawNumIcon(pos + armor_offset, mySize, armor, "armor", is_vertical, armor_iconalign, HUD_Get_Num_Color(armor, maxarmor, true), 1); } - if(fuel) + vector cell_size = mySize; + if (fuel || air_time) { if (is_vertical) mySize.x *= 0.2 / 2; //if vertical always halve x to not cover too much numbers with 3 digits @@ -268,7 +290,20 @@ void HUD_HealthArmor() mySize.x *= 2; //restore full panel size else if (panel_ar < 1/4) mySize.y *= 2; //restore full panel size - HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", fuel/100, is_vertical, fuel_baralign, autocvar_hud_progressbar_fuel_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL); + if (fuel) + HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", fuel/100, is_vertical, fuel_baralign, autocvar_hud_progressbar_fuel_color, panel_fg_alpha * 0.8, DRAWFLAG_NORMAL); + if (air_time) + { + if (panel_ar > 1 && panel_ar < 4) + pos.y += cell_size.y; + else if (panel_ar > 1/4 && panel_ar <= 1) + pos.x += cell_size.x; + if (is_vertical) + pos.x += cell_size.x - mySize.x; + else + pos.y += cell_size.y - mySize.y; + HUD_Panel_DrawProgressBar(pos, mySize, "progressbar", air_time / 10, is_vertical, air_align, autocvar_hud_progressbar_oxygen_color, air_alpha * panel_fg_alpha * 0.8, DRAWFLAG_NORMAL); + } } }