HUD_Write_PanelCvar_q("_ammo_color");
HUD_Write_PanelCvar_q("_ammo_alpha");
HUD_Write_PanelCvar_q("_aspect");
+ HUD_Write_PanelCvar_q("_timeout");
+ HUD_Write_PanelCvar_q("_timeout_effect");
break;
case HUD_PANEL_AMMO:
HUD_Write_PanelCvar_q("_onlycurrent");
HUD_Write_PanelCvar_q("_iconalign");
HUD_Write_PanelCvar_q("_progressbar");
HUD_Write_PanelCvar_q("_progressbar_name");
+ HUD_Write_PanelCvar_q("_progressbar_xoffset");
HUD_Write_PanelCvar_q("_text");
break;
case HUD_PANEL_POWERUPS:
case HUD_PANEL_INFOMESSAGES:
HUD_Write_PanelCvar_q("_flip");
break;
+ case HUD_PANEL_PHYSICS:
+ HUD_Write_PanelCvar_q("_flip");
+ HUD_Write_PanelCvar_q("_baralign");
+ HUD_Write_PanelCvar_q("_progressbar");
+ break;
}
HUD_Write("\n");
}
#define HUD_Panel_DrawBg(alpha)\
if(panel_bg != "0")\
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 * alpha, '1 1 0' * (panel_bg_border/BORDER_MULTIPLIER));\
-if(highlightedPanel_prev == active_panel && autocvar__hud_configure)\
+if(highlightedPanel_prev == hud_configure_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);\
} ENDS_WITH_CURLY_BRACE
vector HUD_Panel_CheckMove(vector myPos, vector mySize)
{
float i;
-
+ float myCenter_x, myCenter_y, targCenter_x, targCenter_y;
vector myTarget;
myTarget = myPos;
- vector myCenter;
- vector targCenter;
- myCenter = '0 0 0'; // shut up fteqcc, there IS a reference
- targCenter = '0 0 0'; // shut up fteqcc, there IS a reference
-
for (i = 0; i < HUD_PANEL_NUM; ++i) {
if(i == highlightedPanel || !panel_enabled)
continue;
//if(cvar("hud_configure_checkcollisions_debug"))
//drawfill(pos, mySize, '1 1 1', .2, DRAWFLAG_NORMAL);
- if(cvar("hud_configure_grid"))
+ if(autocvar_hud_configure_grid)
{
pos_x = floor((pos_x/vid_conwidth)/hud_configure_gridSize_x + 0.5) * hud_configure_realGridSize_x;
pos_y = floor((pos_y/vid_conheight)/hud_configure_gridSize_y + 0.5) * hud_configure_realGridSize_y;
// (which side the resize direction finds for first) and reduce the size up to there
//
// dist is the distance between resizeorigin and the "analogous" point of the panel
- // in this case resizeorigin (bottom-right point) and the bottom-right point of the panel
+ // in this case between resizeorigin (bottom-right point) and the bottom-right point of the panel
dist_x = resizeorigin_x - targEndPos_x;
dist_y = resizeorigin_y - targEndPos_y;
if (dist_y <= 0 || dist_x / dist_y > ratio)
//drawfill(myPos, mySize, '1 1 1', .2, DRAWFLAG_NORMAL);
// before checkresize, otherwise panel can be snapped partially inside another panel or panel aspect ratio can be broken
- if(cvar("hud_configure_grid"))
+ if(autocvar_hud_configure_grid)
{
mySize_x = floor((mySize_x/vid_conwidth)/hud_configure_gridSize_x + 0.5) * hud_configure_realGridSize_x;
mySize_y = floor((mySize_y/vid_conheight)/hud_configure_gridSize_y + 0.5) * hud_configure_realGridSize_y;
hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
float step;
- if(cvar("hud_configure_grid"))
+ if(autocvar_hud_configure_grid)
{
if (nPrimary == K_UPARROW || nPrimary == K_DOWNARROW)
{
}
}
+void HUD_Panel_EnableMenu();
+float tab_panels[HUD_PANEL_NUM];
+float tab_panel, tab_backward;
+vector tab_panel_pos;
+void HUD_Panel_FirstInDrawQ(float id);
+void reset_tab_panels()
+{
+ int i;
+ for(i = 0; i < HUD_PANEL_NUM; ++i)
+ tab_panels[i] = -1;
+}
float HUD_Panel_InputEvent(float bInputType, float nPrimary, float nSecondary)
{
string s;
if(nPrimary == K_SHIFT) hudShiftState -= (hudShiftState & S_SHIFT);
}
+ if(nPrimary == K_CTRL)
+ {
+ if (bInputType == 1) //ctrl has been released
+ {
+ if (tab_panel != -1)
+ {
+ //switch to selected panel
+ highlightedPanel = tab_panel;
+ highlightedPanel_prev = tab_panel;
+ HUD_Panel_FirstInDrawQ(highlightedPanel_prev);
+ }
+ tab_panel = -1;
+ reset_tab_panels();
+ }
+ }
+
if(nPrimary == K_MOUSE1)
{
if(bInputType == 0) { // key pressed
menu_enabled_time = time;
localcmd("menu_showhudexit\n");
}
+ else if(nPrimary == K_TAB && hudShiftState & S_CTRL) // select and highlight another panel
+ {
+ if (bInputType == 1 || mouseClicked)
+ return true;
+
+ //FIXME: if a panel is highlighted, has the same pos_x and lays in the same level
+ //of other panels then next consecutive ctrl-tab will select the highlighted panel too
+ //(it should only after every other panel of the hud)
+ //It's a minor bug anyway, we can live with it
+
+ float starting_panel;
+ float old_tab_panel = tab_panel;
+ if (tab_panel == -1) //first press of TAB
+ {
+ if (highlightedPanel_prev != -1)
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel_prev)
+ else
+ panel_pos = '0 0 0';
+ starting_panel = highlightedPanel_prev; //can be -1, it means no starting panel
+ tab_panel_pos = panel_pos; //to compute level
+ }
+ else
+ {
+ if ( ((!tab_backward) && (hudShiftState & S_SHIFT)) || (tab_backward && !(hudShiftState & S_SHIFT)) ) //tab direction changed?
+ reset_tab_panels();
+ starting_panel = tab_panel;
+ }
+ tab_backward = (hudShiftState & S_SHIFT);
+
+ float k, level, start_pos_x;
+ vector candidate_pos;
+ const float LEVELS_NUM = 4;
+ const float level_height = vid_conheight / LEVELS_NUM;
+:find_tab_panel
+ level = floor(tab_panel_pos_y / level_height) * level_height; //starting level
+ candidate_pos_x = (!tab_backward) ? vid_conwidth : 0;
+ start_pos_x = tab_panel_pos_x;
+ tab_panel = -1;
+ k=0;
+ while(++k)
+ {
+ for(i = 0; i < HUD_PANEL_NUM; ++i)
+ {
+ if (i == tab_panels[i] || i == starting_panel)
+ continue;
+ HUD_Panel_UpdatePosSizeForId(i)
+ if (panel_pos_y >= level && (panel_pos_y - level) < level_height)
+ if ( ( !tab_backward && panel_pos_x >= start_pos_x && (panel_pos_x < candidate_pos_x || (panel_pos_x == candidate_pos_x && panel_pos_y <= candidate_pos_y)) )
+ || ( tab_backward && panel_pos_x <= start_pos_x && (panel_pos_x > candidate_pos_x || (panel_pos_x == candidate_pos_x && panel_pos_y >= candidate_pos_y)) ) )
+ {
+ tab_panel = i;
+ tab_panel_pos = candidate_pos = panel_pos;
+ }
+ }
+ if (tab_panel != -1)
+ break;
+ if (k == LEVELS_NUM) //tab_panel not found
+ {
+ reset_tab_panels();
+ if (old_tab_panel == -2) //this prevents an infinite loop (should not happen normally)
+ {
+ tab_panel = -1;
+ return true;
+ }
+ starting_panel = old_tab_panel;
+ old_tab_panel = -2;
+ goto find_tab_panel; //u must find tab_panel!
+ }
+ if (!tab_backward)
+ {
+ level = mod(level + level_height, vid_conheight);
+ start_pos_x = 0;
+ candidate_pos_x = vid_conwidth;
+ }
+ else
+ {
+ level = mod(level - level_height, vid_conheight);
+ start_pos_x = vid_conwidth;
+ candidate_pos_x = 0;
+ }
+ }
+
+ tab_panels[tab_panel] = tab_panel;
+ }
else if(nPrimary == K_SPACE && hudShiftState & S_CTRL) // enable/disable highlighted panel or dock
{
if (bInputType == 1 || mouseClicked)
return true;
if (highlightedPanel_prev != -1)
+ {
+ HUD_Panel_GetName(highlightedPanel_prev);
cvar_set(strcat("hud_panel_", panel_name), ftos(!(panel_enabled)));
+ }
else
cvar_set(strcat("hud_dock"), (autocvar_hud_dock == "") ? "dock" : "");
}
if (highlightedPanel_prev != -1)
{
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel_prev);
panel_size_copied = panel_size;
highlightedPanel_copied = highlightedPanel_prev;
}
highlightedPanel_backup = highlightedPanel_prev;
s = strcat(ftos(tmp_size_x/vid_conwidth), " ", ftos(tmp_size_y/vid_conheight));
+ HUD_Panel_GetName(highlightedPanel_prev);
cvar_set(strcat("hud_panel_", panel_name, "_size"), s);
}
else if(nPrimary == 'z' && hudShiftState & S_CTRL) // undo last action
HUD_Panel_Arrow_Action(nPrimary); //move or resize panel
}
+ else if(nPrimary == K_ENTER || nPrimary == K_SPACE || nPrimary == K_KP_ENTER)
+ {
+ if (bInputType == 1)
+ return true;
+ if (highlightedPanel_prev != -1)
+ {
+ highlightedPanel = highlightedPanel_prev;
+ HUD_Panel_EnableMenu();
+ }
+ }
else if(hit_con_bind)
return false;
- return true; // Suppress ALL other input
+ return true;
}
float HUD_Panel_HighlightCheck()
}
}
+void HUD_Panel_EnableMenu()
+{
+ menu_enabled = 2;
+ menu_enabled_time = time;
+ HUD_Panel_GetName(highlightedPanel);
+ localcmd("menu_showhudoptions ", panel_name, "\n");
+}
float highlightcheck;
vector prev_pos, prev_size;
void HUD_Panel_Mouse()
if(mouseClicked)
{
+ if (tab_panel != -1)
+ {
+ //stop ctrl-tab selection
+ tab_panel = -1;
+ reset_tab_panels();
+ }
if(prevMouseClicked == 0)
{
HUD_Panel_Highlight(); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin
if(time - prevMouseClickedTime < 0.4 && prevMouseClicked == 0 && prevMouseClickedPos == mousepos && highlightedPanel >= 0)
{
mouseClicked = 0; // to prevent spam, I guess.
- menu_enabled = 2;
- menu_enabled_time = time;
- HUD_Panel_GetName(highlightedPanel);
- localcmd("menu_showhudoptions ", panel_name, "\n");
+ HUD_Panel_EnableMenu();
return;
}
if(prevMouseClicked == 0)
if(!autocvar_hud_panel_weapons) return;
if(spectatee_status == -1) return;
}
+ else
+ hud_configure_active_panel = HUD_PANEL_WEAPONS;
float timeout = autocvar_hud_panel_weapons_timeout;
float timeout_effect_length, timein_effect_length;
return;
}
- active_panel = HUD_PANEL_WEAPONS;
HUD_Panel_UpdateCvars(weapons);
if (timeout && time >= weapontime + timeout && !autocvar__hud_configure)
vector wpnpos;
vector wpnsize;
- float fullammo_shells, fullammo_nails, fullammo_rockets, fullammo_cells, fullammo_fuel;
vector ammo_color;
float ammo_alpha;
wpnsize = eX * panel_size_x*(1/columns) + eY * panel_size_y*(1/rows);
float barsize_x, barsize_y, baroffset_x, baroffset_y;
- float show_ammo = autocvar_hud_panel_weapons_ammo;
- if (show_ammo)
- {
- fullammo_shells = autocvar_hud_panel_weapons_ammo_full_shells;
- fullammo_nails = autocvar_hud_panel_weapons_ammo_full_nails;
- fullammo_rockets = autocvar_hud_panel_weapons_ammo_full_rockets;
- fullammo_cells = autocvar_hud_panel_weapons_ammo_full_cells;
- fullammo_fuel = autocvar_hud_panel_weapons_ammo_full_fuel;
+ if (autocvar_hud_panel_weapons_ammo)
+ {
ammo_color = stov(autocvar_hud_panel_weapons_ammo_color);
ammo_alpha = panel_fg_alpha * autocvar_hud_panel_weapons_ammo_alpha;
drawstring(wpnpos, getcommandkey(ftos(weapid), strcat("impulse ", ftos(weapid))), '1 1 0' * 0.5 * wpnsize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
// draw ammo status bar
- if(show_ammo && weapid != WEP_TUBA && weapid != WEP_LASER && weapid != WEP_PORTO)
+ if(autocvar_hud_panel_weapons_ammo && weapid != WEP_TUBA && weapid != WEP_LASER && weapid != WEP_PORTO)
{
a = 0;
type = GetAmmoTypeForWep(weapid);
if(a > 0)
{
switch(type) {
- case 0: fullammo = fullammo_shells; break;
- case 1: fullammo = fullammo_nails; break;
- case 2: fullammo = fullammo_rockets; break;
- case 3: fullammo = fullammo_cells; break;
- case 4: fullammo = fullammo_fuel; break;
+ case 0: fullammo = autocvar_hud_panel_weapons_ammo_full_shells; break;
+ case 1: fullammo = autocvar_hud_panel_weapons_ammo_full_nails; break;
+ case 2: fullammo = autocvar_hud_panel_weapons_ammo_full_rockets; break;
+ case 3: fullammo = autocvar_hud_panel_weapons_ammo_full_cells; break;
+ case 4: fullammo = autocvar_hud_panel_weapons_ammo_full_fuel; break;
default: fullammo = 60;
}
if(!autocvar_hud_panel_ammo) return;
if(spectatee_status == -1) return;
}
+ else
+ hud_configure_active_panel = HUD_PANEL_AMMO;
- active_panel = HUD_PANEL_AMMO;
HUD_Panel_UpdateCvars(ammo);
vector pos, mySize;
pos = panel_pos;
// Powerups (#2)
//
-void HUD_Powerups(void) {
+void HUD_Powerups(void)
+{
+ float strength_time, shield_time;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_powerups) return;
if(spectatee_status == -1) return;
if not(getstati(STAT_ITEMS) & (IT_STRENGTH | IT_INVINCIBLE)) return;
if (getstati(STAT_HEALTH) <= 0) return;
+
+ strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
+ shield_time = bound(0, getstatf(STAT_INVINCIBLE_FINISHED) - time, 99);
+ }
+ else
+ {
+ hud_configure_active_panel = HUD_PANEL_POWERUPS;
+
+ strength_time = 15;
+ shield_time = 27;
}
- active_panel = HUD_PANEL_POWERUPS;
HUD_Panel_UpdateCvars(powerups);
vector pos, mySize;
pos = panel_pos;
mySize = panel_size;
- float strength_time, shield_time;
- if(autocvar__hud_configure)
- {
- strength_time = 15;
- shield_time = 27;
- }
- else
- {
- strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
- shield_time = bound(0, getstatf(STAT_INVINCIBLE_FINISHED) - time, 99);
- }
-
HUD_Panel_DrawBg(bound(0, max(strength_time, shield_time), 1));
if(panel_bg_padding)
{
drawfont = hud_bigfont;
float baralign = autocvar_hud_panel_powerups_baralign;
float iconalign = autocvar_hud_panel_powerups_iconalign;
- float progressbar = autocvar_hud_panel_powerups_progressbar;
+
float panel_ar = mySize_x/mySize_y;
float is_vertical = (panel_ar < 1);
if (panel_ar >= 4 || (panel_ar >= 1/4 && panel_ar < 1))
barsize = eX * 0.5 * mySize_x + eY * mySize_y;
if(leftcnt)
{
- if(progressbar)
+ if(autocvar_hud_panel_powerups_progressbar)
{
HUD_Panel_GetProgressBarColorForString(leftname);
HUD_Panel_DrawProgressBar(pos, barsize, leftprogressname, leftcnt/30, is_vertical, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
if(rightcnt)
{
pos_x += barsize_x;
- if(progressbar)
+ if(autocvar_hud_panel_powerups_progressbar)
{
HUD_Panel_GetProgressBarColorForString(rightname);
HUD_Panel_DrawProgressBar(pos, barsize, rightprogressname, rightcnt/30, is_vertical, (baralign == 1 || baralign == 3), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
barsize = eX * mySize_x + eY * 0.5 * mySize_y;
if(leftcnt)
{
- if(progressbar)
+ if(autocvar_hud_panel_powerups_progressbar)
{
HUD_Panel_GetProgressBarColorForString(leftname);
HUD_Panel_DrawProgressBar(pos, barsize, leftprogressname, leftcnt/30, is_vertical, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
if(rightcnt)
{
pos_y += barsize_y;
- if(progressbar)
+ if(autocvar_hud_panel_powerups_progressbar)
{
HUD_Panel_GetProgressBarColorForString(rightname);
HUD_Panel_DrawProgressBar(pos, barsize, rightprogressname, rightcnt/30, is_vertical, (baralign == 1 || baralign == 3), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha * bound(0, max(strength_time, shield_time), 1), DRAWFLAG_NORMAL);
//
void HUD_HealthArmor(void)
{
+ float armor, health, fuel;
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_healtharmor) return;
if(spectatee_status == -1) return;
+
+ health = getstati(STAT_HEALTH);
+ if(health <= 0)
+ return;
+ armor = getstati(STAT_ARMOR);
+ fuel = getstati(STAT_FUEL);
+ }
+ else
+ {
+ hud_configure_active_panel = HUD_PANEL_HEALTHARMOR;
+
+ health = 150;
+ armor = 75;
+ fuel = 20;
}
- active_panel = HUD_PANEL_HEALTHARMOR;
HUD_Panel_UpdateCvars(healtharmor);
vector pos, mySize;
pos = panel_pos;
mySize -= '2 2 0' * panel_bg_padding;
}
- float armor, health, fuel;
- armor = getstati(STAT_ARMOR);
- health = getstati(STAT_HEALTH);
- fuel = getstati(STAT_FUEL);
-
- if(autocvar__hud_configure)
- {
- armor = 75;
- health = 150;
- fuel = 20;
- }
-
- if(health <= 0)
- return;
-
vector barsize;
vector picpos, numpos;
drawfont = hud_bigfont;
float baralign = autocvar_hud_panel_healtharmor_baralign;
float iconalign = autocvar_hud_panel_healtharmor_iconalign;
- float progressbar = autocvar_hud_panel_healtharmor_progressbar;
float maxhealth = autocvar_hud_panel_healtharmor_maxhealth;
float maxarmor = autocvar_hud_panel_healtharmor_maxarmor;
if(v_z) // NOT fully armored
{
biggercount = "health";
- if(progressbar)
+ if(autocvar_hud_panel_healtharmor_progressbar)
{
HUD_Panel_GetProgressBarColor(health);
HUD_Panel_DrawProgressBar(pos, mySize, autocvar_hud_panel_healtharmor_progressbar_health, x/maxtotal, 0, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
else
{
biggercount = "armor";
- if(progressbar)
+ if(autocvar_hud_panel_healtharmor_progressbar)
{
HUD_Panel_GetProgressBarColor(armor);
HUD_Panel_DrawProgressBar(pos, mySize, autocvar_hud_panel_healtharmor_progressbar_armor, x/maxtotal, 0, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
barsize = eX * 0.5 * mySize_x + eY * mySize_y;
if(leftactive)
{
- if(progressbar)
+ if(autocvar_hud_panel_healtharmor_progressbar)
{
HUD_Panel_GetProgressBarColorForString(leftname);
HUD_Panel_DrawProgressBar(pos, barsize, leftprogressname, leftcnt/leftmax, is_vertical, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
if(rightactive)
{
- if(progressbar)
+ if(autocvar_hud_panel_healtharmor_progressbar)
{
HUD_Panel_GetProgressBarColorForString(rightname);
HUD_Panel_DrawProgressBar(pos + eX * 0.5 * mySize_x, barsize, rightprogressname, rightcnt/rightmax, is_vertical, (baralign == 1 || baralign == 3), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
barsize = eX * mySize_x + eY * 0.5 * mySize_y;
if(leftactive)
{
- if(progressbar)
+ if(autocvar_hud_panel_healtharmor_progressbar)
{
HUD_Panel_GetProgressBarColorForString(leftname);
HUD_Panel_DrawProgressBar(pos, barsize, leftprogressname, leftcnt/leftmax, is_vertical, (baralign == 1 || baralign == 2), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
if(rightactive)
{
- if(progressbar)
+ if(autocvar_hud_panel_healtharmor_progressbar)
{
HUD_Panel_GetProgressBarColorForString(rightname);
HUD_Panel_DrawProgressBar(pos + eY * 0.5 * mySize_y, barsize, rightprogressname, rightcnt/rightmax, is_vertical, (baralign == 1 || baralign == 3), progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
void HUD_Notify (void)
{
- if(!autocvar_hud_panel_notify && !autocvar__hud_configure)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_notify) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_NOTIFY;
- active_panel = HUD_PANEL_NOTIFY;
HUD_Panel_UpdateCvars(notify);
vector pos, mySize;
pos = panel_pos;
void HUD_Timer(void)
{
- if(!autocvar_hud_panel_timer && !autocvar__hud_configure)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_timer) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_TIMER;
- active_panel = HUD_PANEL_TIMER;
HUD_Panel_UpdateCvars(timer);
vector pos, mySize;
pos = panel_pos;
//
void HUD_Radar(void)
{
- if ((autocvar_hud_panel_radar == 0 || (autocvar_hud_panel_radar != 2 && !teamplay)) && !autocvar__hud_configure)
- return;
+ if (!autocvar__hud_configure)
+ {
+ if (autocvar_hud_panel_radar == 0) return;
+ if (autocvar_hud_panel_radar != 2 && !teamplay) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_RADAR;
- active_panel = HUD_PANEL_RADAR;
HUD_Panel_UpdateCvars(radar);
vector pos, mySize;
pos = panel_pos;
if(hud_panel_radar_rotation == 0)
{
// max-min distance must fit the radar in any rotation
- bigsize = vlen_minnorm2d(teamradar_size2d) * scale2d / (1.05 * vlen2d(mi_max - mi_min));
+ bigsize = vlen_minnorm2d(teamradar_size2d) * scale2d / (1.05 * vlen2d(mi_scale));
}
else
{
f * bigsize
+ (1 - f) * normalsize;
teamradar_origin3d_in_texcoord = teamradar_3dcoord_to_texcoord(
- f * (mi_min + mi_max) * 0.5
+ f * mi_center
+ (1 - f) * view_origin);
drawsetcliparea(
void HUD_UpdatePlayerTeams();
void HUD_Score(void)
{
- if(!autocvar__hud_configure && !autocvar_hud_panel_score)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_score) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_SCORE;
- active_panel = HUD_PANEL_SCORE;
HUD_Panel_UpdateCvars(score);
vector pos, mySize;
pos = panel_pos;
drawstring_aspect(pos, timer, eX * 0.75 * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
drawfont = hud_font;
} else if (!teamplay) { // non-teamgames
- if ((spectatee_status == -1 && !autocvar__hud_configure) || cvar("hud_panel_score_rankings"))
+ if ((spectatee_status == -1 && !autocvar__hud_configure) || autocvar_hud_panel_score_rankings)
{
#define SCOREPANEL_MAX_ENTRIES 6
#define SCOREPANEL_ASPECTRATIO 2
//simulate my score is lower than all displayed players,
//so that I don't appear at all showing pure rankings.
//This is to better show the difference between the 2 ranking views
- if (i == entries-1 && cvar("hud_panel_score_rankings") == 1)
+ if (i == entries-1 && autocvar_hud_panel_score_rankings == 1)
{
rgb = '1 1 0';
drawfill(pos - eY * (height * (1 - 0.9) / 2), eX * mySize_x + eY * height, rgb, 0.3 * panel_fg_alpha, DRAWFLAG_NORMAL);
continue;
if (i == entries-1 && !me_printed && pl != me)
- if (cvar("hud_panel_score_rankings") == 1 && spectatee_status != -1)
+ if (autocvar_hud_panel_score_rankings == 1 && spectatee_status != -1)
{
for (pl = me.sort_next; pl; pl = pl.sort_next)
if (pl.team != COLOR_SPECTATOR)
// Race timer (#8)
//
-void HUD_RaceTimer (void) {
+void HUD_RaceTimer (void)
+{
if(!autocvar__hud_configure)
{
if(!autocvar_hud_panel_racetimer) return;
if(!(gametype == GAME_RACE || gametype == GAME_CTS)) return;
if(spectatee_status == -1) return;
}
+ else
+ hud_configure_active_panel = HUD_PANEL_RACETIMER;
- active_panel = HUD_PANEL_RACETIMER;
HUD_Panel_UpdateCvars(racetimer);
vector pos, mySize;
pos = panel_pos;
void HUD_VoteWindow(void)
{
- uid2name_dialog = 0;
if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE))
{
vote_active = 1;
- vote_called_vote = strzone(strcat("^2Name ^7instead of \"^1Unregistered player\"", " ^7in stats"));
- uid2name_dialog = 1;
+ if (autocvar__hud_configure)
+ {
+ vote_yescount = 0;
+ vote_nocount = 0;
+ print("^1You have to answer before entering hud configure mode\n");
+ cvar_set("_hud_configure", "0");
+ }
+ vote_called_vote = strzone("^2Name ^7instead of \"^1Unregistered player^7\" in stats");
+ uid2name_dialog = 1;
}
- if(!autocvar_hud_panel_vote && !autocvar__hud_configure)
- return;
-
if(!autocvar__hud_configure)
{
+ if(!autocvar_hud_panel_vote) return;
+
panel_fg_alpha = autocvar_hud_panel_fg_alpha;
panel_bg_alpha_str = autocvar_hud_panel_vote_bg_alpha;
}
panel_bg_alpha = stof(panel_bg_alpha_str);
}
+ else
+ {
+ hud_configure_active_panel = HUD_PANEL_VOTE;
+
+ vote_yescount = 3;
+ vote_nocount = 2;
+ vote_needed = 4;
+ }
string s;
float a;
else
vote_alpha = bound(0, 1 - (time - vote_change) * 2, 1);
- if(autocvar__hud_configure)
- {
- vote_yescount = 3;
- vote_nocount = 2;
- vote_needed = 4;
- }
-
if(!vote_alpha)
return;
- active_panel = HUD_PANEL_VOTE;
HUD_Panel_UpdateCvars(vote);
if(uid2name_dialog)
void HUD_ModIcons(void)
{
- if(!autocvar_hud_panel_modicons && !autocvar__hud_configure)
- return;
-
- if (gametype != GAME_KEYHUNT && gametype != GAME_CTF && gametype != GAME_NEXBALL && gametype != GAME_CTS && gametype != GAME_RACE && gametype != GAME_CA && gametype != GAME_FREEZETAG && gametype != GAME_KEEPAWAY && !autocvar__hud_configure)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_modicons) return;
+ if (gametype != GAME_CTF && gametype != GAME_KEYHUNT && gametype != GAME_NEXBALL && gametype != GAME_CTS && gametype != GAME_RACE && gametype != GAME_CA && gametype != GAME_FREEZETAG && gametype != GAME_KEEPAWAY) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_MODICONS;
- active_panel = HUD_PANEL_MODICONS;
HUD_Panel_UpdateCvars(modicons);
vector pos, mySize;
pos = panel_pos;
//
void HUD_DrawPressedKeys(void)
{
- if(!autocvar_hud_panel_pressedkeys && !autocvar__hud_configure)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_pressedkeys) return;
+ if(spectatee_status <= 0 && autocvar_hud_panel_pressedkeys < 2) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_PRESSEDKEYS;
- if(!(spectatee_status > 0 || autocvar_hud_panel_pressedkeys >= 2 || autocvar__hud_configure))
- return;
- active_panel = HUD_PANEL_PRESSEDKEYS;
HUD_Panel_UpdateCvars(pressedkeys);
vector pos, mySize;
pos = panel_pos;
//
void HUD_Chat(void)
{
- if(!autocvar_hud_panel_chat && !autocvar__hud_configure)
+ if(!autocvar__hud_configure)
{
- cvar_set("con_chatrect", "0");
- return;
+ if (!autocvar_hud_panel_chat)
+ {
+ if (!autocvar_con_chatrect)
+ cvar_set("con_chatrect", "0");
+ return;
+ }
}
+ else
+ hud_configure_active_panel = HUD_PANEL_CHAT;
- active_panel = HUD_PANEL_CHAT;
HUD_Panel_UpdateCvars(chat);
if(autocvar__con_chat_maximized && !autocvar__hud_configure) // draw at full screen height if maximized
mySize -= '2 2 0' * panel_bg_padding;
}
- cvar_set("con_chatrect", "1");
+ if (!autocvar_con_chatrect)
+ cvar_set("con_chatrect", "1");
cvar_set("con_chatrect_x", ftos(pos_x/vid_conwidth));
cvar_set("con_chatrect_y", ftos(pos_y/vid_conheight));
if(autocvar__hud_configure)
{
- float chatsize;
- chatsize = autocvar_con_chatsize;
+ vector chatsize;
+ chatsize = '1 1 0' * autocvar_con_chatsize;
cvar_set("con_chatrect_x", "9001"); // over 9000, we'll fake it instead for more control over alpha and such
float i, a;
for(i = 0; i < autocvar_con_chat; ++i)
a = panel_fg_alpha;
else
a = panel_fg_alpha * floor(((i + 1) * 7 + autocvar_con_chattime)/45);
- drawcolorcodedstring(pos + eY * i * chatsize, textShortenToWidth("^3Player^7: This is the chat area.", mySize_x, '1 1 0' * chatsize, stringwidth_colors), '1 1 0' * chatsize, a, DRAWFLAG_NORMAL);
+ drawcolorcodedstring(pos, textShortenToWidth("^3Player^7: This is the chat area.", mySize_x, chatsize, stringwidth_colors), chatsize, a, DRAWFLAG_NORMAL);
+ pos_y += chatsize_y;
}
}
}
float frametimeavg2; // 2 frames ago
void HUD_EngineInfo(void)
{
- if(!autocvar_hud_panel_engineinfo && !autocvar__hud_configure)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_engineinfo) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_ENGINEINFO;
- active_panel = HUD_PANEL_ENGINEINFO;
HUD_Panel_UpdateCvars(engineinfo);
vector pos, mySize;
pos = panel_pos;
o_y += fontsize_y;
void HUD_InfoMessages(void)
{
- if(!autocvar_hud_panel_infomessages && !autocvar__hud_configure)
- return;
+ if(!autocvar__hud_configure)
+ {
+ if(!autocvar_hud_panel_infomessages) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_INFOMESSAGES;
- active_panel = HUD_PANEL_INFOMESSAGES;
HUD_Panel_UpdateCvars(infomessages);
vector pos, mySize;
pos = panel_pos;
}
}
-/*
-==================
-Main HUD system
-==================
-*/
+// Physics panel (#15)
+//
+vector acc_prevspeed;
+float acc_prevtime, acc_avg, top_speed, top_speed_time;
-void HUD_ShowSpeed(void)
+void HUD_Physics(void)
{
- vector numsize;
- float pos, conversion_factor;
- string speed, zspeed, unit;
+ if(!autocvar_hud_panel_physics)
+ {
+ if(!autocvar__hud_configure) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_PHYSICS;
+
+ HUD_Panel_UpdateCvars(physics);
+
+ HUD_Panel_DrawBg(1);
+ if(panel_bg_padding)
+ {
+ panel_pos += '1 1 0' * panel_bg_padding;
+ panel_size -= '2 2 0' * panel_bg_padding;
+ }
+
+ //compute speed
+ float speed, conversion_factor;
+ string unit;
switch(autocvar_cl_showspeed_unit)
{
default:
- case 0:
- unit = "";
- conversion_factor = 1.0;
- break;
case 1:
- unit = " qu/s";
+ unit = "qu/s";
conversion_factor = 1.0;
break;
case 2:
- unit = " m/s";
+ unit = "m/s";
conversion_factor = 0.0254;
break;
case 3:
- unit = " km/h";
+ unit = "km/h";
conversion_factor = 0.0254 * 3.6;
break;
case 4:
- unit = " mph";
+ unit = "mph";
conversion_factor = 0.0254 * 3.6 * 0.6213711922;
break;
case 5:
- unit = " knots";
+ unit = "knots";
conversion_factor = 0.0254 * 1.943844492; // 1 m/s = 1.943844492 knots, because 1 knot = 1.852 km/h
break;
}
- speed = strcat(ftos(floor( vlen(pmove_vel - pmove_vel_z * '0 0 1') * conversion_factor + 0.5 )), unit);
-
- numsize_x = numsize_y = autocvar_cl_showspeed_size;
- pos = (vid_conheight - numsize_y) * autocvar_cl_showspeed_position;
+ float max_speed = floor( autocvar_hud_panel_physics_speed_max * conversion_factor + 0.5 );
+ if (autocvar__hud_configure)
+ speed = floor( max_speed * 0.65 + 0.5 );
+ else if(autocvar_hud_panel_physics_speed_z)
+ speed = floor( vlen(pmove_vel) * conversion_factor + 0.5 );
+ else
+ speed = floor( vlen(pmove_vel - pmove_vel_z * '0 0 1') * conversion_factor + 0.5 );
- drawfont = hud_bigfont;
- drawstringcenter(eX + pos * eY, speed, numsize, '1 1 1', autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
+ //compute acceleration
+ float acceleration, f;
+ if (autocvar__hud_configure)
+ acceleration = autocvar_hud_panel_physics_acceleration_max * 0.3;
+ else
+ {
+ f = time - acc_prevtime;
+ if(autocvar_hud_panel_physics_acceleration_z)
+ acceleration = (vlen(pmove_vel) - vlen(acc_prevspeed)) * (1 / f);
+ else
+ acceleration = (vlen(pmove_vel - '0 0 1' * pmove_vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z)) * (1 / f);
+ acc_prevspeed = pmove_vel;
+ acc_prevtime = time;
- if (autocvar_cl_showspeed_z == 1) {
- zspeed = strcat(ftos(fabs(floor( pmove_vel_z * conversion_factor + 0.5 ))), unit);
- drawstringcenter(eX + pos * eY + numsize_y * eY, zspeed, numsize * 0.5, '1 1 1', autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
+ f = bound(0, f * 10, 1);
+ acc_avg = acc_avg * (1 - f) + acceleration * f;
+ acceleration = acc_avg / getstatf(STAT_MOVEVARS_MAXSPEED);
}
- drawfont = hud_font;
-}
+ //compute layout
+ drawfont = hud_bigfont;
+ float panel_ar = panel_size_x/panel_size_y;
+ vector speed_offset, acceleration_offset;
+ if (panel_ar >= 5)
+ {
+ panel_size_x *= 0.5;
+ if (autocvar_hud_panel_physics_flip)
+ speed_offset_x = panel_size_x;
+ else
+ acceleration_offset_x = panel_size_x;
+ }
+ else
+ {
+ panel_size_y *= 0.5;
+ if (autocvar_hud_panel_physics_flip)
+ speed_offset_y = panel_size_y;
+ else
+ acceleration_offset_y = panel_size_y;
+ }
+ float speed_baralign, acceleration_baralign;
+ if (autocvar_hud_panel_physics_baralign == 1)
+ acceleration_baralign = speed_baralign = 1;
+ else if (autocvar_hud_panel_physics_flip)
+ {
+ acceleration_baralign = (autocvar_hud_panel_physics_baralign == 2);
+ speed_baralign = (autocvar_hud_panel_physics_baralign == 3);
+ }
+ else
+ {
+ speed_baralign = (autocvar_hud_panel_physics_baralign == 2);
+ acceleration_baralign = (autocvar_hud_panel_physics_baralign == 3);
+ }
-vector acc_prevspeed;
-float acc_prevtime;
-float acc_avg;
+ //draw speed
+ if(speed && autocvar_hud_panel_physics_progressbar)
+ {
+ HUD_Panel_GetProgressBarColor(speed);
+ HUD_Panel_DrawProgressBar(panel_pos + speed_offset, panel_size, "progressbar", speed/max_speed, 0, speed_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+ }
-void HUD_ShowAcceleration(void)
-{
- float acceleration, sz, scale, alpha, f;
- vector pos, mySize, rgb;
+ vector tmp_offset, tmp_size;
+ tmp_size_x = panel_size_x * 0.75;
+ tmp_size_y = panel_size_y;
+ if (speed_baralign)
+ tmp_offset_x = panel_size_x - tmp_size_x;
+ //else
+ //tmp_offset_x = 0;
+ drawstring_aspect(panel_pos + speed_offset + tmp_offset, ftos(speed), tmp_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
- f = time - acc_prevtime;
- if(autocvar_cl_showacceleration_z)
- acceleration = (vlen(pmove_vel) - vlen(acc_prevspeed)) * (1 / f);
+ //draw speed unit
+ if (speed_baralign)
+ tmp_offset_x = 0;
else
- acceleration = (vlen(pmove_vel - '0 0 1' * pmove_vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z)) * (1 / f);
- acc_prevspeed = pmove_vel;
- acc_prevtime = time;
-
- 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;
-
- sz = autocvar_cl_showacceleration_size;
- scale = autocvar_cl_showacceleration_scale;
- alpha = autocvar_cl_showacceleration_alpha;
- if (autocvar_cl_showacceleration_color_custom)
- rgb = stov(autocvar_cl_showacceleration_color);
- else {
- if (acceleration < 0)
- rgb = '1 .5 .5' - '0 .5 .5' * bound(0, -acceleration * 0.2, 1);
- else
- rgb = '.5 1 .5' - '.5 0 .5' * bound(0, +acceleration * 0.2, 1);
+ tmp_offset_x = tmp_size_x;
+ if (autocvar_hud_panel_physics_speed_unit_show)
+ {
+ //tmp_offset_y = 0;
+ tmp_size_x = panel_size_x * (1 - 0.75);
+ tmp_size_y = panel_size_y * 0.4;
+ drawstring_aspect(panel_pos + speed_offset + tmp_offset, unit, tmp_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
}
- mySize_x = vid_conwidth/2;
- mySize_y = sz;
- pos_y = autocvar_cl_showacceleration_position * vid_conheight - sz/2;
- if (acceleration > 0)
+ //compute and draw top speed
+ if (autocvar_hud_panel_physics_topspeed)
{
- pos_x = mySize_x;
- HUD_Panel_DrawProgressBar(pos, mySize, "statusbar", acceleration * scale, 0, 0, rgb, alpha * autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
+ if (autocvar__hud_configure)
+ {
+ top_speed = floor( max_speed * 0.75 + 0.5 );
+ f = 1;
+ }
+ else
+ {
+ if (speed >= top_speed)
+ {
+ top_speed = speed;
+ top_speed_time = time;
+ }
+ if (top_speed == 0) //hide top speed 0, it would be stupid
+ f = 0;
+ else
+ {
+ f = max(1, autocvar_hud_panel_physics_topspeed_time);
+ // divide by f to make it start from 1
+ f = cos( ((time - top_speed_time) / f) * PI/2 );
+ }
+ }
+ if (f > 0)
+ {
+ //top speed progressbar peek
+ if(autocvar_hud_panel_physics_progressbar && speed < top_speed)
+ {
+ float peek_offset_x, peek_size_x;
+ if (speed_baralign)
+ peek_offset_x = (1 - min(top_speed, max_speed)/max_speed) * panel_size_x;
+ else
+ peek_offset_x = min(top_speed, max_speed)/max_speed * panel_size_x;
+ //if speed is not 0 the speed progressbar already fetched the color
+ if (speed == 0)
+ HUD_Panel_GetProgressBarColor(speed);
+ peek_size_x = panel_size_x * 0.01;
+ drawfill(panel_pos + speed_offset + eX * (peek_offset_x - peek_size_x), eX * peek_size_x + eY * panel_size_y, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+ }
+
+ //top speed
+ tmp_offset_y = panel_size_y * 0.4;
+ tmp_size_x = panel_size_x * (1 - 0.75);
+ tmp_size_y = panel_size_y - tmp_offset_y;
+ drawstring_aspect(panel_pos + speed_offset + tmp_offset, ftos(top_speed), tmp_size, '1 0 0', f * panel_fg_alpha, DRAWFLAG_NORMAL);
+ }
+ else
+ top_speed = 0;
}
- else
+
+ //draw acceleration
+ if(acceleration && autocvar_hud_panel_physics_progressbar)
{
- //pos_x = 0;
- HUD_Panel_DrawProgressBar(pos, mySize, "statusbar", -acceleration * scale, 0, 1, rgb, alpha * autocvar_hud_panel_fg_alpha * hud_fade_alpha, DRAWFLAG_NORMAL);
+ if (acceleration < 0)
+ HUD_Panel_GetProgressBarColor(acceleration_neg);
+ else
+ HUD_Panel_GetProgressBarColor(acceleration);
+ HUD_Panel_DrawProgressBar(panel_pos + acceleration_offset, panel_size, "progressbar", fabs(acceleration)/autocvar_hud_panel_physics_acceleration_max, 0, acceleration_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
}
+ drawstring_aspect(panel_pos + acceleration_offset, ftos_decimals(acceleration, 3), panel_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawfont = hud_font;
}
+/*
+==================
+Main HUD system
+==================
+*/
+
void HUD_Reset (void)
{
// reset gametype specific icons
HUD_EngineInfo(); break;\
case (HUD_PANEL_INFOMESSAGES):\
HUD_InfoMessages(); break;\
+ case (HUD_PANEL_PHYSICS):\
+ HUD_Physics(); break;\
} ENDS_WITH_CURLY_BRACE
void HUD_Main (void)
}
// HUD configure visible grid
- float hud_configure_grid_alpha;
- if(autocvar__hud_configure && cvar("hud_configure_grid") && (hud_configure_grid_alpha = cvar("hud_configure_grid_alpha")))
+ if(autocvar__hud_configure && autocvar_hud_configure_grid && autocvar_hud_configure_grid_alpha)
{
hud_configure_gridSize_x = bound(0.005, cvar("hud_configure_grid_xsize"), 0.2);
hud_configure_gridSize_y = bound(0.005, cvar("hud_configure_grid_ysize"), 0.2);
hud_configure_realGridSize_y = hud_configure_gridSize_y * vid_conheight;
// x-axis
for(i = 0; i < 1/hud_configure_gridSize_x; ++i)
- drawfill(eX * i * hud_configure_realGridSize_x, eX + eY * vid_conheight, '0.5 0.5 0.5', hud_configure_grid_alpha, DRAWFLAG_NORMAL);
+ drawfill(eX * i * hud_configure_realGridSize_x, eX + eY * vid_conheight, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
// y-axis
for(i = 0; i < 1/hud_configure_gridSize_y; ++i)
- drawfill(eY * i * hud_configure_realGridSize_y, eY + eX * vid_conwidth, '0.5 0.5 0.5', hud_configure_grid_alpha, DRAWFLAG_NORMAL);
+ drawfill(eY * i * hud_configure_realGridSize_y, eY + eX * vid_conwidth, '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
}
// draw the dock
panel_order[i] = stof(argv(i));
}
}
+
// draw panels in order specified by panel_order array
for(i = HUD_PANEL_NUM - 1; i >= 0; --i) {
if(i != HUD_PANEL_CHAT || !autocvar__con_chat_maximized) // don't draw maximized chat panel twice!
if(autocvar__con_chat_maximized)
HUD_Chat(); // HUD_DrawPanel(HUD_PANEL_CHAT);
- // TODO hud_'ify these
- if (autocvar_cl_showspeed)
- HUD_ShowSpeed();
- if (autocvar_cl_showacceleration)
- HUD_ShowAcceleration();
-
if (autocvar__hud_configure && spectatee_status && hud_configure_prev == -1) // try to join if we are in hud_configure mode, but still spectating, and in the first frame (in order to get rid of motd when launching a server via the menu "HUD Setup" button)
localcmd("cmd selectteam auto; cmd join\n");
+ if(autocvar__hud_configure && tab_panel != -1)
+ {
+ HUD_Panel_UpdatePosSizeForId(tab_panel)
+ drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .2, DRAWFLAG_NORMAL);
+ }
+
hud_configure_prev = autocvar__hud_configure;
if (!autocvar__hud_configure) // hud config mode disabled, enable normal alpha stuff again