X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qc;h=0d7489d83ae14049bfbf226fad5b6294b1f2d91c;hp=04a82ea4d9cdb4056ba1343f08968d08743d9ba4;hb=5504c4d4e8719ba6fd4f79fe5ddffd6e9f4107e2;hpb=d9469ed4cf850c7fbd0478c3fb665c3ff03bad12 diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 04a82ea4d9..0d7489d83a 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -102,14 +102,11 @@ do {\ }\ } while(0) -var string picpath; // draw HUD element with image from gfx/hud/hud_skin/foo.tga if it exists, otherwise gfx/hud/default/foo.tga #define drawpic_aspect_skin(pos,pic,sz,color,alpha,drawflag)\ do{\ picpath = strcat(hud_skin_path, "/", pic);\ if(precache_pic(picpath) == "") {\ - if(cvar("developer"))\ - print("Precache fail!\n");\ picpath = strcat("gfx/hud/default/", pic);\ }\ drawpic_aspect(pos, picpath, sz, color, alpha, drawflag);\ @@ -120,8 +117,6 @@ do{\ do{\ picpath = strcat(hud_skin_path, "/", pic);\ if(precache_pic(picpath) == "") {\ - if(cvar("developer"))\ - print("Precache fail!\n");\ picpath = strcat("gfx/hud/default/", pic);\ }\ drawpic(pos, picpath, sz, color, alpha, drawflag);\ @@ -502,7 +497,7 @@ void HUD_Panel_ExportCfg(string cfgname) fputs(fh, strcat("seta hud_progressbar_nexball_color \"", cvar_string("hud_progressbar_nexball_color"), "\"", "\n")); fputs(fh, "\n"); - fputs(fh, strcat("seta _hud_panelorder \"", cvar_string("hud_nexball_color"), "\"", "\n")); + fputs(fh, strcat("seta _hud_panelorder \"", cvar_string("_hud_panelorder"), "\"", "\n")); fputs(fh, "\n"); // common cvars for all panels @@ -631,7 +626,7 @@ void HUD_Panel_HlBorder(float myBorder, vector color, float alpha) // draw the background/borders #define HUD_Panel_DrawBg(alpha)\ if(panel_bg != "0")\ - draw_BorderPicture(panel_pos - '1 1 0' * panel_bg_border, strcat(hud_skin_path, "/", panel_bg), panel_size + '1 1 0' * 2 * panel_bg_border, panel_bg_color, panel_bg_alpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER));\ + draw_BorderPicture(panel_pos - '1 1 0' * panel_bg_border, panel_bg, panel_size + '1 1 0' * 2 * panel_bg_border, panel_bg_color, panel_bg_alpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER));\ if(highlightedPanel_prev == active_panel && autocvar__hud_configure)\ HUD_Panel_HlBorder(panel_bg_border + 1.5 * hlBorderSize, '0 0.5 1', 0.25 * (1 - autocvar__menu_alpha) * alpha); @@ -641,20 +636,44 @@ void HUD_Panel_DrawProgressBar(vector pos, float vertical, vector mySize, vector return; string pic; - pic = strcat(hud_skin_path, "/"); if(vertical) { - drawsubpic(pos, eY * min(mySize_y * 0.5, mySize_x) + eX * mySize_x, strcat(pic, "statusbar_vertical"), '0 0 0', '1 0.25 0', color, alpha, drawflag); + pic = strcat(hud_skin_path, "/statusbar_vertical"); + if(precache_pic(pic) == "") { + pic = "gfx/hud/default/statusbar_vertical"; + } + drawsubpic(pos, eY * min(mySize_y * 0.5, mySize_x) + eX * mySize_x, pic, '0 0 0', '1 0.25 0', color, alpha, drawflag); if(mySize_y/mySize_x > 2) - drawsubpic(pos + eY * mySize_x, eY * (mySize_y - 2 * mySize_x) + eX * mySize_x, strcat(pic, "statusbar_vertical"), '0 0.25 0', '1 0.5 0', color, alpha, drawflag); - drawsubpic(pos + eY * mySize_y - eY * min(mySize_y * 0.5, mySize_x), eY * min(mySize_y * 0.5, mySize_x) + eX * mySize_x, strcat(pic, "statusbar_vertical"), '0 0.75 0', '1 0.25 0', color, alpha, drawflag); + drawsubpic(pos + eY * mySize_x, eY * (mySize_y - 2 * mySize_x) + eX * mySize_x, pic, '0 0.25 0', '1 0.5 0', color, alpha, drawflag); + drawsubpic(pos + eY * mySize_y - eY * min(mySize_y * 0.5, mySize_x), eY * min(mySize_y * 0.5, mySize_x) + eX * mySize_x, pic, '0 0.75 0', '1 0.25 0', color, alpha, drawflag); } else { - drawsubpic(pos, eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, strcat(pic, "statusbar"), '0 0 0', '0.25 1 0', color, alpha, drawflag); + pic = strcat(hud_skin_path, "/statusbar"); + if(precache_pic(pic) == "") { + pic = "gfx/hud/default/statusbar"; + } + drawsubpic(pos, eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, pic, '0 0 0', '0.25 1 0', color, alpha, drawflag); if(mySize_x/mySize_y > 2) - drawsubpic(pos + eX * mySize_y, eX * (mySize_x - 2 * mySize_y) + eY * mySize_y, strcat(pic, "statusbar"), '0.25 0 0', '0.5 1 0', color, alpha, drawflag); - drawsubpic(pos + eX * mySize_x - eX * min(mySize_x * 0.5, mySize_y), eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, strcat(pic, "statusbar"), '0.75 0 0', '0.25 1 0', color, alpha, drawflag); + drawsubpic(pos + eX * mySize_y, eX * (mySize_x - 2 * mySize_y) + eY * mySize_y, pic, '0.25 0 0', '0.5 1 0', color, alpha, drawflag); + drawsubpic(pos + eX * mySize_x - eX * min(mySize_x * 0.5, mySize_y), eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, pic, '0.75 0 0', '0.25 1 0', color, alpha, drawflag); } } +void HUD_Panel_DrawHighlight(vector pos, vector mySize, vector color, float alpha, float drawflag) +{ + if(!alpha) + return; + + string pic; + pic = strcat(hud_skin_path, "/num_leading"); + if(precache_pic(pic) == "") { + pic = "gfx/hud/default/num_leading"; + } + + drawsubpic(pos, eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, pic, '0 0 0', '0.25 1 0', color, alpha, drawflag); + if(mySize_x/mySize_y > 2) + drawsubpic(pos + eX * mySize_y, eX * (mySize_x - 2 * mySize_y) + eY * mySize_y, pic, '0.25 0 0', '0.5 1 0', color, alpha, drawflag); + drawsubpic(pos + eX * mySize_x - eX * min(mySize_x * 0.5, mySize_y), eX * min(mySize_x * 0.5, mySize_y) + eY * mySize_y, pic, '0.75 0 0', '0.25 1 0', color, alpha, drawflag); +} + // check if move will result in panel being moved into another panel. If so, return snapped vector, otherwise return the given vector vector HUD_Panel_CheckMove(vector myPos, vector mySize) { @@ -1151,7 +1170,7 @@ float HUD_Panel_HighlightCheck() panelPos = panel_pos; panelSize = panel_size; - border = 10; // FORCED border so a small border size doesn't mean you can't resize + border = max(8, panel_bg_border); // FORCED border so a small border size doesn't mean you can't resize // move if(mousepos_x >= panelPos_x && mousepos_y >= panelPos_y && mousepos_x <= panelPos_x + panelSize_x && mousepos_y <= panelPos_y + panelSize_y) @@ -1576,24 +1595,21 @@ void HUD_WeaponIcons(void) a = 0; } - vector complain_bubble_size = '100 50 0' * bound(0.25, autocvar_hud_weaponicons_complainbubble_size, 2); - drawpic_aspect_skin(pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows) - complain_bubble_size + 0.5 * (eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows)), "weapon_complainbubble", complain_bubble_size, '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL); - string s; if(complain_weapon_type == 0) { - s = "Out of ammo for the"; + s = "Out of ammo"; color = '1 0 0'; } else if(complain_weapon_type == 1) { - s = "You don't have the"; + s = "Don't have"; color = '1 1 0'; } else { - s = "Map doesn't have the"; + s = "Unavailable"; color = '1 1 1'; } - drawstring_aspect(pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows) - complain_bubble_size + eX * 0.05 * complain_bubble_size_x + eY * (1/6) * complain_bubble_size_y + 0.5 * (eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows)), s, eX * 0.9 * complain_bubble_size_x + eY * 0.2 * complain_bubble_size_y, 0.2 * complain_bubble_size_y, color, panel_fg_alpha * a, DRAWFLAG_NORMAL); - drawstring_aspect(pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows) - complain_bubble_size + eX * 0.05 * complain_bubble_size_x + eY * (11/30) * complain_bubble_size_y + 0.5 * (eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows)), complain_weapon_name, eX * 0.9 * complain_bubble_size_x + eY * 0.25 * complain_bubble_size_y, 0.25 * complain_bubble_size_y, '1 0 0', panel_fg_alpha * a, DRAWFLAG_NORMAL); + drawpic_aspect_skin(pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows) + '1 1 0' * autocvar_hud_weaponicons_complainbubble_padding, "weapon_complainbubble", eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows) - '2 2 0' * autocvar_hud_weaponicons_complainbubble_padding, color, a * panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows) + '1 1 0' * autocvar_hud_weaponicons_complainbubble_padding, s, eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows) - '2 2 0' * autocvar_hud_weaponicons_complainbubble_padding, mySize_y*(1/rows), '1 1 1', panel_fg_alpha * a, DRAWFLAG_NORMAL); } ++row; @@ -1741,8 +1757,10 @@ void HUD_Inventory(void) if(autocvar__hud_configure) i = 2; if (currently_selected || autocvar__hud_configure) + { DrawAmmoItem(pos, mySize, i, currently_selected); - break; + break; + } } else { DrawAmmoItem(pos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows), eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows), i, currently_selected); ++row; @@ -2287,7 +2305,6 @@ void HUD_HealthArmor(void) drawfont = hud_font; } -// ___TODO___ !!! // Notification area (#4) // @@ -2789,6 +2806,7 @@ void HUD_Notify (void) float i, j; for(j = 0; j < entries; ++j) { + s = ""; if(autocvar_hud_notify_flip) i = j; else // rather nasty hack for ordering items from the bottom up @@ -2917,8 +2935,11 @@ void HUD_Notify (void) color = '0 0 1'; } } - drawpic_aspect_skin(weap_pos, s, '2 1 0' * height, color, panel_fg_alpha * a, DRAWFLAG_NORMAL); - drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); + if(s != "" && a) + { + drawpic_aspect_skin(weap_pos, s, '2 1 0' * height, color, panel_fg_alpha * a, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); + } } // X [did action to] Y else @@ -2990,9 +3011,12 @@ void HUD_Notify (void) s = "notify_void"; color = '1 1 1'; } - drawpic_aspect_skin(weap_pos, s, '2 1 0' * height, color, panel_fg_alpha * a, DRAWFLAG_NORMAL); - drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); - drawcolorcodedstring(pos_victim, victim, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); + if(s != "" && a) + { + drawpic_aspect_skin(weap_pos, s, '2 1 0' * height, color, panel_fg_alpha * a, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos_attacker, attacker, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos_victim, victim, fontsize, panel_fg_alpha * a, DRAWFLAG_NORMAL); + } } } } @@ -3306,7 +3330,7 @@ void HUD_Score(void) drawstring_aspect(pos + eX * 0.75 * mySize_x, ftos(distribution), eX * 0.25 * mySize_x + eY * (1/3) * mySize_y, (1/3) * mySize_y, distribution_color, panel_fg_alpha, DRAWFLAG_NORMAL); if (leader) - drawpic_aspect_skin(pos, strcat("num_leading_", ftos(score_len)), eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + HUD_Panel_DrawHighlight(pos, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawfont = hud_bigfont; drawstring_aspect(pos, ftos(score), eX * 0.75 * mySize_x + eY * mySize_y, mySize_y, distribution_color, panel_fg_alpha, DRAWFLAG_NORMAL); drawfont = hud_font; @@ -3332,7 +3356,7 @@ void HUD_Score(void) if (max_fragcount == score) leader = 1; if (leader) - drawpic_aspect_skin(pos, strcat("num_leading_", ftos(score_len)), eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + HUD_Panel_DrawHighlight(pos, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawfont = hud_bigfont; drawstring_aspect(pos, ftos(score), eX * 0.75 * mySize_x + eY * mySize_y, mySize_y, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL); drawfont = hud_font; @@ -3340,7 +3364,7 @@ void HUD_Score(void) if (max_fragcount == score) leader = 1; if (leader) - drawpic_aspect_skin(pos + eX * 0.75 * mySize_x + eY * (1/3) * teamnum * mySize_y, strcat("num_leading_", ftos(score_len)), eX * 0.25 * mySize_x + eY * (1/3) * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + HUD_Panel_DrawHighlight(pos + eX * 0.75 * mySize_x + eY * (1/3) * teamnum * mySize_y, eX * 0.25 * mySize_x + eY * (1/3) * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(pos + eX * 0.75 * mySize_x + eY * (1/3) * teamnum * mySize_y, ftos(score), eX * 0.25 * mySize_x + eY * (1/3) * mySize_y, (1/3) * mySize_y, GetTeamRGB(tm.team) * 0.8, panel_fg_alpha, DRAWFLAG_NORMAL); teamnum += 1; } @@ -3589,13 +3613,6 @@ void HUD_VoteWindow(void) // draw the progress bar backgrounds drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_back", eX * mySize_x + eY * (3/8) * mySize_y, '1 1 1', a * panel_fg_alpha, DRAWFLAG_NORMAL); - // draw the progress bars - drawsetcliparea(pos_x, pos_y, mySize_x * 0.5 * (vote_yescount/vote_needed), mySize_y); - drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '0 1 0', a * panel_fg_alpha, DRAWFLAG_NORMAL); - - drawsetcliparea(pos_x + mySize_x - mySize_x * 0.5 * (vote_nocount/vote_needed), pos_y, mySize_x * 0.5, mySize_y); - drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '1 0 0', a * panel_fg_alpha, DRAWFLAG_NORMAL); - // draw the highlights if(vote_highlighted == 1) { drawsetcliparea(pos_x, pos_y, mySize_x * 0.5, mySize_y); @@ -3606,6 +3623,13 @@ void HUD_VoteWindow(void) drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_voted", eX * mySize_x + eY * (3/8) * mySize_y, '0 1 0', a * panel_fg_alpha, DRAWFLAG_NORMAL); } + // draw the progress bars + drawsetcliparea(pos_x, pos_y, mySize_x * 0.5 * (vote_yescount/vote_needed), mySize_y); + drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '0 1 0', a * panel_fg_alpha, DRAWFLAG_NORMAL); + + drawsetcliparea(pos_x + mySize_x - mySize_x * 0.5 * (vote_nocount/vote_needed), pos_y, mySize_x * 0.5, mySize_y); + drawpic_skin(pos + eY * (5/8) * mySize_y, "voteprogress_prog", eX * mySize_x + eY * (3/8) * mySize_y, '1 0 0', a * panel_fg_alpha, DRAWFLAG_NORMAL); + drawresetcliparea(); if(!vote_active) { @@ -4005,13 +4029,13 @@ void HUD_Mod_Race(vector pos, vector mySize) f = time - crecordtime_change_time; if (f > 1) { - drawstring_aspect(pos, "Personal best ", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring(pos + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos, "Personal best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eY * 0.25 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); } else { - drawstring(pos, "Personal best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring(pos + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_expanding(pos, "Personal best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); - drawstring_expanding(pos + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect(pos, "Personal best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eY * 0.25 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + //drawstring_expanding(pos, "Personal best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + //drawstring_expanding(pos + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t), '1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); } // server record @@ -4023,13 +4047,13 @@ void HUD_Mod_Race(vector pos, vector mySize) f = time - srecordtime_change_time; if (f > 1) { - drawstring(pos + eY * 0.5 * mySize_y, "Server best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring(pos + eY * 0.5 * mySize_y + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t),'1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eY * 0.5 * mySize_y, "Server best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eY * 0.75 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); } else { - drawstring(pos + eY * 0.5 * mySize_y, "Server best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring(pos + eY * 0.5 * mySize_y + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t),'1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_expanding(pos + eY * 0.5 * mySize_y, "Server best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); - drawstring_expanding(pos + eY * 0.5 * mySize_y + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t),'1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect(pos + eY * 0.5 * mySize_y, "Server best", eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos + eY * 0.75 * mySize_y, TIME_ENCODED_TOSTRING(t), eX * 0.5 * mySize_x + eY * 0.25 * mySize_y, 0.25 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + //drawstring_expanding(pos + eY * 0.5 * mySize_y, "Server best ", '1 1 0' * 0.15 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + //drawstring_expanding(pos + eY * 0.5 * mySize_y + eY * 0.2 * mySize_y, TIME_ENCODED_TOSTRING(t),'1 1 0' * 0.2 * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); } if (race_status != race_status_prev || race_status_name != race_status_name_prev) { @@ -4347,157 +4371,170 @@ void HUD_InfoMessages(void) fontsize = '0.25 0.25 0' * mySize_y; string s; - if(spectatee_status && !intermission) + if(!autocvar__hud_configure) { - //drawfont = hud_bigfont; - if(spectatee_status == -1) - s = "^1Observing"; - else - s = GetPlayerName(spectatee_status - 1); + if(spectatee_status && !intermission) + { + //drawfont = hud_bigfont; + if(spectatee_status == -1) + s = "^1Observing"; + else + s = GetPlayerName(spectatee_status - 1); - //s = textShortenToWidth(s, mySize_y, 0.5 * height, stringwidth_colors); - //drawcolorcodedstring(pos + eY * 0.25 * height, s, 0.5 * height, panel_fg_alpha, DRAWFLAG_NORMAL); - //drawfont = hud_font; + //s = textShortenToWidth(s, mySize_y, 0.5 * height, stringwidth_colors); + //drawcolorcodedstring(pos + eY * 0.25 * height, s, 0.5 * height, panel_fg_alpha, DRAWFLAG_NORMAL); + //drawfont = hud_font; - // spectator text in the upper right corner - if(spectatee_status == -1) - s = strcat("^1Press ^3", getcommandkey("primary fire", "+attack"), "^1 to spectate"); - else - s = strcat("^1Press ^3", getcommandkey("primary fire", "+attack"), "^1 for another player"); - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; + // spectator text in the upper right corner + if(spectatee_status == -1) + s = strcat("^1Press ^3", getcommandkey("primary fire", "+attack"), "^1 to spectate"); + else + s = strcat("^1Press ^3", getcommandkey("primary fire", "+attack"), "^1 for another player"); + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; - if(spectatee_status == -1) - s = strcat("^1Use ^3", getcommandkey("next weapon", "weapnext"), "^1 or ^3", getcommandkey("previous weapon", "weapprev"), "^1 to change the speed"); - else - s = strcat("^1Press ^3", getcommandkey("secondary fire", "+attack2"), "^1 to observe"); - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; + if(spectatee_status == -1) + s = strcat("^1Use ^3", getcommandkey("next weapon", "weapnext"), "^1 or ^3", getcommandkey("previous weapon", "weapprev"), "^1 to change the speed"); + else + s = strcat("^1Press ^3", getcommandkey("secondary fire", "+attack2"), "^1 to observe"); + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; - s = strcat("^1Press ^3", getcommandkey("server info", "+show_info"), "^1 for gamemode info"); - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; + s = strcat("^1Press ^3", getcommandkey("server info", "+show_info"), "^1 for gamemode info"); + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; - if(gametype == GAME_ARENA) - s = "^1Wait for your turn to join"; - else if(gametype == GAME_LMS) - { - entity sk; - sk = playerslots[player_localentnum - 1]; - if(sk.(scores[ps_primary]) >= 666) - s = "^1Match has already begun"; - else if(sk.(scores[ps_primary]) > 0) - s = "^1You have no more lives left"; + if(gametype == GAME_ARENA) + s = "^1Wait for your turn to join"; + else if(gametype == GAME_LMS) + { + entity sk; + sk = playerslots[player_localentnum - 1]; + if(sk.(scores[ps_primary]) >= 666) + s = "^1Match has already begun"; + else if(sk.(scores[ps_primary]) > 0) + s = "^1You have no more lives left"; + else + s = strcat("^1Press ^3", getcommandkey("jump", "+jump"), "^1 to join"); + } else s = strcat("^1Press ^3", getcommandkey("jump", "+jump"), "^1 to join"); - } - else - s = strcat("^1Press ^3", getcommandkey("jump", "+jump"), "^1 to join"); - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; - //show restart countdown: - if (time < getstatf(STAT_GAMESTARTTIME)) { - float countdown; - //we need to ceil, otherwise the countdown would be off by .5 when using round() - countdown = ceil(getstatf(STAT_GAMESTARTTIME) - time); - s = strcat("^1Game starts in ^3", ftos(countdown), "^1 seconds"); + //show restart countdown: + if (time < getstatf(STAT_GAMESTARTTIME)) { + float countdown; + //we need to ceil, otherwise the countdown would be off by .5 when using round() + countdown = ceil(getstatf(STAT_GAMESTARTTIME) - time); + s = strcat("^1Game starts in ^3", ftos(countdown), "^1 seconds"); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; + } + } + if(warmup_stage && !intermission) + { + s = "^2Currently in ^1warmup^2 stage!"; + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); o += eY * fontsize_y; } - } - if(warmup_stage && !intermission) - { - s = "^2Currently in ^1warmup^2 stage!"; - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; - } - string blinkcolor; - if(mod(time, 1) >= 0.5) - blinkcolor = "^1"; - else - blinkcolor = "^3"; + string blinkcolor; + if(mod(time, 1) >= 0.5) + blinkcolor = "^1"; + else + blinkcolor = "^3"; - if(ready_waiting && !intermission && !spectatee_status) - { - if(ready_waiting_for_me) + if(ready_waiting && !intermission && !spectatee_status) { - if(warmup_stage) - s = strcat(blinkcolor, "Press ^3", getcommandkey("ready", "ready"), blinkcolor, " to end warmup"); + if(ready_waiting_for_me) + { + if(warmup_stage) + s = strcat(blinkcolor, "Press ^3", getcommandkey("ready", "ready"), blinkcolor, " to end warmup"); + else + s = strcat(blinkcolor, "Press ^3", getcommandkey("ready", "ready"), blinkcolor, " once you are ready"); + } else - s = strcat(blinkcolor, "Press ^3", getcommandkey("ready", "ready"), blinkcolor, " once you are ready"); + { + if(warmup_stage) + s = strcat("^2Waiting for others to ready up to end warmup..."); + else + s = strcat("^2Waiting for others to ready up..."); + } + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; } - else + else if(warmup_stage && !intermission && !spectatee_status) { - if(warmup_stage) - s = strcat("^2Waiting for others to ready up to end warmup..."); - else - s = strcat("^2Waiting for others to ready up..."); + s = strcat("^2Press ^3", getcommandkey("ready", "ready"), "^2 to end warmup"); + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; } - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; - } - else if(warmup_stage && !intermission && !spectatee_status) - { - s = strcat("^2Press ^3", getcommandkey("ready", "ready"), "^2 to end warmup"); - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; - } - if(teamplay && !intermission && !spectatee_status && gametype != GAME_CA && teamnagger) - { - float ts_min, ts_max; - tm = teams.sort_next; - if (tm) + if(teamplay && !intermission && !spectatee_status && gametype != GAME_CA && teamnagger) { - for(; tm.sort_next; tm = tm.sort_next) + float ts_min, ts_max; + tm = teams.sort_next; + if (tm) { - if(!tm.team_size || tm.team == COLOR_SPECTATOR) - continue; - if(!ts_min) ts_min = tm.team_size; - else ts_min = min(ts_min, tm.team_size); - if(!ts_max) ts_max = tm.team_size; - else ts_max = max(ts_max, tm.team_size); - } - if ((ts_max - ts_min) > 1) - { - s = strcat(blinkcolor, "Teamnumbers are unbalanced!"); - tm = GetTeam(myteam, false); - if (tm) - if (tm.team != COLOR_SPECTATOR) - if (tm.team_size == ts_max) - s = strcat(s, " Press ^3", getcommandkey("team menu", "menu_showteamselect"), blinkcolor, " to adjust"); - - if(autocvar_hud_infomessages_flip) - o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); - drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); - o += eY * fontsize_y; + for(; tm.sort_next; tm = tm.sort_next) + { + if(!tm.team_size || tm.team == COLOR_SPECTATOR) + continue; + if(!ts_min) ts_min = tm.team_size; + else ts_min = min(ts_min, tm.team_size); + if(!ts_max) ts_max = tm.team_size; + else ts_max = max(ts_max, tm.team_size); + } + if ((ts_max - ts_min) > 1) + { + s = strcat(blinkcolor, "Teamnumbers are unbalanced!"); + tm = GetTeam(myteam, false); + if (tm) + if (tm.team != COLOR_SPECTATOR) + if (tm.team_size == ts_max) + s = strcat(s, " Press ^3", getcommandkey("team menu", "menu_showteamselect"), blinkcolor, " to adjust"); + + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; + } } } } - if(autocvar__hud_configure) + else { s = "^7Press ^3ESC ^7to show HUD options."; if(autocvar_hud_infomessages_flip) o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); o += eY * fontsize_y; - s = "^3Doubleclick a panel for panel-specific options."; + s = "^3Doubleclick ^7a panel for panel-specific options."; + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; + s = "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"; + if(autocvar_hud_infomessages_flip) + o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); + drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); + o += eY * fontsize_y; + s = "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."; if(autocvar_hud_infomessages_flip) o_x = pos_x + mySize_x - stringwidth(s, TRUE, fontsize); drawcolorcodedstring(o, s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL); @@ -4652,7 +4689,6 @@ switch (id) {\ void HUD_Main (void) { - // TODO: render order? hud_skin_path = strcat("gfx/hud/", autocvar_hud_skin); if(disable_menu_alphacheck == 1) @@ -4703,8 +4739,16 @@ void HUD_Main (void) else color = stov(autocvar_hud_dock_color); + // draw the dock if(autocvar_hud_dock != "" && autocvar_hud_dock != "0") - drawpic('0 0 0', strcat("gfx/hud/", autocvar_hud_skin, "/", autocvar_hud_dock), eX * vid_conwidth + eY * vid_conheight, color, autocvar_hud_dock_alpha * menu_fade_alpha, DRAWFLAG_NORMAL); // no aspect ratio forcing on dock... + { + string pic; + pic = strcat(hud_skin_path, "/", autocvar_hud_dock); + if(precache_pic(pic) == "") { + pic = "gfx/hud/default/dock"; + } + drawpic('0 0 0', pic, eX * vid_conwidth + eY * vid_conheight, color, autocvar_hud_dock_alpha * menu_fade_alpha, DRAWFLAG_NORMAL); // no aspect ratio forcing on dock... + } // cache the panel order into the panel_order array if(autocvar__hud_panelorder != hud_panelorder_prev) {