X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Fhud.qh;h=08e75273579d7e6626a92a77381e118887bdc4c6;hb=536896a7e230617829396e9e22377f47c1519b18;hp=ba1a53cc787531d34d6be1a1b06fa761cb26a4ca;hpb=94cf7bed4e2ed10847292875244387b72bb229b8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/hud.qh b/qcsrc/client/hud.qh index ba1a53cc7..08e752735 100644 --- a/qcsrc/client/hud.qh +++ b/qcsrc/client/hud.qh @@ -1,9 +1,12 @@ +float panel_order[HUD_PANEL_NUM]; +string hud_panelorder_prev; + vector mousepos; vector panel_click_distance; // mouse cursor distance from the top left corner of the panel (saved only upon a click) vector panel_click_resizeorigin; // coordinates for opposite point when resizing float resizeCorner; // 1 = topleft, 2 = topright, 3 = bottomleft, 4 = bottomright -float highlightedPanel; -float highlightedPanel_prev; +var float highlightedPanel = -1; +var float highlightedPanel_prev = -1; float highlightedAction; // 0 = nothing, 1 = move, 2 = resize const float BORDER_MULTIPLIER = 0.25; @@ -43,31 +46,34 @@ float menu_fade_alpha; string hud_skin_path; +var vector progressbar_color; + var float active_panel; // this panel has recently referred the UpdateCvars macro var string panel_name; -var float panel_enabled; -var vector panel_pos; -var vector panel_size; -var string panel_bg; +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 string panel_bg_color; -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; -var float panel_accuracy_yellow; -var float panel_accuracy_onlycurrent; -var float panel_accuracy_flip; -var float panel_accuracy_iconalign; -var float panel_accuracy_baralign; -var float panel_accuracy_info_top; -var float panel_accuracy_foreground_alpha; -var float panel_accuracy_alreadyvoted_alpha; +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; +var float panel_accuracy_yellow; +var float panel_accuracy_onlycurrent; +var float panel_accuracy_flip; +var float panel_accuracy_iconalign; +var float panel_accuracy_baralign; +var float panel_accuracy_info_top; +var float panel_accuracy_foreground_alpha; +var float panel_accuracy_alreadyvoted_alpha; // Because calling lots of functions in QC apparently cuts fps in half on many machines: // ---------------------- @@ -75,6 +81,17 @@ var float panel_accuracy_alreadyvoted_alpha; // ---------------------- // Little help for the poor people who have to make sense of this: Start from the bottom +// TODO: shirt, pants, team colors +#define HUD_Panel_GetProgressBarColor(item) \ +switch(item) {\ + case "strength": progressbar_color = autocvar_hud_progressbar_strength_color; break;\ + case "shield": progressbar_color = autocvar_hud_progressbar_shield_color; break;\ + case "health": progressbar_color = autocvar_hud_progressbar_health_color; break;\ + case "armor": progressbar_color = autocvar_hud_progressbar_armor_color; break;\ + case "fuel": progressbar_color = autocvar_hud_progressbar_fuel_color; break;\ + case "nexball": progressbar_color = autocvar_hud_progressbar_nexball_color; break;\ +} + // Get value for 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()\ @@ -83,8 +100,28 @@ if(!autocvar__hud_configure && panel_bg_str == "0") {\ } else {\ if(panel_bg_str == "") {\ panel_bg = autocvar_hud_bg;\ - } if(panel_bg_str == "0" && autocvar__hud_configure) {\ - panel_bg = "border"; \ + } else if(panel_bg_str == "0" && autocvar__hud_configure) {\ + panel_bg = "border";\ + } else {\ + panel_bg = panel_bg_str;\ + }\ +} + +// 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) {\ + panel_bg_color = colormapPaletteColor(mod(stof(getplayerkey(player_localentnum - 1, "colors")), 16), 1) * panel_bg_color_team;\ +} else {\ + if(panel_bg_color_str == "") {\ + panel_bg_color = autocvar_hud_bg_color;\ + } else {\ + if(panel_bg_color_str == "shirt") {\ + panel_bg_color = colormapPaletteColor(floor(stof(getplayerkey(player_localentnum - 1, "colors")) / 16), 0);\ + } else if(panel_bg_color_str == "pants") {\ + panel_bg_color = colormapPaletteColor(mod(stof(getplayerkey(player_localentnum - 1, "colors")), 16), 1);\ + } else {\ + panel_bg_color = stov(panel_bg_color_str);\ + }\ }\ } @@ -131,6 +168,13 @@ if(panel_bg_border_str == "") {\ panel_bg_border = stof(panel_bg_border_str);\ } +// 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; + // 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()\ @@ -141,21 +185,16 @@ if(panel_bg_padding_str == "") {\ }\ panel_bg_padding = min(min(panel_size_x, panel_size_y)/2 - 5, panel_bg_padding); -#define HUD_Panel_GetScaledVectors()\ -panel_pos_x *= vid_conwidth;\ -panel_pos_y *= vid_conheight;\ -panel_size_x *= vid_conwidth;\ -panel_size_y *= vid_conheight; - // Point to the macros above (stupid max macro length) #define HUD_Panel_StringVars()\ HUD_Panel_GetBg()\ HUD_Panel_GetColorTeam()\ +HUD_Panel_GetColor()\ HUD_Panel_GetBgAlpha()\ HUD_Panel_GetFgAlpha()\ HUD_Panel_GetBorder()\ -HUD_Panel_GetPadding()\ -HUD_Panel_GetScaledVectors() +HUD_Panel_GetScaledVectors()\ +HUD_Panel_GetPadding() // Update all common cvars of given panel name #define HUD_Panel_UpdateCvars(name) \ @@ -163,7 +202,7 @@ panel_enabled = autocvar_hud_##name; \ panel_pos = autocvar_hud_##name##_pos; \ panel_size = autocvar_hud_##name##_size; \ panel_bg_str = autocvar_hud_##name##_bg; \ -panel_bg_color = autocvar_hud_##name##_bg_color; \ +panel_bg_color_str = autocvar_hud_##name##_bg_color; \ panel_bg_color_team_str = autocvar_hud_##name##_bg_color_team; \ panel_bg_alpha_str = autocvar_hud_##name##_bg_alpha; \ panel_bg_border_str = autocvar_hud_##name##_bg_border; \ @@ -188,14 +227,32 @@ switch(id) { \ case HUD_PANEL_PRESSEDKEYS: HUD_Panel_UpdateCvars(pressedkeys) break; \ case HUD_PANEL_CHAT: HUD_Panel_UpdateCvars(chat) break; \ case HUD_PANEL_ENGINEINFO: HUD_Panel_UpdateCvars(engineinfo) break; \ + case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdateCvars(infomessages) break; \ } -/* These cvars have to be placed separately wherever they are needed. -panel_accuracy_yellow = autocvar_hud_##name##_accuracy_yellow; \ -panel_onlycurrent = autocvar_hud_##name##_onlycurrent; \ -panel_flip = autocvar_hud_##name##_flip; \ -panel_iconalign = autocvar_hud_##name##_iconalign; \ -panel_baralign = autocvar_hud_##name##_baralign; \ -panel_info_top = autocvar_hud_##name##_info_top; \ -panel_alreadyvoted_alpha = autocvar_hud_##name##_alreadyvoted_alpha; -*/ +#define HUD_Panel_UpdatePosSize(name) \ +panel_pos = autocvar_hud_##name##_pos; \ +panel_size = autocvar_hud_##name##_size; \ +HUD_Panel_GetScaledVectors()\ +panel_bg_border_str = autocvar_hud_##name##_bg_border; \ +HUD_Panel_GetBorder() + +// Update pos and size of given panel id +#define HUD_Panel_UpdatePosSizeForId(id) \ +switch(id) { \ + case HUD_PANEL_WEAPONICONS: HUD_Panel_UpdatePosSize(weaponicons) break;\ + case HUD_PANEL_INVENTORY: HUD_Panel_UpdatePosSize(inventory) break;\ + case HUD_PANEL_POWERUPS: HUD_Panel_UpdatePosSize(powerups) break;\ + case HUD_PANEL_HEALTHARMOR: HUD_Panel_UpdatePosSize(healtharmor) break;\ + case HUD_PANEL_NOTIFY: HUD_Panel_UpdatePosSize(notify) break;\ + case HUD_PANEL_TIMER: HUD_Panel_UpdatePosSize(timer) break;\ + case HUD_PANEL_RADAR: HUD_Panel_UpdatePosSize(radar) break;\ + case HUD_PANEL_SCORE: HUD_Panel_UpdatePosSize(score) break;\ + case HUD_PANEL_RACETIMER: HUD_Panel_UpdatePosSize(racetimer) break;\ + case HUD_PANEL_VOTE: HUD_Panel_UpdatePosSize(vote) break;\ + case HUD_PANEL_MODICONS: HUD_Panel_UpdatePosSize(modicons) break;\ + case HUD_PANEL_PRESSEDKEYS: HUD_Panel_UpdatePosSize(pressedkeys) break;\ + case HUD_PANEL_CHAT: HUD_Panel_UpdatePosSize(chat) break;\ + case HUD_PANEL_ENGINEINFO: HUD_Panel_UpdatePosSize(engineinfo) break;\ + case HUD_PANEL_INFOMESSAGES: HUD_Panel_UpdatePosSize(infomessages)\ +}