From: terencehill Date: Thu, 14 Oct 2010 22:40:40 +0000 (+0200) Subject: Merge branch 'master' into terencehill/newpanelhud X-Git-Tag: xonotic-v0.1.0preview~267^2~10 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=1d3adc69b6b41927e8a338d02451695128388efc;hp=13ef1ff574dfa739e5c768d5dabaeed6dce7ad17 Merge branch 'master' into terencehill/newpanelhud Conflicts: defaultXonotic.cfg --- diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 97f94e02b2..15f9419fa7 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -1403,11 +1403,11 @@ seta scoreboard_columns default seta scoreboard_border_thickness 1 "scoreboard border thickness" seta scoreboard_accuracy_border_thickness 1 "accuracy stats border thickness" seta scoreboard_accuracy_doublerows 0 "use two rows instead of one" -seta scoreboard_accuracy 1 "0 = no weapon accuracy stats panel on scoreboard" -seta scoreboard_color_bg_r 0 "red color component of the HUD background" -seta scoreboard_color_bg_g 0.4 "green color component of the HUD background" -seta scoreboard_color_bg_b 0.6 "blue color component of the HUD background" -seta scoreboard_color_bg_team 0.5 "team color multiplier of the HUD background" +seta scoreboard_accuracy 1 "show weapon accuracy stats panel on scoreboard" +seta scoreboard_color_bg_r 0 "red color component of the scoreboard background" +seta scoreboard_color_bg_g 0.4 "green color component of the scoreboard background" +seta scoreboard_color_bg_b 0.6 "blue color component of the scoreboard background" +seta scoreboard_color_bg_team 0.5 "team color multiplier of the scoreboard background" seta scoreboard_alpha_bg 0.6 "scoreboard background alpha" seta scoreboard_alpha_fg 1 "scoreboard foreground alpha" seta scoreboard_alpha_name 0.9 "alpha of player text in scoreboard list other than self" @@ -1545,7 +1545,6 @@ set capturelimit 0 // hud: font size seta hud_fontsize 11 -seta hud_fontsize_spec 16 seta scr_centersize 12 seta hud_width 560 // alias hud_font "loadfont user1 ${1},gfx/fallback ${2-}; loadfont user2 ${1}-big ${2-}; scoreboard_columns_set" diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 5f422a03eb..b57ef2ca17 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -338,7 +338,7 @@ void CSQC_common_hud(void); void PostInit(void); void CSQC_Demo_Camera(); -float HUD_WouldDrawScoreboard (); +float HUD_WouldDrawScoreboard(); float view_set; float camera_mode; float reticle_type; @@ -468,7 +468,6 @@ void CSQC_UpdateView(float w, float h) } } - hud_accuracy_hud = cvar_or("hud_accuracy_hud", 1); ColorTranslateMode = cvar("cl_stripcolorcodes"); activeweapon = getstati(STAT_SWITCHWEAPON); f = cvar("teamplay"); @@ -534,8 +533,6 @@ void CSQC_UpdateView(float w, float h) } // Draw the Crosshair - float scoreboard_active; - scoreboard_active = HUD_WouldDrawScoreboard(); R_SetView(VF_DRAWCROSSHAIR, 0); //Make sure engine crosshairs are always hidden // Draw the Engine Status Bar (the default Quake HUD) @@ -683,12 +680,12 @@ void CSQC_UpdateView(float w, float h) self.draw2d(); self = e; + scoreboard_active = HUD_WouldDrawScoreboard(); + float hud; hud = getstati(STAT_HUD); if(hud == HUD_SPIDERBOT) - { CSQC_SPIDER_HUD(); - } else if(hud == HUD_WAKIZASHI) CSQC_WAKIZASHI_HUD(); else if(hud == HUD_RAPTOR) @@ -1274,9 +1271,11 @@ void CSQC_common_hud(void) case HUD_NORMAL: // do some accuracy var caching float i; + if(cvar_string("hud_panel_weapons_accuracy_color_levels") != acc_color_levels) if(!(gametype == GAME_RACE || gametype == GAME_CTS)) { - acc_levels = tokenize(cvar_string("hud_panel_weapons_accuracy_color_levels")); + acc_color_levels = cvar_string("hud_panel_weapons_accuracy_color_levels"); + acc_levels = tokenize(acc_color_levels); if (acc_levels > MAX_ACCURACY_LEVELS) acc_levels = MAX_ACCURACY_LEVELS; @@ -1287,7 +1286,7 @@ void CSQC_common_hud(void) HUD_Main(); // always run these functions for alpha checks HUD_DrawScoreboard(); - if (scoreboard_showscores || scoreboard_showscores_force || getstati(STAT_HEALTH) <= 0 || intermission == 1) // scoreboard/accuracy + if (scoreboard_active) // scoreboard/accuracy { HUD_Reset(); // HUD_DrawScoreboard takes care of centerprint_start diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 69459256f0..7d5d98f5ec 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -284,10 +284,9 @@ void HUD_DrawCenterPrint (void) sz = 0.8 + (a / 5); - if(centerprint_num * cvar("scr_centersize") > 24 && HUD_WouldDrawScoreboard()) // 24 = height of Scoreboard text - { + if(centerprint_num * cvar("scr_centersize") > 24 && scoreboard_active) // 24 = height of Scoreboard text centerprint_start_y = scoreboard_bottom + centerprint_fontsize_y; - } + pos = centerprint_start; for (i=0; i= 0) { // don't reset these variables in disable_menu_alphacheck mode 2! highlightedPanel = -1; highlightedAction = 0; @@ -1658,6 +1660,10 @@ void HUD_Weapons(void) vector wpnpos; vector wpnsize; + float show_accuracy; + if(autocvar_hud_panel_weapons_accuracy && acc_levels) + show_accuracy = true; + for(i = 0; i < weapon_cnt; ++i) { wpnpos = panel_pos + eX * column * panel_size_x*(1/columns) + eY * row * panel_size_y*(1/rows); @@ -1671,7 +1677,7 @@ void HUD_Weapons(void) drawpic_aspect_skin(wpnpos, "weapon_current_bg", wpnsize, '1 1 1', fade * panel_fg_alpha, DRAWFLAG_NORMAL); // draw the weapon accuracy - if(acc_levels) + if(show_accuracy) { float weapon_hit, weapon_damage; weapon_damage = weapon_fired[self.weapon-WEP_FIRST]; @@ -4828,6 +4834,8 @@ void HUD_ShowAcceleration(void) f = bound(0, f * 10, 1); acc_avg = acc_avg * (1 - f) + acceleration * f; acceleration = acc_avg / getstatf(STAT_MOVEVARS_MAXSPEED); + if (acceleration == 0) + return; pos = top - sz/2 * eY + (cvar("cl_showacceleration_position") * vid_conheight) * eY; @@ -4837,17 +4845,15 @@ void HUD_ShowAcceleration(void) if (cvar("cl_showacceleration_color_custom")) rgb = stov(cvar_string("cl_showacceleration_color")); else { - rgb = '1 1 1'; - if (acceleration < 0) { + if (acceleration < 0) rgb = '1 .5 .5' - '0 .5 .5' * bound(0, -acceleration * 0.2, 1); - } else if (acceleration > 0) { + else rgb = '.5 1 .5' - '.5 0 .5' * bound(0, +acceleration * 0.2, 1); - } } if (acceleration > 0) HUD_Panel_DrawProgressBar(pos, 0, acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL); - else if (acceleration < 0) + else HUD_Panel_DrawProgressBar(pos + acceleration * scale * '40 0 0', 0, -acceleration * scale * '40 0 0' + sz * eY, rgb, alpha * autocvar_hud_panel_fg_alpha, DRAWFLAG_NORMAL); } @@ -4916,7 +4922,6 @@ void HUD_Main (void) hud_accuracy_border_thickness = bound(0, cvar_or("hud_accuracy_border_thickness", 1), 5); hud_fontsize = HUD_GetFontsize("hud_fontsize"); - hud_fontsize_spec = HUD_GetFontsize("hud_fontsize_spec"); // Drawing stuff diff --git a/qcsrc/client/hud.qh b/qcsrc/client/hud.qh index e311c66a8a..1754dcb58a 100644 --- a/qcsrc/client/hud.qh +++ b/qcsrc/client/hud.qh @@ -22,6 +22,7 @@ float weapon_fired[WEP_MAXCOUNT]; #define MAX_ACCURACY_LEVELS 10 float acc_lev[MAX_ACCURACY_LEVELS]; float acc_levels; +string acc_color_levels; float complain_weapon; string complain_weapon_name; @@ -36,7 +37,6 @@ float weapontime; float weaponprevtime; float teamnagger; -float hud_accuracy_hud; float hud_border_thickness; float hud_accuracy_border_thickness; diff --git a/qcsrc/client/main.qh b/qcsrc/client/main.qh index f00e49c532..2294ffd155 100644 --- a/qcsrc/client/main.qh +++ b/qcsrc/client/main.qh @@ -95,7 +95,6 @@ float teamscores_flags[MAX_SCORE]; vector hud_fontsize; -vector hud_fontsize_spec; float RANKINGS_RECEIVED_CNT; string grecordholder[RANKINGS_CNT]; diff --git a/qcsrc/client/mapvoting.qc b/qcsrc/client/mapvoting.qc index 7c3bcecc50..18e0ce1a25 100644 --- a/qcsrc/client/mapvoting.qc +++ b/qcsrc/client/mapvoting.qc @@ -81,19 +81,14 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin { drawpic(pos, pic, img_size, '1 1 1', 1, DRAWFLAG_NORMAL); } - - drawpic(pos + '1 0 0', strcat("gfx/hud/num_", ftos(id+1)), (img_size_y / 5) * '1 1 0', '1 1 1', 0.6, DRAWFLAG_NORMAL); - if(id == mv_ownvote || pic == "") - { + if(id == mv_ownvote) drawborderlines(hud_border_thickness, pos, img_size, rgb, 1, DRAWFLAG_NORMAL); - drawpic(pos + '1 0 0', strcat("gfx/hud/num_", ftos(id+1)), (img_size_y / 5) * '1 1 0', rgb, 0.6, DRAWFLAG_NORMAL); - } else - { drawborderlines(hud_border_thickness, pos, img_size, '0 0 0', 1, DRAWFLAG_NORMAL); - drawpic(pos + '1 0 0', strcat("gfx/hud/num_", ftos(id+1)), (img_size_y / 5) * '1 1 0', '1 1 1', 0.6, DRAWFLAG_NORMAL); - } + + if(id == mv_selection) + drawfill(pos, img_size, '1 1 1', 0.1, DRAWFLAG_NORMAL); } void MapVote_DrawAbstain(vector pos, float isize, float tsize, float count, float id) diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index 76b19a54c5..65e86fd340 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -883,11 +883,9 @@ float HUD_WouldDrawScoreboard() { return 1; else if (intermission == 1) return 1; - else if (intermission == 2 && scoreboard_showscores) - return 1; else if (getstati(STAT_HEALTH) <= 0 && cvar("cl_deathscoreboard")) return 1; - else if(scoreboard_showscores_force) + else if (scoreboard_showscores_force) return 1; return 0; } @@ -898,7 +896,6 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) { float i; float weapon_hit, weapon_damage, weapon_stats; - float fontsize = 40 * 1/3; float weapon_cnt = WEP_COUNT - 3; // either minstanex/nex are hidden, no port-o-launch, no tuba float rows; if(cvar("scoreboard_accuracy_doublerows")) @@ -906,11 +903,9 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) else rows = 1; float height = 40; - - if(warmup_stage) - { - return pos; - } + float fontsize = height * 1/3; + float weapon_height = height * 2/3; + float weapon_width = sbwidth / weapon_cnt; drawstring(pos, strcat("Accuracy stats (average ", ftos(average_accuracy), "%)"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y; @@ -928,13 +923,13 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) for(i = 0; i < weapon_cnt/rows; ++i) { if(!mod(i, 2)) - drawfill(pos + '1 0 0' * (sbwidth/weapon_cnt) * rows * i, '0 1 0' * height * rows + '1 0 0' * (sbwidth/weapon_cnt) * rows, '0 0 0', scoreboard_alpha_bg * 0.2, DRAWFLAG_NORMAL); + drawfill(pos + '1 0 0' * weapon_width * rows * i, '0 1 0' * height * rows + '1 0 0' * weapon_width * rows, '0 0 0', scoreboard_alpha_bg * 0.2, DRAWFLAG_NORMAL); } // row highlighting for(i = 0; i < rows; ++i) { - drawfill(pos + '0 1 0' * height * (2/3) + '0 1 0' * height * i, '1 0 0' * sbwidth + '0 1 0' * fontsize, '1 1 1', scoreboard_highlight_alpha, DRAWFLAG_NORMAL); + drawfill(pos + '0 1 0' * weapon_height + '0 1 0' * height * i, '1 0 0' * sbwidth + '0 1 0' * fontsize, '1 1 1', scoreboard_highlight_alpha, DRAWFLAG_NORMAL); } drawfont = hud_bigfont; @@ -942,11 +937,14 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) float weapons_with_stats; weapons_with_stats = 0; if(rows == 2) - pos_x += sbwidth/weapon_cnt / 2; + pos_x += weapon_width / 2; if(getstati(STAT_SWITCHWEAPON) == WEP_MINSTANEX) g_minstagib = 1; // TODO: real detection for minstagib? + if (!acc_levels) + rgb = '1 1 1'; + for(i = WEP_FIRST; i <= WEP_LAST; ++i) { self = get_weaponinfo(i); @@ -966,7 +964,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) weapon_alpha = 0.2 * scoreboard_alpha_fg; // weapon icon - drawpic_aspect_skin(pos, strcat("weapon", self.netname), '1 0 0' * sbwidth * (1/weapon_cnt) + '0 1 0' * height * (2/3), '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); + drawpic_aspect_skin(pos, strcat("weapon", self.netname), '1 0 0' * weapon_width + '0 1 0' * weapon_height, '1 1 1', weapon_alpha, DRAWFLAG_NORMAL); // the accuracy if(weapon_damage) { weapons_with_stats += 1; @@ -976,7 +974,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) s = strcat(ftos(weapon_stats),"%"); float padding; - padding = ((sbwidth/weapon_cnt) - stringwidth(s, FALSE, '1 0 0' * fontsize)) / 2; // center the accuracy value + padding = (weapon_width - stringwidth(s, FALSE, '1 0 0' * fontsize)) / 2; // center the accuracy value float weapon_hit, weapon_damage; weapon_damage = weapon_fired[self.weapon-WEP_FIRST]; @@ -986,21 +984,24 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) weapon_stats = floor(100 * weapon_hit / weapon_damage); } - // find the max level lower than weapon_stats - float j; - j = acc_levels-1; - while ( j && weapon_stats < acc_lev[j] ) - --j; - - // inject color j+1 in color j, how much depending on how much weapon_stats is higher than level j - float factor; - factor = (weapon_stats - acc_lev[j]) / (acc_lev[j+1] - acc_lev[j]); - rgb = acc_color(j); - rgb = rgb + factor * (acc_color(j+1) - rgb); + if (acc_levels) + { + // find the max level lower than weapon_stats + float j; + j = acc_levels-1; + while ( j && weapon_stats < acc_lev[j] ) + --j; + + // inject color j+1 in color j, how much depending on how much weapon_stats is higher than level j + float factor; + factor = (weapon_stats - acc_lev[j]) / (acc_lev[j+1] - acc_lev[j]); + rgb = acc_color(j); + rgb = rgb + factor * (acc_color(j+1) - rgb); + } - drawstring(pos + '1 0 0' * padding + '0 1 0' * height * (2/3), s, '1 1 0' * fontsize, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawstring(pos + '1 0 0' * padding + '0 1 0' * weapon_height, s, '1 1 0' * fontsize, rgb, scoreboard_alpha_fg, DRAWFLAG_NORMAL); } - pos_x += sbwidth/weapon_cnt * rows; + pos_x += weapon_width * rows; if(rows == 2 && i == 6) { pos_x -= sbwidth; pos_y += height; @@ -1012,7 +1013,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) average_accuracy = floor(average_accuracy / weapons_with_stats); if(rows == 2) - pos_x -= sbwidth/weapon_cnt / 2; + pos_x -= weapon_width / 2; pos_x -= sbwidth; pos_y += height; @@ -1078,32 +1079,33 @@ float hud_woulddrawscoreboard_prev; float hud_woulddrawscoreboard_change; // "time" at which HUD_WouldDrawScoreboard() changed void HUD_DrawScoreboard() { - HUD_UpdatePlayerTeams(); - float hud_woulddrawscoreboard; - hud_woulddrawscoreboard = HUD_WouldDrawScoreboard(); + hud_woulddrawscoreboard = scoreboard_active; if(hud_woulddrawscoreboard != hud_woulddrawscoreboard_prev) { hud_woulddrawscoreboard_change = time; hud_woulddrawscoreboard_prev = hud_woulddrawscoreboard; } - float scoreboard_fadeinspeed = cvar_or("scoreboard_fadeinspeed", 10); - float scoreboard_fadeoutspeed = cvar_or("scoreboard_fadeoutspeed", 5); if(hud_woulddrawscoreboard) { + float scoreboard_fadeinspeed = cvar_or("scoreboard_fadeinspeed", 10); if (scoreboard_fadeinspeed) scoreboard_fade_alpha = bound (0, (time - hud_woulddrawscoreboard_change) * scoreboard_fadeinspeed, 1); else scoreboard_fade_alpha = 1; } - else + else { + float scoreboard_fadeoutspeed = cvar_or("scoreboard_fadeoutspeed", 5); if (scoreboard_fadeoutspeed) scoreboard_fade_alpha = bound (0, (1/scoreboard_fadeoutspeed - (time - hud_woulddrawscoreboard_change)) * scoreboard_fadeoutspeed, 1); else scoreboard_fade_alpha = 0; + } if not(scoreboard_fade_alpha) return; + HUD_UpdatePlayerTeams(); + scoreboard_alpha_bg = cvar("scoreboard_alpha_bg") * scoreboard_fade_alpha * (1 - cvar("_menu_alpha")); scoreboard_alpha_fg = cvar_or("scoreboard_alpha_fg", 1.0) * scoreboard_fade_alpha * (1 - cvar("_menu_alpha")); scoreboard_highlight = cvar("scoreboard_highlight"); @@ -1118,9 +1120,11 @@ void HUD_DrawScoreboard() xmin = cvar("scoreboard_offset_left") * vid_conwidth; ymin = cvar("con_notify") * cvar("con_notifysize"); - sbwidth = xmax = vid_conwidth - xmin - cvar("scoreboard_offset_right") * vid_conwidth; + xmax = (1 - cvar("scoreboard_offset_right")) * vid_conwidth; ymax = vid_conheight - ymin; + sbwidth = xmax - xmin; + // Initializes position pos_x = xmin; pos_y = ymin; @@ -1138,8 +1142,7 @@ void HUD_DrawScoreboard() drawfont = hud_font; // Draw the scoreboard - vector bg_size; - bg_size = drawgetimagesize("gfx/hud/scoreboard_scoreboard_bg"); + vector bg_size = drawgetimagesize("gfx/scoreboard/scoreboard_bg"); if(teamplay) { @@ -1183,7 +1186,7 @@ void HUD_DrawScoreboard() } pos = HUD_DrawScoreboardRankings(pos, pl, rgb, bg_size); } - else if(cvar("scoreboard_accuracy") && spectatee_status != -1) { + else if(cvar("scoreboard_accuracy") && spectatee_status != -1 && !warmup_stage) { if(teamplay) pos = HUD_DrawScoreboardAccuracyStats(pos, GetTeamRGB(myteam), bg_size); else diff --git a/qcsrc/client/scoreboard.qh b/qcsrc/client/scoreboard.qh index b39b48e53b..3e5de00f2d 100644 --- a/qcsrc/client/scoreboard.qh +++ b/qcsrc/client/scoreboard.qh @@ -1,2 +1,3 @@ float HUD_WouldDrawScoreboard(void); +float scoreboard_active; float scoreboard_fade_alpha;