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:
#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 == 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
//basically the same code of draw_ButtonPicture and draw_VertButtonPicture for the menu
-void HUD_Panel_DrawProgressBar(vector theOrigin, vector theSize, string pic, float lenght_ratio, float vertical, float right_align, vector theColor, float theAlpha, float drawflag)
+void HUD_Panel_DrawProgressBar(vector theOrigin, vector theSize, string pic, float length_ratio, float vertical, float baralign, vector theColor, float theAlpha, float drawflag)
{
- if(lenght_ratio <= 0 || !theAlpha)
+ if(length_ratio <= 0 || !theAlpha)
return;
- if(lenght_ratio > 1)
- lenght_ratio = 1;
+ if(length_ratio > 1)
+ length_ratio = 1;
vector square;
vector width, height;
pic = "gfx/hud/default/statusbar_vertical";
}
- if (right_align)
- theOrigin_y += (1 - lenght_ratio) * theSize_y;
- theSize_y *= lenght_ratio;
+ if (baralign == 1) // bottom align
+ theOrigin_y += (1 - length_ratio) * theSize_y;
+ else if (baralign == 2) // center align
+ theOrigin_y += 0.5 * (1 - length_ratio) * theSize_y;
+ theSize_y *= length_ratio;
vector bH;
width = eX * theSize_x;
pic = "gfx/hud/default/statusbar";
}
- if (right_align)
- theOrigin_x += (1 - lenght_ratio) * theSize_x;
- theSize_x *= lenght_ratio;
+ if (baralign == 1) // right align
+ theOrigin_x += (1 - length_ratio) * theSize_x;
+ else if (baralign == 2) // center align
+ theOrigin_x += 0.5 * (1 - length_ratio) * theSize_x;
+ theSize_x *= length_ratio;
vector bW;
width = eX * theSize_x;
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;
cvar_set(strcat("hud_panel_", panel_name, "_pos"), s);
}
-float mouseClicked;
-float prevMouseClicked; // previous state
-float prevMouseClickedTime; // time during previous mouse click, to check for doubleclicks
-vector prevMouseClickedPos; // pos during previous mouse click, to check for doubleclicks
-
float pressed_key_time;
+vector highlightedPanel_initial_pos, highlightedPanel_initial_size;
void HUD_Panel_Arrow_Action(float nPrimary)
{
- if (highlightedPanel_prev == -1 || mouseClicked)
+ if (highlightedPanel == -1)
return;
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)
{
step = (step / 64) * (1 + 2 * (time - pressed_key_time));
}
- highlightedPanel = highlightedPanel_prev;
-
HUD_Panel_UpdatePosSizeForId(highlightedPanel);
- vector prev_pos, prev_size;
- prev_pos = panel_pos;
- prev_size = panel_size;
+ highlightedPanel_initial_pos = panel_pos;
+ highlightedPanel_initial_size = panel_size;
if (hudShiftState & S_ALT) // resize
{
HUD_Panel_UpdatePosSizeForId(highlightedPanel);
- if (prev_pos != panel_pos || prev_size != panel_size)
+ if (highlightedPanel_initial_pos != panel_pos || highlightedPanel_initial_size != panel_size)
{
// backup!
- panel_pos_backup = prev_pos;
- panel_size_backup = prev_size;
+ panel_pos_backup = highlightedPanel_initial_pos;
+ panel_size_backup = highlightedPanel_initial_size;
highlightedPanel_backup = highlightedPanel;
}
}
+float mouseClicked;
+float prevMouseClicked; // previous state
+float prevMouseClickedTime; // time during previous mouse click, to check for doubleclicks
+vector prevMouseClickedPos; // pos during previous mouse click, to check for doubleclicks
+
void HUD_Panel_EnableMenu();
float tab_panels[HUD_PANEL_NUM];
float tab_panel, tab_backward;
if(nPrimary == K_CTRL)
{
- if (bInputType == 1)
+ if (bInputType == 1) //ctrl has been released
{
if (tab_panel != -1)
{
- //switch to selected panel when ctrl has been released
- highlightedPanel_prev = tab_panel;
- HUD_Panel_FirstInDrawQ(highlightedPanel_prev);
+ //switch to selected panel
+ highlightedPanel = tab_panel;
+ highlightedAction = 0;
+ HUD_Panel_FirstInDrawQ(highlightedPanel);
}
+ tab_panel = -1;
+ reset_tab_panels();
}
- //reset on press AND on release
- tab_panel = -1;
- reset_tab_panels();
}
if(nPrimary == K_MOUSE1)
return true;
}
}
- else if(nPrimary == K_TAB && hudShiftState & S_CTRL) //TODO: move this case down
+ else if(nPrimary == K_ESCAPE)
{
if (bInputType == 1)
return true;
+ menu_enabled = 1;
+ 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
float old_tab_panel = tab_panel;
if (tab_panel == -1) //first press of TAB
{
- if (highlightedPanel_prev != -1)
- HUD_Panel_UpdatePosSizeForId(highlightedPanel_prev)
+ if (highlightedPanel != -1)
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel)
else
panel_pos = '0 0 0';
- starting_panel = highlightedPanel_prev; //can be -1, it means no starting panel
+ starting_panel = highlightedPanel; //can be -1, it means no starting panel
tab_panel_pos = panel_pos; //to compute level
}
else
tab_panels[tab_panel] = tab_panel;
}
- else if(nPrimary == K_ESCAPE)
- {
- if (bInputType == 1)
- return true;
- menu_enabled = 1;
- menu_enabled_time = time;
- localcmd("menu_showhudexit\n");
- }
else if(nPrimary == K_SPACE && hudShiftState & S_CTRL) // enable/disable highlighted panel or dock
{
if (bInputType == 1 || mouseClicked)
return true;
- if (highlightedPanel_prev != -1)
+ if (highlightedPanel != -1)
+ {
+ HUD_Panel_GetName(highlightedPanel);
cvar_set(strcat("hud_panel_", panel_name), ftos(!(panel_enabled)));
+ }
else
cvar_set(strcat("hud_dock"), (autocvar_hud_dock == "") ? "dock" : "");
}
if (bInputType == 1 || mouseClicked)
return true;
- if (highlightedPanel_prev != -1)
+ if (highlightedPanel != -1)
{
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel);
panel_size_copied = panel_size;
- highlightedPanel_copied = highlightedPanel_prev;
+ highlightedPanel_copied = highlightedPanel;
}
}
else if(nPrimary == 'v' && hudShiftState & S_CTRL) // past copied size on the highlighted panel
if (bInputType == 1 || mouseClicked)
return true;
- if (highlightedPanel_copied == -1 || highlightedPanel_prev == -1)
+ if (highlightedPanel_copied == -1 || highlightedPanel == -1)
return true;
- HUD_Panel_UpdatePosSizeForId(highlightedPanel_prev);
+ HUD_Panel_UpdatePosSizeForId(highlightedPanel);
// reduce size if it'd go beyond screen boundaries
vector tmp_size = panel_size_copied;
// backup first!
panel_pos_backup = panel_pos;
panel_size_backup = panel_size;
- highlightedPanel_backup = highlightedPanel_prev;
+ highlightedPanel_backup = highlightedPanel;
s = strcat(ftos(tmp_size_x/vid_conwidth), " ", ftos(tmp_size_y/vid_conheight));
+ HUD_Panel_GetName(highlightedPanel);
cvar_set(strcat("hud_panel_", panel_name, "_size"), s);
}
else if(nPrimary == 'z' && hudShiftState & S_CTRL) // undo last action
else if (pressed_key_time == 0)
pressed_key_time = time;
- HUD_Panel_Arrow_Action(nPrimary); //move or resize panel
+ if (!mouseClicked)
+ 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;
+ if (highlightedPanel != -1)
HUD_Panel_EnableMenu();
- }
}
else if(hit_con_bind)
return false;
return true;
}
-float HUD_Panel_HighlightCheck()
+float HUD_Panel_Check_Mouse_Pos()
{
float i, j, border;
panel_click_resizeorigin = panel_pos;
return;
}
- else
- {
- highlightedPanel_prev = -1;
- }
}
+ highlightedPanel = -1;
+ highlightedAction = 0;
}
void HUD_Panel_EnableMenu()
HUD_Panel_GetName(highlightedPanel);
localcmd("menu_showhudoptions ", panel_name, "\n");
}
-float highlightcheck;
-vector prev_pos, prev_size;
+float mouse_over_panel;
void HUD_Panel_Mouse()
{
// TODO: needs better check... is there any float that contains the current state of the menu? _menu_alpha isn't apparently updated the frame the menu gets enabled
if(menu_enabled == 1 || (menu_enabled == 2 && !hud_fade_alpha))
return;
- if(mouseClicked == 0 && menu_enabled != 2 && highlightedPanel >= 0) { // don't reset these variables in menu_enabled mode 2!
- highlightedPanel = -1;
- highlightedAction = 0;
- }
- if(highlightedPanel != -1)
- highlightedPanel_prev = highlightedPanel;
-
mousepos = mousepos + getmousepos() * autocvar_menu_mouse_speed;
mousepos_x = bound(0, mousepos_x, vid_conwidth);
{
if(prevMouseClicked == 0)
{
+ if (tab_panel != -1)
+ {
+ //stop ctrl-tab selection
+ tab_panel = -1;
+ reset_tab_panels();
+ }
HUD_Panel_Highlight(); // sets highlightedPanel, highlightedAction, panel_click_distance, panel_click_resizeorigin
// and calls HUD_Panel_UpdatePosSizeForId() for the highlighted panel
- prev_pos = panel_pos;
- prev_size = panel_size;
+ if (highlightedPanel != -1)
+ {
+ highlightedPanel_initial_pos = panel_pos;
+ highlightedPanel_initial_size = panel_size;
+ }
+ // doubleclick check
+ if (time - prevMouseClickedTime < 0.4 && highlightedPanel != -1 && prevMouseClickedPos == mousepos)
+ {
+ mouseClicked = 0; // to prevent spam, I guess.
+ HUD_Panel_EnableMenu();
+ }
+ else
+ {
+ prevMouseClickedTime = time;
+ prevMouseClickedPos = mousepos;
+ }
}
else
HUD_Panel_UpdatePosSizeForId(highlightedPanel);
- if (prev_pos != panel_pos || prev_size != panel_size)
+ if (highlightedPanel != -1)
{
- hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
- // backup!
- panel_pos_backup = prev_pos;
- panel_size_backup = prev_size;
- highlightedPanel_backup = highlightedPanel;
+ drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL);
+ if (highlightedPanel_initial_pos != panel_pos || highlightedPanel_initial_size != panel_size)
+ {
+ hud_configure_checkcollisions = (!(hudShiftState & S_CTRL) && autocvar_hud_configure_checkcollisions);
+ // backup!
+ panel_pos_backup = highlightedPanel_initial_pos;
+ panel_size_backup = highlightedPanel_initial_size;
+ highlightedPanel_backup = highlightedPanel;
+ }
+ else
+ // in case the clicked panel is inside another panel and we aren't
+ // moving it, avoid the immediate "fix" of its position/size
+ // (often unwanted and hateful) by disabling collisions check
+ hud_configure_checkcollisions = false;
}
- else
- // in case the clicked panel is inside another panel and we aren't
- // moving it, avoid the immediate "fix" of its position/size
- // (often unwanted and hateful) by disabling collisions check
- hud_configure_checkcollisions = false;
if(highlightedAction == 1)
HUD_Panel_SetPos(mousepos - panel_click_distance);
}
HUD_Panel_SetPosSize(mySize);
}
-
- // doubleclick check
- if(time - prevMouseClickedTime < 0.4 && prevMouseClicked == 0 && prevMouseClickedPos == mousepos && highlightedPanel >= 0)
- {
- mouseClicked = 0; // to prevent spam, I guess.
- HUD_Panel_EnableMenu();
- return;
- }
- if(prevMouseClicked == 0)
- {
- prevMouseClickedTime = time;
- prevMouseClickedPos = mousepos;
- }
}
else
{
- highlightcheck = HUD_Panel_HighlightCheck();
+ mouse_over_panel = HUD_Panel_Check_Mouse_Pos();
+ if (mouse_over_panel && tab_panel == -1)
+ drawfill(panel_pos - '1 1 0' * panel_bg_border, panel_size + '2 2 0' * panel_bg_border, '1 1 1', .1, DRAWFLAG_NORMAL);
}
- // draw cursor after performing move/resize to have the panel pos/size updated before highlightcheck
- vector cursorsize;
- cursorsize = '32 32 0';
+ // draw cursor after performing move/resize to have the panel pos/size updated before mouse_over_panel
+ const vector cursorsize = '32 32 0';
- if(highlightcheck == 0)
+ if(!mouse_over_panel)
drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), cursorsize, '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
- else if(highlightcheck == 1)
+ else if(mouse_over_panel == 1)
drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_move.tga"), cursorsize, '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
- else if(highlightcheck == 2)
+ else if(mouse_over_panel == 2)
drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_resize.tga"), cursorsize, '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
else
drawpic(mousepos - cursorsize * 0.5, strcat("gfx/menu/", autocvar_menu_skin, "/cursor_resize2.tga"), cursorsize, '1 1 1', hud_fade_alpha, DRAWFLAG_NORMAL);
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)
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)
{
//
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;
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;
+ if(spectatee_status == -1 && (gametype == GAME_RACE || gametype == GAME_CTS)) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_SCORE;
- active_panel = HUD_PANEL_SCORE;
HUD_Panel_UpdateCvars(score);
vector pos, mySize;
pos = panel_pos;
{
#define SCOREPANEL_MAX_ENTRIES 6
#define SCOREPANEL_ASPECTRATIO 2
- float entries = bound(1, floor(SCOREPANEL_MAX_ENTRIES * mySize_y/mySize_x * SCOREPANEL_ASPECTRATIO), SCOREPANEL_MAX_ENTRIES);
- float height = mySize_y/entries;
- vector fontsize = '0.9 0.9 0' * height;
+ const float entries = bound(1, floor(SCOREPANEL_MAX_ENTRIES * mySize_y/mySize_x * SCOREPANEL_ASPECTRATIO), SCOREPANEL_MAX_ENTRIES);
+ const float height = mySize_y/entries;
+ const vector fontsize = '0.9 0.9 0' * height;
pos_y += height * (1 - 0.9) / 2;
vector rgb;
rgb = '1 1 1';
- float name_size = mySize_x*0.75;
+ const float name_size = mySize_x*0.75;
+ const float highlight_alpha = 0.2;
float i, me_printed;
string s;
if (autocvar__hud_configure)
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);
+ drawfill(pos - eY * (height * (1 - 0.9) / 2), eX * mySize_x + eY * height, rgb, highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
s = GetPlayerName(pl.sv_entnum);
score = 7;
}
if (i == 0)
rgb = '0 1 0'; //first: green
me_printed = 1;
- drawfill(pos - eY * (height * (1 - 0.9) / 2), eX * mySize_x + eY * height, rgb, 0.3 * panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawfill(pos - eY * (height * (1 - 0.9) / 2), eX * mySize_x + eY * height, rgb, highlight_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
}
s = textShortenToWidth(GetPlayerName(pl.sv_entnum), name_size, fontsize, stringwidth_colors);
drawcolorcodedstring(pos + eX * (name_size - stringwidth(s, TRUE, fontsize)), s, fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
// 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)
drawfont = hud_font;
}
+void DrawDomItem(vector myPos, vector mySize, float aspect_ratio, float layout, float i)
+{
+ float stat, pps_ratio;
+ string pic;
+ vector color;
+ switch(i)
+ {
+ case 0:
+ stat = getstatf(STAT_DOM_PPS_RED);
+ pic = "dom_icon_red";
+ color = '1 0 0';
+ break;
+ case 1:
+ stat = getstatf(STAT_DOM_PPS_BLUE);
+ pic = "dom_icon_blue";
+ color = '0 0 1';
+ break;
+ case 2:
+ stat = getstatf(STAT_DOM_PPS_YELLOW);
+ pic = "dom_icon_yellow";
+ color = '1 1 0';
+ break;
+ case 3:
+ stat = getstatf(STAT_DOM_PPS_PINK);
+ pic = "dom_icon_pink";
+ color = '1 0 1';
+ }
+ pps_ratio = stat / getstatf(STAT_DOM_TOTAL_PPS);
+
+ if(mySize_x/mySize_y > aspect_ratio)
+ {
+ i = aspect_ratio * mySize_y;
+ myPos_x = myPos_x + (mySize_x - i) / 2;
+ mySize_x = i;
+ }
+ else
+ {
+ i = 1/aspect_ratio * mySize_x;
+ myPos_y = myPos_y + (mySize_y - i) / 2;
+ mySize_y = i;
+ }
+
+ if (layout) // show text too
+ {
+ //draw the text
+ color *= 0.5 + pps_ratio * (1 - 0.5); // half saturated color at min, full saturated at max
+ if (layout == 2) // average pps
+ drawstring_aspect(myPos + eX * mySize_y, ftos_decimals(stat, 2), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL);
+ else // percentage of average pps
+ drawstring_aspect(myPos + eX * mySize_y, strcat( ftos(floor(pps_ratio*100 + 0.5)), "%" ), eX * (2/3) * mySize_x + eY * mySize_y, color, panel_fg_alpha, DRAWFLAG_NORMAL);
+ }
+
+ //draw the icon
+ drawpic_aspect_skin(myPos, pic, '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ if (stat > 0)
+ {
+ drawsetcliparea(myPos_x, myPos_y + mySize_y * (1 - pps_ratio), mySize_y, mySize_y * pps_ratio);
+ drawpic_aspect_skin(myPos, strcat(pic, "-highlighted"), '1 1 0' * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawresetcliparea();
+ }
+}
+
+void HUD_Mod_Dom(vector myPos, vector mySize)
+{
+ mod_active = 1; // required in each mod function that always shows something
+ entity tm;
+ float teams_count;
+ for(tm = teams.sort_next; tm; tm = tm.sort_next)
+ if(tm.team != COLOR_SPECTATOR)
+ ++teams_count;
+
+ float layout = autocvar_hud_panel_modicons_dom_layout;
+ float rows, columns, aspect_ratio;
+ rows = mySize_y/mySize_x;
+ aspect_ratio = (layout) ? 3 : 1;
+ rows = bound(1, floor((sqrt((4 * aspect_ratio * teams_count + rows) * rows) + rows + 0.5) / 2), teams_count);
+ columns = ceil(teams_count/rows);
+
+ drawfont = hud_bigfont;
+ int i;
+ float row, column;
+ for(i=0; i<teams_count; ++i)
+ {
+ vector pos, itemSize;
+ pos = myPos + eX * column * mySize_x*(1/columns) + eY * row * mySize_y*(1/rows);
+ itemSize = eX * mySize_x*(1/columns) + eY * mySize_y*(1/rows);
+
+ DrawDomItem(pos, itemSize, aspect_ratio, layout, i);
+
+ ++row;
+ if(row >= rows)
+ {
+ row = 0;
+ ++column;
+ }
+ }
+ drawfont = hud_font;
+}
+
float mod_prev; // previous state of mod_active to check for a change
float mod_alpha;
float mod_change; // "time" when mod_active changed
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 && gametype != GAME_DOMINATION) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_MODICONS;
- active_panel = HUD_PANEL_MODICONS;
HUD_Panel_UpdateCvars(modicons);
vector pos, mySize;
pos = panel_pos;
HUD_Mod_Race(pos, mySize);
else if(gametype == GAME_CA || gametype == GAME_FREEZETAG)
HUD_Mod_CA(pos, mySize);
+ else if(gametype == GAME_DOMINATION)
+ HUD_Mod_Dom(pos, mySize);
else if(gametype == GAME_KEEPAWAY)
HUD_Mod_Keepaway(pos, mySize);
}
//
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;
void HUD_Physics(void)
{
- if(!autocvar_hud_panel_physics && !autocvar__hud_configure)
- return;
+ if(!autocvar_hud_panel_physics)
+ {
+ if(!autocvar__hud_configure) return;
+ if(spectatee_status <= 0 && autocvar_hud_panel_physics < 2) return;
+ }
+ else
+ hud_configure_active_panel = HUD_PANEL_PHYSICS;
- active_panel = HUD_PANEL_PHYSICS;
HUD_Panel_UpdateCvars(physics);
HUD_Panel_DrawBg(1);
float speed, conversion_factor;
string unit;
- switch(autocvar_cl_showspeed_unit)
+ switch(autocvar_hud_panel_physics_speed_unit)
{
default:
case 1:
break;
}
- float max_speed = floor( cvar("hud_panel_physics_speed_max") * conversion_factor + 0.5 );
+ 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(cvar("hud_panel_physics_speed_z"))
+ 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 );
//compute acceleration
float acceleration, f;
- float max_acceleration = cvar("hud_panel_physics_acceleration_max");
if (autocvar__hud_configure)
- acceleration = max_acceleration * 0.3;
+ acceleration = autocvar_hud_panel_physics_acceleration_max * 0.3;
else
{
f = time - acc_prevtime;
- if(cvar("hud_panel_physics_acceleration_z"))
+ 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);
//compute layout
drawfont = hud_bigfont;
- float baralign = cvar("hud_panel_physics_baralign");
- float progressbar = cvar("hud_panel_physics_progressbar");
float panel_ar = panel_size_x/panel_size_y;
vector speed_offset, acceleration_offset;
if (panel_ar >= 5)
{
panel_size_x *= 0.5;
- if (cvar("hud_panel_physics_flip"))
+ 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 (cvar("hud_panel_physics_flip"))
+ 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 (cvar("hud_panel_physics_flip"))
+ if (autocvar_hud_panel_physics_baralign == 1)
+ acceleration_baralign = speed_baralign = 1;
+ else if(autocvar_hud_panel_physics_baralign == 4)
+ acceleration_baralign = speed_baralign = 2;
+ else if (autocvar_hud_panel_physics_flip)
{
- acceleration_baralign = (baralign == 1 || baralign == 2);
- speed_baralign = (baralign == 1 || baralign == 3);
+ acceleration_baralign = (autocvar_hud_panel_physics_baralign == 2);
+ speed_baralign = (autocvar_hud_panel_physics_baralign == 3);
}
else
{
- speed_baralign = (baralign == 1 || baralign == 2);
- acceleration_baralign = (baralign == 1 || baralign == 3);
+ speed_baralign = (autocvar_hud_panel_physics_baralign == 2);
+ acceleration_baralign = (autocvar_hud_panel_physics_baralign == 3);
}
//draw speed
- if(speed && progressbar)
+ 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);
tmp_offset_x = 0;
else
tmp_offset_x = tmp_size_x;
- if (cvar("hud_panel_physics_speed_unit_show"))
+ if (autocvar_hud_panel_physics_speed_unit_show)
{
//tmp_offset_y = 0;
tmp_size_x = panel_size_x * (1 - 0.75);
}
//compute and draw top speed
- if (cvar("hud_panel_physics_topspeed"))
+ if (autocvar_hud_panel_physics_topspeed)
{
if (autocvar__hud_configure)
{
{
top_speed = speed;
top_speed_time = time;
+ f = 1;
}
- if (top_speed == 0) //hide top speed 0, it would be stupid
- f = 0;
- else
+ else if (top_speed != 0)
{
- f = max(1, cvar("hud_panel_physics_topspeed_time"));
+ 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 );
}
+ else //hide top speed 0, it would be stupid
+ f = 0;
}
if (f > 0)
{
- //top speed progressbar peek
- if(progressbar && speed < top_speed)
+ //top speed progressbar peak
+ 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;
+ float peak_offset_x;
+ vector peak_size;
+ if (speed_baralign == 0)
+ peak_offset_x = min(top_speed, max_speed)/max_speed * panel_size_x;
+ else if (speed_baralign == 1)
+ peak_offset_x = (1 - min(top_speed, max_speed)/max_speed) * panel_size_x;
+ else if (speed_baralign == 2)
+ peak_offset_x = min(top_speed, max_speed)/max_speed * panel_size_x * 0.5;
//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);
+ peak_size_x = floor(panel_size_x * 0.01 + 1.5);
+ peak_size_y = panel_size_y;
+ if (speed_baralign == 2) // draw two peaks, on both sides
+ {
+ drawfill(panel_pos + speed_offset + eX * (0.5 * panel_size_x + peak_offset_x - peak_size_x), peak_size, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+ drawfill(panel_pos + speed_offset + eX * (0.5 * panel_size_x - peak_offset_x + peak_size_x), peak_size, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+ }
+ else
+ drawfill(panel_pos + speed_offset + eX * (peak_offset_x - peak_size_x), peak_size, progressbar_color, f * autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
}
//top speed
}
//draw acceleration
- if(acceleration && progressbar)
+ if(acceleration && autocvar_hud_panel_physics_progressbar)
{
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)/max_acceleration, 0, acceleration_baralign, progressbar_color, autocvar_hud_progressbar_alpha * panel_fg_alpha, DRAWFLAG_NORMAL);
+ 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;
}
// 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!