]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/hud/hud.qc
Avoid a glitch when the HUD cursor gets (re)displayed
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / hud / hud.qc
index 9b5b4699337c971a0fbf2f4117dde2e75a1aa82a..87ed2c4394be3d7721e10923b6ccd026e7c9d1f8 100644 (file)
@@ -561,14 +561,10 @@ void Hud_Dynamic_Frame()
        HUD_Scale_Disable();
 }
 
-bool cursor_activestate;
-
 bool HUD_WouldShowCursor()
 {
        if(autocvar__hud_configure)
                return true;
-       if(hud_panel_radar_mouse)
-               return true;
        if(mv_active)
                return true;
        //entity local_player = ((csqcplayer) ? csqcplayer : CSQCModel_server2csqc(player_localentnum - 1)); // TODO: doesn't use regular cursor handling
@@ -576,33 +572,12 @@ bool HUD_WouldShowCursor()
                //return true;
        if(HUD_Radar_Clickable())
                return true;
-       if(HUD_MinigameMenu_IsOpened() || active_minigame)
+       if(HUD_MinigameMenu_IsOpened())
                return true;
        if(QuickMenu_IsOpened())
                return true;
        return false;
 }
-void HUD_Cursor()
-{
-       if(HUD_WouldShowCursor())
-       {
-               if(!cursor_activestate)
-               {
-                       cursor_activestate = true;
-                       if(autocvar_hud_cursormode)
-                               setcursormode(1);
-               }
-       }
-       else
-       {
-               if(cursor_activestate)
-               {
-                       cursor_activestate = false;
-                       if(autocvar_hud_cursormode)
-                               setcursormode(0);
-               }
-       }
-}
 
 void HUD_Main()
 {
@@ -719,11 +694,19 @@ void HUD_Main()
                HUD_Panel_Draw(HUD_PANEL(RADAR));
        if(autocvar__con_chat_maximized)
                HUD_Panel_Draw(HUD_PANEL(CHAT));
-       if(hud_panel_quickmenu)
+       if (QuickMenu_IsOpened())
                HUD_Panel_Draw(HUD_PANEL(QUICKMENU));
        HUD_Panel_Draw(HUD_PANEL(SCOREBOARD));
 
-       HUD_Cursor();
+       int cursor_active_prev = cursor_active;
+       cursor_active = HUD_WouldShowCursor();
+       if (cursor_active_prev != cursor_active && autocvar_hud_cursormode)
+       {
+               setcursormode(cursor_active);
+               // cursor inactive this frame, will be set to 1 the next frame
+               if (cursor_active)
+                       cursor_active = -1;
+       }
 
        if (intermission == 2)
                HUD_Reset();