X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qc;h=a737c82d25cdfaab7b7992eda002ffd3f15523ed;hp=e918469416f3c6e2b6dfff38365a3f147bbbec71;hb=b9b4ab11d49bb80c9bfe495e563276061aa024a5;hpb=cd4733447ff43d2aa6141fb9b66f718f61d46fc5 diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index e918469416..a737c82d25 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -600,7 +600,7 @@ float GetAmmoTypeForWep(float i) case WEP_HLAC: return 3; case WEP_MINSTANEX: return 3; case WEP_NEX: return 3; - case WEP_SNIPERRIFLE: return 1; + case WEP_RIFLE: return 1; case WEP_HAGAR: return 2; case WEP_ROCKET_LAUNCHER: return 2; case WEP_SEEKER: return 2; @@ -1002,7 +1002,7 @@ void DrawAmmoItem(vector myPos, vector mySize, float itemcode, float currently_s drawpic_aspect_skin(myPos, "ammo_current_bg", mySize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); if(a > 0 && autocvar_hud_panel_ammo_progressbar) - HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, 0, 0, a/autocvar_hud_panel_ammo_maxammo, color, autocvar_hud_progressbar_alpha * panel_fg_alpha * alpha, DRAWFLAG_NORMAL); + HUD_Panel_DrawProgressBar(myPos + eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, mySize - eX * autocvar_hud_panel_ammo_progressbar_xoffset * mySize_x, autocvar_hud_panel_ammo_progressbar_name, a/autocvar_hud_panel_ammo_maxammo, 0, 0, color, autocvar_hud_progressbar_alpha * panel_fg_alpha * alpha, DRAWFLAG_NORMAL); if(autocvar_hud_panel_ammo_text) { @@ -1300,10 +1300,19 @@ void HUD_Powerups(void) // Health/armor (#3) // -float health_time, prev_health; -float armor_time, prev_armor; -var float saved_health = -2; -var float saved_armor = -2; + +// prev_* vars contain the health/armor at the previous FRAME +// set to -1 when player is dead or was not playing +float prev_health, prev_armor; +float health_damagetime, armor_damagetime; +float health_beforedamage, armor_beforedamage; +// old_p_* vars keep track of previous values when smoothing value changes of the progressbar +float old_p_health, old_p_armor; +float old_p_healthtime, old_p_armortime; +// prev_p_* vars contain the health/armor progressbar value at the previous FRAME +// set to -1 to forcedly stop effects when we switch spectated player (e.g. from playerX: 70h to playerY: 50h) +float prev_p_health, prev_p_armor; + void HUD_HealthArmor(void) { float armor, health, fuel; @@ -1315,36 +1324,36 @@ void HUD_HealthArmor(void) health = getstati(STAT_HEALTH); if(health <= 0) { - health_time = -1; + prev_health = -1; return; } - if (autocvar_hud_panel_healtharmor_progressbar_gfx) - { - if ( (prev_spectatee_status == -1 && spectatee_status > 0) //before observing, now spectating - || (prev_spectatee_status > 0 && spectatee_status > 0 && prev_spectatee_status != spectatee_status) //changed spectated player - ) - { - //no effect - saved_health = 0; - saved_armor = 0; - health_time = 0; - armor_time = 0; - } - else if(prev_spectatee_status == -1 || (prev_spectatee_status > 0 && !spectatee_status)) //before spectating/observing, now playing - health_time = -1; + armor = getstati(STAT_ARMOR); - if (health_time == -1) - { - //start the load effect - saved_health = -2; - saved_armor = -2; - health_time = time; - armor_time = time; - prev_health = 0; - prev_armor = 0; - } + // code to check for spectatee_status changes is in Ent_ClientData() + // prev_p_health and prev_health can be set to -1 there + + if (prev_p_health == -1) + { + // no effect + health_beforedamage = 0; + armor_beforedamage = 0; + health_damagetime = 0; + armor_damagetime = 0; + prev_health = health; + prev_armor = armor; + old_p_health = health; + old_p_armor = armor; + prev_p_health = health; + prev_p_armor = armor; + } + else if (prev_health == -1) + { + //start the load effect + health_damagetime = 0; + armor_damagetime = 0; + prev_health = 0; + prev_armor = 0; } - armor = getstati(STAT_ARMOR); fuel = getstati(STAT_FUEL); } else @@ -1467,34 +1476,39 @@ void HUD_HealthArmor(void) pain_health_alpha = 1; if (autocvar_hud_panel_healtharmor_progressbar_gfx) { - if (saved_health == -1) + if (autocvar_hud_panel_healtharmor_progressbar_gfx_smooth > 0) { - if (prev_health == 0 || prev_health - health >= 3) + if (fabs(prev_health - health) >= autocvar_hud_panel_healtharmor_progressbar_gfx_smooth) { - health_time = time; - saved_health = prev_health; + if (time - old_p_healthtime < 1) + old_p_health = prev_p_health; + else + old_p_health = prev_health; + old_p_healthtime = time; + } + if (time - old_p_healthtime < 1) + { + p_health += (old_p_health - health) * (1 - (time - old_p_healthtime)); + prev_p_health = p_health; } } - if (saved_health != -1) + if (autocvar_hud_panel_healtharmor_progressbar_gfx_damage > 0) { - float d = time - health_time; - if (d < 1) + if (prev_health - health >= autocvar_hud_panel_healtharmor_progressbar_gfx_damage) { - if (saved_health == -2) - p_health *= sqrt(d); - else - { - HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, saved_health/maxhealth, is_vertical, health_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * (1 - d * d), DRAWFLAG_NORMAL); - if (prev_health - health >= 1) //refresh the effect if repeatedly damaged - health_time = time; - } + if (time - health_damagetime >= 1) + health_beforedamage = prev_health; + health_damagetime = time; + } + if (time - health_damagetime < 1) + { + float health_damagealpha = 1 - (time - health_damagetime)*(time - health_damagetime); + HUD_Panel_DrawProgressBar(pos + health_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_health, health_beforedamage/maxhealth, is_vertical, health_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * health_damagealpha, DRAWFLAG_NORMAL); } - else - saved_health = -1; //damage effect ended } prev_health = health; - if (health <= 40 && saved_health != -2) + if (health <= autocvar_hud_panel_healtharmor_progressbar_gfx_lowhealth) { float BLINK_FACTOR = 0.15; float BLINK_BASE = 0.85; @@ -1517,30 +1531,35 @@ void HUD_HealthArmor(void) p_armor = armor; if (autocvar_hud_panel_healtharmor_progressbar_gfx) { - if (saved_armor == -1) + if (autocvar_hud_panel_healtharmor_progressbar_gfx_smooth > 0) { - if (prev_armor == 0 || prev_armor - armor >= 3) + if (fabs(prev_armor - armor) >= autocvar_hud_panel_healtharmor_progressbar_gfx_smooth) { - armor_time = time; - saved_armor = prev_armor; + if (time - old_p_armortime < 1) + old_p_armor = prev_p_armor; + else + old_p_armor = prev_armor; + old_p_armortime = time; + } + if (time - old_p_armortime < 1) + { + p_armor += (old_p_armor - armor) * (1 - (time - old_p_armortime)); + prev_p_armor = p_armor; } } - if (saved_armor != -1) + if (autocvar_hud_panel_healtharmor_progressbar_gfx_damage > 0) { - float d = time - armor_time; - if (d < 1) + if (prev_armor - armor >= autocvar_hud_panel_healtharmor_progressbar_gfx_damage) { - if (saved_armor == -2) - p_armor *= sqrt(d); - else - { - HUD_Panel_DrawProgressBar(pos + armor_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, saved_armor/maxarmor, is_vertical, armor_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * (1 - d * d), DRAWFLAG_NORMAL); - if (prev_armor - armor >= 1) //refresh the effect if repeatedly damaged - armor_time = time; - } + if (time - armor_damagetime >= 1) + armor_beforedamage = prev_armor; + armor_damagetime = time; + } + if (time - armor_damagetime < 1) + { + float armor_damagealpha = 1 - (time - armor_damagetime)*(time - armor_damagetime); + HUD_Panel_DrawProgressBar(pos + armor_offset, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, armor_beforedamage/maxarmor, is_vertical, armor_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * armor_damagealpha, DRAWFLAG_NORMAL); } - else - saved_armor = -1; //damage effect ended } prev_armor = armor; } @@ -1661,7 +1680,7 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s } else if(msg == MSG_KILL) { w = DEATH_WEAPONOF(type); if(WEP_VALID(w)) { - if((w == WEP_SNIPERRIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here + if((w == WEP_RIFLE || w == WEP_MINSTANEX) && type & HITTYPE_HEADSHOT) // all headshot weapons go here HUD_KillNotify_Push(s1, s2, 1, DEATH_HEADSHOT); else HUD_KillNotify_Push(s1, s2, 1, type); @@ -1831,7 +1850,7 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s print (sprintf(_("%s^7 is a ^1BERSERKER!\n"), s1)); } else if(type == KILL_SPREE_25) { if(gentle) - print (sprintf(_("%s^7 made ^1TWENTY FIFE SCORES IN A ROW!\n"), s1)); + print (sprintf(_("%s^7 made ^1TWENTY FIVE SCORES IN A ROW!\n"), s1)); else print (sprintf(_("%s^7 inflicts ^1CARNAGE!\n"), s1)); } else if(type == KILL_SPREE_30) { @@ -2015,9 +2034,9 @@ void HUD_Centerprint(string s1, string s2, float type, float msg) } else if(msg == MSG_KILL) { if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) { if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against %s, a team mate!"), s1))); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against ^7%s^1, a team mate!"), s1))); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged %s, a team mate!"), s1))); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged ^7%s^1, a team mate!"), s1))); } } else if (type == KILL_FIRST_BLOOD) { if(gentle) { @@ -2560,6 +2579,128 @@ void HUD_Radar(void) // Score (#7) // void HUD_UpdatePlayerTeams(); +void HUD_Score_Rankings(vector pos, vector mySize, entity me, float team_count) +{ + float score; + entity tm, pl; +#define SCOREPANEL_MAX_ENTRIES 6 +#define SCOREPANEL_ASPECTRATIO 2 + const float entries = bound(1, floor(SCOREPANEL_MAX_ENTRIES * mySize_y/mySize_x * SCOREPANEL_ASPECTRATIO), SCOREPANEL_MAX_ENTRIES); + const vector fontsize = '1 1 0' * (mySize_y/entries); + + vector rgb, score_color; + rgb = '1 1 1'; + score_color = '1 1 1'; + + const float name_size = mySize_x*0.75; + const float spacing_size = mySize_x*0.04; + const float highlight_alpha = 0.2; + float i, me_printed, first_pl; + string s; + i, first_pl = 0; + if (autocvar__hud_configure) + { + float players_per_team; + if (team_count) + { + // show team scores in the first line + float score_size = mySize_x / team_count; + players_per_team = max(2, ceil((entries - 1) / team_count)); + for(i=0; i 6) - { - iconpos = myPos; - iconsize = eX * 2 * mySize_y + eY * mySize_y; - - namepos = myPos + eX * 2 * mySize_y; - namesize = eX * mySize_x - eX * 2 * mySize_y + eY * mySize_y; - } - else - { - iconpos = myPos + eX * 0.5 * mySize_x - eX * 0.5 * mySize_y; - iconsize = eX * mySize_y + eY * 0.5 * mySize_y; - - namepos = myPos + eY * 0.5 * mySize_y; - namesize = eX * mySize_x + eY * 0.5 * mySize_y; - } - - if(shownames_health > 0) // otherwise player is an enemy - { - // "ghost" backgrounds - drawpic_aspect_skin(iconpos, "health", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL); - drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha * 0.5, DRAWFLAG_NORMAL); - - drawsetcliparea(0, myPos_y + iconsize_y - iconsize_y * min(1, shownames_health/autocvar_hud_panel_healtharmor_maxhealth), vid_conwidth, myPos_y + iconsize_y); - drawpic_aspect_skin(iconpos, "health", '1 1 0' * iconsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - - drawsetcliparea(0, myPos_y + iconsize_y - iconsize_y * min(1, shownames_armor/autocvar_hud_panel_healtharmor_maxarmor), vid_conwidth, myPos_y + iconsize_y); - drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor", '1 1 0' * iconsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawresetcliparea(); - } - else - { - drawpic_aspect_skin(iconpos, "health_unknown", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha, DRAWFLAG_NORMAL); - drawpic_aspect_skin(iconpos + '0.5 0 0' * iconsize_x, "armor_unknown", '1 1 0' * iconsize_y, '0 0 0', panel_fg_alpha, DRAWFLAG_NORMAL); - } - - if(autocvar__hud_configure) - drawcolorcodedstring_aspect(namepos, "Player1234", namesize, panel_fg_alpha, DRAWFLAG_NORMAL); - else - drawcolorcodedstring_aspect(namepos, shownames_netname, namesize, panel_fg_alpha, DRAWFLAG_NORMAL); -} - -// Physics panel (#16) +// Physics panel (#15) // vector acc_prevspeed; float acc_prevtime, acc_avg, top_speed, top_speed_time; @@ -4563,8 +4545,6 @@ switch (id) {\ HUD_InfoMessages(); break;\ case (HUD_PANEL_PHYSICS):\ HUD_Physics(); break;\ - case (HUD_PANEL_SHOWNAMES):\ - HUD_ShowNames(); break;\ } ENDS_WITH_CURLY_BRACE void HUD_Main (void) @@ -4580,7 +4560,18 @@ void HUD_Main (void) hud_fade_alpha = (1 - scoreboard_fade_alpha); if(intermission == 2) // no hud during mapvote + { + if (autocvar__hud_configure) //force exit from hud config + { + if (menu_enabled) + { + menu_enabled = 0; + localcmd("togglemenu\n"); + } + cvar_set("_hud_configure", "0"); + } hud_fade_alpha = 0; + } else if(autocvar__menu_alpha == 0 && scoreboard_fade_alpha == 0) hud_fade_alpha = 1;