]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Hud editor: while moving/resizing a panel, make clearly visible with a line whether...
authorterencehill <piuntn@gmail.com>
Thu, 6 Apr 2023 12:49:20 +0000 (14:49 +0200)
committerterencehill <piuntn@gmail.com>
Sun, 9 Apr 2023 13:38:32 +0000 (15:38 +0200)
qcsrc/client/hud/hud_config.qc
qcsrc/client/hud/hud_config.qh

index 78ed8442adecd81d685aaba6d2a183f6c47464bf..ac4d48a422553d04e70f036069b77b9f1b2b25fd 100644 (file)
@@ -496,6 +496,7 @@ void HUD_Panel_Arrow_Action(float nPrimary)
                panel_pos_backup = highlightedPanel_initial_pos;
                panel_size_backup = highlightedPanel_initial_size;
                highlightedPanel_backup = highlightedPanel;
+               hud_configure_centerline_time = time + 1;
        }
 }
 
@@ -944,6 +945,7 @@ void HUD_Panel_EnableMenu()
        hud_configure_menu_open = 2;
        localcmd("menu_showhudoptions ", highlightedPanel.panel_name, "\n");
 }
+
 void HUD_Panel_Mouse()
 {
        if(autocvar__menu_alpha == 1)
@@ -1004,6 +1006,9 @@ void HUD_Panel_Mouse()
                                // moving it, avoid the immediate "fix" of its position/size
                                // (often unwanted and hateful) by disabling collisions check
                                hud_configure_checkcollisions = false;
+
+                       if (time - prevMouseClickedTime > 0.25) // avoid showing the center line immediately on mouse click
+                               hud_configure_centerline_time = time + 0.5;
                }
 
                if(highlightedAction == 1)
@@ -1041,7 +1046,7 @@ void HUD_Panel_Mouse()
 }
 void HUD_Configure_DrawGrid()
 {
-       float i;
+       int i;
        if(autocvar_hud_configure_grid && autocvar_hud_configure_grid_alpha)
        {
                hud_configure_gridSize.x = bound(0.005, cvar("hud_configure_grid_xsize"), 0.2);
@@ -1049,6 +1054,9 @@ void HUD_Configure_DrawGrid()
                hud_configure_realGridSize.x = hud_configure_gridSize.x * vid_conwidth;
                hud_configure_realGridSize.y = hud_configure_gridSize.y * vid_conheight;
                vector s;
+               // vertical center line, wider than vertical grid lines so that it's more visible
+               // NOTE: depending on grid size the vertical center line may not overlap any vertical grid line
+               drawfill(eX * (0.5 * vid_conwidth - 1), vec2(3, vid_conheight), '0.5 0.5 0.5', autocvar_hud_configure_grid_alpha, DRAWFLAG_NORMAL);
                // x-axis
                s = vec2(1, vid_conheight);
                for(i = 1; i < 1/hud_configure_gridSize.x; ++i)
@@ -1111,6 +1119,23 @@ void HUD_Panel_HlBorder(float myBorder, vector color, float theAlpha)
        drawpic_tiled(pos + eX * (panel_size.x + 2 * myBorder - hlBorderSize), hlBorder2, '1 8 0' * hlBorderSize, vec2(hlBorderSize, panel_size.y + 2 * myBorder - 2 * hlBorderSize), color, theAlpha, DRAWFLAG_NORMAL);
 }
 
+void HUD_Panel_HlCenterLine(float myBorder)
+{
+       if (time > hud_configure_centerline_time)
+               return;
+       float panel_centerpos_x = (panel_pos.x + panel_size.x * 0.5);
+       float ofs = fabs(panel_centerpos_x / vid_conwidth - 0.5);
+       if (ofs < 0.02) // don't bother showing the center line if it's evident that the panel is not centered
+       {
+               float f = map_bound_ranges(ofs, 0.001, 0.01, 0, 1);
+               vector col = '1 0 0' * f + '0 1 0' * (1 - f); // from red (far) to green (close)
+               float theAlpha = 0.3 + 0.1 * sin(6 * time); // blink
+               theAlpha *= (1 - autocvar__menu_alpha) * bound(0, hud_configure_centerline_time - time, 0.5) * 2; // fade
+               vector pos = vec2(panel_centerpos_x - 1, panel_pos.y - myBorder);
+               drawfill(pos, vec2(3, panel_size.y + 2 * myBorder), col, theAlpha, DRAWFLAG_NORMAL);
+       }
+}
+
 void HUD_Configure_PostDraw()
 {
        if(autocvar__hud_configure)
@@ -1126,6 +1151,7 @@ void HUD_Configure_PostDraw()
                        panel = highlightedPanel;
                        HUD_Panel_UpdatePosSize();
                        HUD_Panel_HlBorder(panel_bg_border * hlBorderSize, '0 0.5 1', 0.4 * (1 - autocvar__menu_alpha));
+                       HUD_Panel_HlCenterLine(panel_bg_border * hlBorderSize);
                }
        }
 }
index aa4c734b41fa691d2715ec657d28195e81653417..79558c259dfd524b4ccd8e3526357f8321af3b99 100644 (file)
@@ -19,6 +19,7 @@ float hud_configure_checkcollisions;
 vector hud_configure_gridSize;
 vector hud_configure_realGridSize;
 float hud_configure_menu_open; // 1 showing the entire HUD, 2 showing only the clicked panel
+float hud_configure_centerline_time;
 
 void HUD_Panel_ExportCfg(string cfgname);