X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qh;h=16a7645fd991819a55fd1b8de4349d318ee15f30;hp=c2432b97c78191d5d8b38304cf14c414bf66b707;hb=4dd3c23aa51dd6fe855d8c5d97126a12a372eb3b;hpb=02c69da4fd008a0291ebdd8b88129f86b3108e74 diff --git a/qcsrc/client/hud.qh b/qcsrc/client/hud.qh index c2432b97c..16a7645fd 100644 --- a/qcsrc/client/hud.qh +++ b/qcsrc/client/hud.qh @@ -1,14 +1,21 @@ -#define HUD_PANEL_MAX 24 +#ifndef HUD_H +#define HUD_H + +#include "../common/weapons/weapons.qh" + +const int HUD_PANEL_MAX = 24; entity hud_panel[HUD_PANEL_MAX]; -#define HUD_PANEL_FIRST 0 -float HUD_PANEL_NUM; -float HUD_PANEL_LAST; +const int HUD_PANEL_FIRST = 0; +int HUD_PANEL_NUM; +int HUD_PANEL_LAST; -float panel_order[HUD_PANEL_MAX]; +int panel_order[HUD_PANEL_MAX]; string hud_panelorder_prev; float hud_draw_maximized; float hud_panel_radar_maximized; +float chat_panel_modified; +float radar_panel_modified; vector mousepos; vector panel_click_distance; // mouse cursor distance from the top left corner of the panel (saved only upon a click) @@ -19,18 +26,18 @@ float highlightedAction; // 0 = nothing, 1 = move, 2 = resize const float BORDER_MULTIPLIER = 0.25; float scoreboard_bottom; -float weapon_accuracy[WEP_MAXCOUNT]; +int weapon_accuracy[WEP_MAXCOUNT]; -float complain_weapon; +int complain_weapon; string complain_weapon_name; float complain_weapon_type; float complain_weapon_time; -float ps_primary, ps_secondary; -float ts_primary, ts_secondary; +int ps_primary, ps_secondary; +int ts_primary, ts_secondary; -float last_switchweapon; -float last_activeweapon; +int last_switchweapon; +int last_activeweapon; float weapontime; float weaponprevtime; @@ -38,16 +45,15 @@ float teamnagger; float hud_configure_checkcollisions; float hud_configure_prev; -noref vector hud_configure_gridSize; // fteqcc sucks -noref vector hud_configure_realGridSize; // fteqcc sucks +vector hud_configure_gridSize; +vector hud_configure_realGridSize; -float hudShiftState; -const float S_SHIFT = 1; -const float S_CTRL = 2; -const float S_ALT = 4; +int hudShiftState; +const int S_SHIFT = 1; +const int S_CTRL = 2; +const int S_ALT = 4; float menu_enabled; // 1 showing the entire HUD, 2 showing only the clicked panel -float menu_enabled_time; float hud_fade_alpha; @@ -56,17 +62,15 @@ string hud_skin_prev; vector myteamcolors; -var vector progressbar_color; - entity highlightedPanel_backup; -var vector panel_pos_backup; -var vector panel_size_backup; +vector panel_pos_backup; +vector panel_size_backup; -var vector panel_size_copied; +vector panel_size_copied; entity panel; .string panel_name; -.float panel_id; +.int panel_id; .vector current_panel_pos; .vector current_panel_size; .string current_panel_bg; @@ -77,64 +81,65 @@ entity panel; .float current_panel_bg_padding; .float current_panel_fg_alpha; .float update_time; -var float panel_enabled; -var vector panel_pos; -var vector panel_size; -var string panel_bg; -var string panel_bg_str; // "_str" vars contain the raw value of the cvar, non-"_str" contains what hud.qc code should use -var vector panel_bg_color; -var string panel_bg_color_str; -var float panel_bg_color_team; -var string panel_bg_color_team_str; -var float panel_fg_alpha; -var float panel_bg_alpha; -var string panel_bg_alpha_str; -var float panel_bg_border; -var string panel_bg_border_str; -var float panel_bg_padding; -var string panel_bg_padding_str; +float panel_enabled; +vector panel_pos; +vector panel_size; +string panel_bg_str; // "_str" vars contain the raw value of the cvar, non-"_str" contains what hud.qc code should use +vector panel_bg_color; +string panel_bg_color_str; +float panel_bg_color_team; +string panel_bg_color_team_str; +float panel_fg_alpha; +float panel_bg_alpha; +string panel_bg_alpha_str; +float panel_bg_border; +string panel_bg_border_str; +float panel_bg_padding; +string panel_bg_padding_str; .void() panel_draw; float current_player; - -#define HUD_PANELS \ - HUD_PANEL(WEAPONS , HUD_Weapons , weapons) \ - HUD_PANEL(AMMO , HUD_Ammo , ammo) \ - HUD_PANEL(POWERUPS , HUD_Powerups , powerups) \ - HUD_PANEL(HEALTHARMOR , HUD_HealthArmor , healtharmor) \ - HUD_PANEL(NOTIFY , HUD_Notify , notify) \ - HUD_PANEL(TIMER , HUD_Timer , timer) \ - HUD_PANEL(RADAR , HUD_Radar , radar) \ - HUD_PANEL(SCORE , HUD_Score , score) \ - HUD_PANEL(RACETIMER , HUD_RaceTimer , racetimer) \ - HUD_PANEL(VOTE , HUD_Vote , vote) \ - HUD_PANEL(MODICONS , HUD_ModIcons , modicons) \ - HUD_PANEL(PRESSEDKEYS , HUD_PressedKeys , pressedkeys) \ - HUD_PANEL(CHAT , HUD_Chat , chat) \ - HUD_PANEL(ENGINEINFO , HUD_EngineInfo , engineinfo) \ - HUD_PANEL(INFOMESSAGES , HUD_InfoMessages , infomessages) \ - HUD_PANEL(PHYSICS , HUD_Physics , physics) \ - HUD_PANEL(CENTERPRINT , HUD_CenterPrint , centerprint) - -#define HUD_PANEL(NAME,draw_func,name) \ - float HUD_PANEL_##NAME; \ - void ##draw_func(void); \ - void RegisterHUD_Panel_##NAME() \ - { \ - HUD_PANEL_LAST = HUD_PANEL_##NAME = HUD_PANEL_NUM; \ - entity hud_panelent = spawn(); \ - hud_panel[HUD_PANEL_##NAME] = hud_panelent; \ - hud_panelent.classname = "hud_panel"; \ - hud_panelent.panel_name = #name; \ - hud_panelent.panel_id = HUD_PANEL_##NAME; \ - hud_panelent.panel_draw = ##draw_func; \ - ++HUD_PANEL_NUM; \ - } \ +float GetPlayerColorForce(int i); + + +#define HUD_PANELS(HUD_PANEL) \ + HUD_PANEL(WEAPONS , HUD_Weapons , weapons) \ + HUD_PANEL(AMMO , HUD_Ammo , ammo) \ + HUD_PANEL(POWERUPS , HUD_Powerups , powerups) \ + HUD_PANEL(HEALTHARMOR , HUD_HealthArmor , healtharmor) \ + HUD_PANEL(NOTIFY , HUD_Notify , notify) \ + HUD_PANEL(TIMER , HUD_Timer , timer) \ + HUD_PANEL(RADAR , HUD_Radar , radar) \ + HUD_PANEL(SCORE , HUD_Score , score) \ + HUD_PANEL(RACETIMER , HUD_RaceTimer , racetimer) \ + HUD_PANEL(VOTE , HUD_Vote , vote) \ + HUD_PANEL(MODICONS , HUD_ModIcons , modicons) \ + HUD_PANEL(PRESSEDKEYS , HUD_PressedKeys , pressedkeys) \ + HUD_PANEL(CHAT , HUD_Chat , chat) \ + HUD_PANEL(ENGINEINFO , HUD_EngineInfo , engineinfo) \ + HUD_PANEL(INFOMESSAGES , HUD_InfoMessages , infomessages) \ + HUD_PANEL(PHYSICS , HUD_Physics , physics) \ + HUD_PANEL(CENTERPRINT , HUD_CenterPrint , centerprint) \ + HUD_PANEL(BUFFS , HUD_Buffs , buffs) + +#define HUD_PANEL(NAME, draw_func, name) \ + int HUD_PANEL_##NAME; \ + void draw_func(void); \ + void RegisterHUD_Panel_##NAME() { \ + HUD_PANEL_LAST = HUD_PANEL_##NAME = HUD_PANEL_NUM; \ + entity hud_panelent = spawn(); \ + hud_panel[HUD_PANEL_##NAME] = hud_panelent; \ + hud_panelent.classname = "hud_panel"; \ + hud_panelent.panel_name = #name; \ + hud_panelent.panel_id = HUD_PANEL_##NAME; \ + hud_panelent.panel_draw = draw_func; \ + HUD_PANEL_NUM++; \ + } \ ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME); -HUD_PANELS +HUD_PANELS(HUD_PANEL) #undef HUD_PANEL #define HUD_PANEL(NAME) hud_panel[HUD_PANEL_##NAME] @@ -146,251 +151,216 @@ HUD_PANELS // ---------------------- // Little help for the poor people who have to make sense of this: Start from the bottom ;) -#define HUD_Panel_GetProgressBarColor(item) \ - progressbar_color = stov(cvar_string("hud_progressbar_" #item "_color")) -#define HUD_Panel_GetProgressBarColorForString(item) \ -switch(item) {\ - case "health": HUD_Panel_GetProgressBarColor(health); break;\ - case "armor": HUD_Panel_GetProgressBarColor(armor); break;\ - case "strength": HUD_Panel_GetProgressBarColor(strength); break;\ - case "shield": HUD_Panel_GetProgressBarColor(shield); break;\ - case "fuel": HUD_Panel_GetProgressBarColor(fuel); break;\ - case "nexball": HUD_Panel_GetProgressBarColor(nexball); break;\ - case "speed": HUD_Panel_GetProgressBarColor(speed); break;\ - case "acceleration": HUD_Panel_GetProgressBarColor(acceleration); break;\ - case "acceleration_neg": HUD_Panel_GetProgressBarColor(acceleration_neg); break;\ -} ENDS_WITH_CURLY_BRACE - -// Get value for panel_bg: if "" fetch default, else use panel_bg_str +// Get value for panel.current_panel_bg: if "" fetch default, else use panel_bg_str // comment on last line of macro: // we probably want to see a background in config mode at all times... -#define HUD_Panel_GetBg()\ -if(!autocvar__hud_configure && panel_bg_str == "0") {\ - panel_bg = "0";\ -} else {\ - if(panel_bg_str == "") {\ - panel_bg_str = autocvar_hud_panel_bg;\ - }\ - if(panel_bg_str == "0" && !autocvar__hud_configure) {\ - panel_bg = "0";\ - } else {\ - if (panel_bg_str == "0" && autocvar__hud_configure)\ - panel_bg_alpha_str = "0";\ - panel_bg = strcat(hud_skin_path, "/", panel_bg_str);\ - if(precache_pic(panel_bg) == "") {\ - panel_bg = strcat(hud_skin_path, "/", "border_default");\ - if(precache_pic(panel_bg) == "") {\ - panel_bg = strcat("gfx/hud/default/", "border_default");\ - }\ - }\ - }\ -} +#define HUD_Panel_GetBg() do { \ + string panel_bg; \ + if (!autocvar__hud_configure && panel_bg_str == "0") { \ + panel_bg = "0"; \ + } else { \ + if (panel_bg_str == "") { \ + panel_bg_str = autocvar_hud_panel_bg; \ + } \ + if (panel_bg_str == "0" && !autocvar__hud_configure) { \ + panel_bg = "0"; \ + } else { \ + if (panel_bg_str == "0" && autocvar__hud_configure) \ + panel_bg_alpha_str = "0"; \ + panel_bg = strcat(hud_skin_path, "/", panel_bg_str); \ + if (precache_pic(panel_bg) == "") { \ + panel_bg = strcat(hud_skin_path, "/", "border_default"); \ + if (precache_pic(panel_bg) == "") { \ + panel_bg = strcat("gfx/hud/default/", "border_default"); \ + } \ + } \ + } \ + } \ + if (panel.current_panel_bg) \ + strunzone(panel.current_panel_bg); \ + panel.current_panel_bg = strzone(panel_bg); \ +} while(0) // Get value for panel_bg_color: if "" fetch default, else use panel_bg_color. Convert pants, shirt or teamcolor into a vector. -#define HUD_Panel_GetColor()\ -if((teamplay) && panel_bg_color_team) {\ - if(autocvar__hud_configure && myteam == NUM_SPECTATOR)\ - panel_bg_color = '1 0 0' * panel_bg_color_team;\ - else\ - panel_bg_color = myteamcolors * panel_bg_color_team;\ -} else if (autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && panel_bg_color_team) {\ - panel_bg_color = '1 0 0' * panel_bg_color_team;\ -} else {\ - if(panel_bg_color_str == "") {\ - panel_bg_color = autocvar_hud_panel_bg_color;\ - } else {\ - if(panel_bg_color_str == "shirt") {\ - panel_bg_color = colormapPaletteColor(floor(stof(getplayerkeyvalue(current_player - 1, "colors")) / 16), 0);\ - } else if(panel_bg_color_str == "pants") {\ - panel_bg_color = colormapPaletteColor(mod(stof(getplayerkeyvalue(current_player - 1, "colors")), 16), 1);\ - } else {\ - panel_bg_color = stov(panel_bg_color_str);\ - }\ - }\ -} +#define HUD_Panel_GetColor() do { \ + if ((teamplay) && panel_bg_color_team) { \ + if (autocvar__hud_configure && myteam == NUM_SPECTATOR) \ + panel_bg_color = '1 0 0' * panel_bg_color_team; \ + else \ + panel_bg_color = myteamcolors * panel_bg_color_team; \ + } else if (autocvar_hud_configure_teamcolorforced && autocvar__hud_configure && panel_bg_color_team) { \ + panel_bg_color = '1 0 0' * panel_bg_color_team; \ + } else { \ + if (panel_bg_color_str == "") { \ + panel_bg_color = autocvar_hud_panel_bg_color; \ + } else { \ + if (panel_bg_color_str == "shirt") { \ + panel_bg_color = colormapPaletteColor(floor(stof(getplayerkeyvalue(current_player - 1, "colors")) / 16), 0);\ + } else if (panel_bg_color_str == "pants") { \ + panel_bg_color = colormapPaletteColor(stof(getplayerkeyvalue(current_player - 1, "colors")) % 16, 1);\ + } else { \ + panel_bg_color = stov(panel_bg_color_str); \ + } \ + } \ + } \ +} while(0) // Get value for panel_bg_color_team: if "" fetch default, else use panel_bg_color_team_str -#define HUD_Panel_GetColorTeam()\ -if(panel_bg_color_team_str == "") {\ - panel_bg_color_team = autocvar_hud_panel_bg_color_team;\ -} else {\ - panel_bg_color_team = stof(panel_bg_color_team_str);\ -} - -// the check doesn't allow to fade this panel when showing the panel-specific menu dialog -#define HUD_Panel_ApplyFadeAlpha()\ -if(!(menu_enabled == 2 && panel == highlightedPanel))\ -{\ - panel_bg_alpha *= hud_fade_alpha;\ - panel_fg_alpha *= hud_fade_alpha;\ -} ENDS_WITH_CURLY_BRACE +#define HUD_Panel_GetColorTeam() do { \ + if (panel_bg_color_team_str == "") { \ + panel_bg_color_team = autocvar_hud_panel_bg_color_team; \ + } else { \ + panel_bg_color_team = stof(panel_bg_color_team_str); \ + } \ +} while(0) // Get value for panel_bg_alpha: if "" fetch default, else use panel_bg_alpha. Also do various menu dialog fadeout/in checks, and minalpha checks // comment on line 3 of macro: // do not set a minalpha cap when showing the config dialog for this panel -#define HUD_Panel_GetBgAlpha()\ -if(panel_bg_alpha_str == "") {\ - panel_bg_alpha_str = ftos(autocvar_hud_panel_bg_alpha);\ -}\ -panel_bg_alpha = stof(panel_bg_alpha_str);\ -if(autocvar__hud_configure) {\ - if(!panel_enabled)\ - panel_bg_alpha = 0.25;\ - else if(menu_enabled == 2 && panel == highlightedPanel)\ - panel_bg_alpha = (1 - autocvar__menu_alpha) * max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha) + autocvar__menu_alpha * panel_bg_alpha;\ - else\ - panel_bg_alpha = max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha);\ -} +#define HUD_Panel_GetBgAlpha() do { \ + if (panel_bg_alpha_str == "") { \ + panel_bg_alpha_str = ftos(autocvar_hud_panel_bg_alpha); \ + } \ + panel_bg_alpha = stof(panel_bg_alpha_str); \ + if (autocvar__hud_configure) { \ + if (!panel_enabled) \ + panel_bg_alpha = 0.25; \ + else if (menu_enabled == 2 && panel == highlightedPanel) \ + panel_bg_alpha = (1 - autocvar__menu_alpha) * max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha) + autocvar__menu_alpha * panel_bg_alpha;\ + else \ + panel_bg_alpha = max(cvar("hud_configure_bg_minalpha"), panel_bg_alpha); \ + } \ +} while(0) // Get value for panel_fg_alpha. Also do various minalpha checks // comment on line 2 of macro: // ALWAYS show disabled panels at 0.25 alpha when in config mode -#define HUD_Panel_GetFgAlpha()\ -panel_fg_alpha = autocvar_hud_panel_fg_alpha;\ -if(autocvar__hud_configure && !panel_enabled)\ - panel_fg_alpha = 0.25;\ +#define HUD_Panel_GetFgAlpha() do { \ + panel_fg_alpha = autocvar_hud_panel_fg_alpha; \ + if (autocvar__hud_configure && !panel_enabled) \ + panel_fg_alpha = 0.25; \ +} while(0) // Get border. See comments above, it's similar. -#define HUD_Panel_GetBorder()\ -if(panel_bg_border_str == "") {\ - panel_bg_border = autocvar_hud_panel_bg_border;\ -} else {\ - panel_bg_border = stof(panel_bg_border_str);\ -} ENDS_WITH_CURLY_BRACE - -// Scale the pos and size vectors to absolute coordinates -#define HUD_Panel_GetScaledVectors()\ -panel_pos_x *= vid_conwidth;\ -panel_pos_y *= vid_conheight;\ -panel_size_x *= vid_conwidth;\ -panel_size_y *= vid_conheight; +#define HUD_Panel_GetBorder() do { \ + if (panel_bg_border_str == "") { \ + panel_bg_border = autocvar_hud_panel_bg_border; \ + } else { \ + panel_bg_border = stof(panel_bg_border_str); \ + } \ +} while(0) // Get padding. See comments above, it's similar. // last line is a port of the old function, basically always make sure the panel contents are at least 5 pixels tall/wide, to disallow extreme padding values -#define HUD_Panel_GetPadding()\ -if(panel_bg_padding_str == "") {\ - panel_bg_padding = autocvar_hud_panel_bg_padding;\ -} else {\ - panel_bg_padding = stof(panel_bg_padding_str);\ -}\ -panel_bg_padding = min(min(panel_size_x, panel_size_y)/2 - 5, panel_bg_padding); - -// Point to the macros above (stupid max macro length) -#define HUD_Panel_GetStringVars()\ -HUD_Panel_GetBg()\ -if (panel_bg != "0") {\ - HUD_Panel_GetColorTeam()\ - HUD_Panel_GetColor()\ - HUD_Panel_GetBgAlpha()\ - HUD_Panel_GetBorder()\ -}\ -HUD_Panel_GetFgAlpha()\ -HUD_Panel_GetScaledVectors()\ -HUD_Panel_GetPadding() - -// return smoothly faded pos of given panel when a dialog is active -var vector menu_enable_panelpos; -#define HUD_Panel_GetMenuPos() \ -if(panel_size_x > panel_size_y)\ - menu_enable_panelpos = eX * 0.5 * vid_conwidth - eX * 0.5 * panel_size_x + eY * 0.82 * vid_conheight;\ -else\ - menu_enable_panelpos = eY * 0.5 * vid_conheight - eY * 0.5 * panel_size_y + eX * 0.7 * vid_conwidth;\ -panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_panelpos; - -// return smoothly faded size of given panel when a dialog is active -//var vector menu_enable_maxsize; -var float menu_enable_maxsize_x; -var float menu_enable_maxsize_y; -var vector menu_enable_size; -#define HUD_Panel_GetMenuSize()\ -menu_enable_maxsize_x = 0.3 * vid_conwidth;\ -menu_enable_maxsize_y = 0.18 * vid_conheight;\ -if(panel_size_x > panel_size_y)\ -{\ - if(panel_size_y > menu_enable_maxsize_y)\ - {\ - menu_enable_size_y = menu_enable_maxsize_y;\ - menu_enable_size_x = panel_size_x * (menu_enable_maxsize_y/panel_size_y);\ - panel_size = (1 - autocvar__menu_alpha) * panel_size + (autocvar__menu_alpha) * menu_enable_size;\ - }\ -}\ -else\ -{\ - if(panel_size_x > menu_enable_maxsize_x)\ - {\ - menu_enable_size_x = menu_enable_maxsize_x;\ - menu_enable_size_y = panel_size_y * (menu_enable_maxsize_x/panel_size_x);\ - panel_size = (1 - autocvar__menu_alpha) * panel_size + (autocvar__menu_alpha) * menu_enable_size;\ - }\ -} +#define HUD_Panel_GetPadding() do { \ + if (panel_bg_padding_str == "") { \ + panel_bg_padding = autocvar_hud_panel_bg_padding; \ + } else { \ + panel_bg_padding = stof(panel_bg_padding_str); \ + } \ + panel_bg_padding = min(min(panel_size.x, panel_size.y)/2 - 5, panel_bg_padding); \ +} while(0) + +// return smoothly faded pos and size of given panel when a dialog is active +#define HUD_Panel_UpdatePosSize_ForMenu() do { \ + vector menu_enable_pos; \ + vector menu_enable_size = '0 0 0'; \ + float menu_enable_maxsize_x = 0.3 * vid_conwidth; \ + float menu_enable_maxsize_y = 0.18 * vid_conheight; \ + if (panel_size.x > panel_size.y) { \ + if (panel_size.y > menu_enable_maxsize_y) { \ + menu_enable_size.y = menu_enable_maxsize_y; \ + menu_enable_size.x = panel_size.x * (menu_enable_maxsize_y/panel_size.y); \ + panel_size = (1 - autocvar__menu_alpha) * panel_size + (autocvar__menu_alpha) * menu_enable_size; \ + } \ + menu_enable_pos = eX * 0.5 * vid_conwidth - eX * 0.5 * panel_size.x + eY * (vid_conheight - menu_enable_maxsize_y);\ + } else { \ + if (panel_size.x > menu_enable_maxsize_x) { \ + menu_enable_size.x = menu_enable_maxsize_x; \ + menu_enable_size.y = panel_size.y * (menu_enable_maxsize_x/panel_size.x); \ + panel_size = (1 - autocvar__menu_alpha) * panel_size + (autocvar__menu_alpha) * menu_enable_size; \ + } \ + menu_enable_pos = eY * 0.5 * vid_conheight - eY * 0.5 * panel_size.y + eX * (vid_conwidth - menu_enable_maxsize_x);\ + } \ + panel_pos = (1 - autocvar__menu_alpha) * panel_pos + (autocvar__menu_alpha) * menu_enable_pos; \ +} while(0) + +// Scale the pos and size vectors to absolute coordinates +#define HUD_Panel_ScalePosSize() do { \ + panel_pos.x *= vid_conwidth; panel_pos.y *= vid_conheight; \ + panel_size.x *= vid_conwidth; panel_size.y *= vid_conheight; \ +} while(0) // NOTE: in hud_configure mode cvars must be reloaded every frame -#define HUD_Panel_UpdateCvars() \ -if(panel.update_time <= time) { \ - if(autocvar__hud_configure) panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \ - panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \ - panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \ - panel_bg_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg")); \ - panel_bg_color_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color")); \ - panel_bg_color_team_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color_team")); \ - panel_bg_alpha_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_alpha")); \ - panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \ - panel_bg_padding_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_padding")); \ - HUD_Panel_GetStringVars()\ - if(menu_enabled == 2 && panel == highlightedPanel) {\ - HUD_Panel_GetMenuSize()\ - HUD_Panel_GetMenuPos()\ - } \ - panel.current_panel_pos = panel_pos; \ - panel.current_panel_size = panel_size; \ - if(panel.current_panel_bg) \ - strunzone(panel.current_panel_bg); \ - if(panel_bg == "")\ - {\ - /*printf("^xf08 %s panel: panel_bg is empty\n", panel.panel_name);*/\ - panel_bg = "0";\ - }\ - panel.current_panel_bg = strzone(panel_bg); \ - panel.current_panel_bg_alpha = panel_bg_alpha; \ - panel.current_panel_bg_border = panel_bg_border; \ - panel.current_panel_bg_color = panel_bg_color; \ - panel.current_panel_bg_color_team = panel_bg_color_team; \ - panel.current_panel_bg_padding = panel_bg_padding; \ - panel.current_panel_fg_alpha = panel_fg_alpha; \ - panel.update_time = (autocvar__hud_configure) ? time : time + autocvar_hud_panel_update_interval; \ -} else { \ - panel_pos = panel.current_panel_pos; \ - panel_size = panel.current_panel_size; \ - panel_bg = panel.current_panel_bg; \ - if(panel.current_panel_bg == "")\ - {\ - /*printf("^xf08 %s panel: panel.current_panel_bg is empty\n", panel.panel_name);*/\ - panel_bg = "0";\ - }\ - panel_bg_alpha = panel.current_panel_bg_alpha; \ - panel_bg_border = panel.current_panel_bg_border; \ - panel_bg_color = panel.current_panel_bg_color; \ - panel_bg_color_team = panel.current_panel_bg_color_team; \ - panel_bg_padding = panel.current_panel_bg_padding; \ - panel_fg_alpha = panel.current_panel_fg_alpha; \ -} ENDS_WITH_CURLY_BRACE - -#define HUD_Panel_UpdatePosSize() {\ -panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \ -panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \ -panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \ -HUD_Panel_GetScaledVectors()\ -if(menu_enabled == 2 && panel == highlightedPanel) {\ - HUD_Panel_GetMenuSize()\ - HUD_Panel_GetMenuPos()\ -}\ -panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \ -HUD_Panel_GetBorder() \ -} ENDS_WITH_CURLY_BRACE - - -#define KN_MAX_ENTRIES 10 - -float kn_index; -float notify_times[KN_MAX_ENTRIES]; -string notify_icon[KN_MAX_ENTRIES]; -string notify_attackers[KN_MAX_ENTRIES]; -string notify_victims[KN_MAX_ENTRIES]; +#define HUD_Panel_UpdateCvars() do { \ + if (panel.update_time <= time) { \ + if (autocvar__hud_configure) panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \ + panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \ + panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \ + HUD_Panel_ScalePosSize(); \ + panel_bg_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg")); \ + panel_bg_color_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color")); \ + panel_bg_color_team_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_color_team")); \ + panel_bg_alpha_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_alpha")); \ + panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \ + panel_bg_padding_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_padding")); \ + HUD_Panel_GetBg(); \ + if (panel.current_panel_bg != "0") { \ + HUD_Panel_GetColorTeam(); \ + HUD_Panel_GetColor(); \ + HUD_Panel_GetBgAlpha(); \ + HUD_Panel_GetBorder(); \ + } \ + HUD_Panel_GetFgAlpha(); \ + HUD_Panel_GetPadding(); \ + panel.current_panel_bg_alpha = panel_bg_alpha; \ + panel.current_panel_fg_alpha = panel_fg_alpha; \ + if (menu_enabled == 2 && panel == highlightedPanel) { \ + HUD_Panel_UpdatePosSize_ForMenu(); \ + } else { \ + panel_bg_alpha *= hud_fade_alpha; \ + panel_fg_alpha *= hud_fade_alpha; \ + } \ + panel.current_panel_pos = panel_pos; \ + panel.current_panel_size = panel_size; \ + panel.current_panel_bg_border = panel_bg_border; \ + panel.current_panel_bg_color = panel_bg_color; \ + panel.current_panel_bg_color_team = panel_bg_color_team; \ + panel.current_panel_bg_padding = panel_bg_padding; \ + panel.update_time = (autocvar__hud_configure) ? time : time + autocvar_hud_panel_update_interval; \ + } else { \ + panel_pos = panel.current_panel_pos; \ + panel_size = panel.current_panel_size; \ + panel_bg_alpha = panel.current_panel_bg_alpha * hud_fade_alpha; \ + panel_bg_border = panel.current_panel_bg_border; \ + panel_bg_color = panel.current_panel_bg_color; \ + panel_bg_color_team = panel.current_panel_bg_color_team; \ + panel_bg_padding = panel.current_panel_bg_padding; \ + panel_fg_alpha = panel.current_panel_fg_alpha * hud_fade_alpha; \ + } \ +} while(0) + +#define HUD_Panel_UpdatePosSize() do { \ + panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \ + panel_pos = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_pos"))); \ + panel_size = stov(cvar_string(strcat("hud_panel_", panel.panel_name, "_size"))); \ + HUD_Panel_ScalePosSize(); \ + if (menu_enabled == 2 && panel == highlightedPanel) { \ + HUD_Panel_UpdatePosSize_ForMenu(); \ + } \ + panel_bg_border_str = cvar_string(strcat("hud_panel_", panel.panel_name, "_bg_border")); \ + HUD_Panel_GetBorder(); \ +} while(0) + +const int NOTIFY_MAX_ENTRIES = 10; +const float NOTIFY_ICON_MARGIN = 0.02; + +int notify_index; +int notify_count; +float notify_times[NOTIFY_MAX_ENTRIES]; +string notify_attackers[NOTIFY_MAX_ENTRIES]; +string notify_victims[NOTIFY_MAX_ENTRIES]; +string notify_icons[NOTIFY_MAX_ENTRIES]; + void HUD_Notify_Push(string icon, string attacker, string victim); + +var void HUD_ModIcons_GameType(vector pos, vector size); +void HUD_ModIcons_SetFunc(); +#endif