]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud.qh
Merge remote-tracking branch 'origin/Mario/arena_nuke'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud.qh
index 9c8a9128cbbc4efc354b8065ee91bc3cd8eb3618..1fe76b091cc2239684a1a420d1e5ee95108b8a8e 100644 (file)
@@ -14,7 +14,7 @@ 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
-var float highlightedPanel = -1;
+entity highlightedPanel;
 float highlightedAction; // 0 = nothing, 1 = move, 2 = resize
 
 const float BORDER_MULTIPLIER = 0.25;
@@ -54,13 +54,14 @@ float hud_fade_alpha;
 string hud_skin_path;
 string hud_skin_prev;
 
+vector myteamcolors;
+
 var vector progressbar_color;
 
-var float highlightedPanel_backup = -1;
+entity highlightedPanel_backup;
 var vector panel_pos_backup;
 var vector panel_size_backup;
 
-var float highlightedPanel_copied = -1; //this is good only to know if there is something copied
 var vector panel_size_copied;
 
 entity panel;
@@ -93,7 +94,6 @@ var string panel_bg_border_str;
 var float panel_bg_padding;
 var string panel_bg_padding_str;
 
-.string panel_cvar;
 .void() panel_draw;
 
 float current_player;
@@ -126,12 +126,13 @@ float current_player;
                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)
+       ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME);
 
 HUD_PANELS
 #undef HUD_PANEL
@@ -187,7 +188,10 @@ if(!autocvar__hud_configure && panel_bg_str == "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) {\
-       panel_bg_color = colormapPaletteColor(mod(stof(getplayerkeyvalue(current_player - 1, "colors")), 16), 1) * 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 {\
@@ -214,7 +218,7 @@ if(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.panel_id == highlightedPanel))\
+if(!(menu_enabled == 2 && panel == highlightedPanel))\
 {\
        panel_bg_alpha *= hud_fade_alpha;\
        panel_fg_alpha *= hud_fade_alpha;\
@@ -230,7 +234,7 @@ 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.panel_id == highlightedPanel)\
+       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);\
@@ -317,9 +321,10 @@ else\
        }\
 }
 
+// NOTE: in hud_configure mode cvars must be reloaded every frame
 #define HUD_Panel_UpdateCvars() \
-panel_enabled = cvar(strcat("hud_panel_", panel.panel_name)); \
-if(panel.update_time < time) { \
+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")); \
@@ -329,14 +334,19 @@ if(panel.update_time < time) { \
        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.panel_id == highlightedPanel) {\
+       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 != "") \
+       if(panel.current_panel_bg) \
                strunzone(panel.current_panel_bg); \
+       if(panel_bg == "")\
+       {\
+               /*print(sprintf("^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; \
@@ -344,11 +354,16 @@ if(panel.update_time < time) { \
        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 + 2; \
+       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 == "")\
+       {\
+               /*print(sprintf("^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; \
@@ -358,10 +373,11 @@ if(panel.update_time < time) { \
 } 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.panel_id == highlightedPanel) {\
+if(menu_enabled == 2 && panel == highlightedPanel) {\
        HUD_Panel_GetMenuSize()\
        HUD_Panel_GetMenuPos()\
 }\