Avoid a glitch when the HUD cursor gets (re)displayed
authorterencehill <piuntn@gmail.com>
Tue, 11 Dec 2018 17:45:01 +0000 (18:45 +0100)
committerterencehill <piuntn@gmail.com>
Tue, 11 Dec 2018 17:45:01 +0000 (18:45 +0100)
qcsrc/client/hud/hud.qc
qcsrc/client/view.qc
qcsrc/client/view.qh

index 0812ea4..87ed2c4 100644 (file)
@@ -698,10 +698,15 @@ void HUD_Main()
                HUD_Panel_Draw(HUD_PANEL(QUICKMENU));
        HUD_Panel_Draw(HUD_PANEL(SCOREBOARD));
 
-       bool cursor_active_prev = cursor_active;
+       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();
index 5172731..e26f908 100644 (file)
@@ -1592,6 +1592,15 @@ void HUD_Mouse(entity player)
                return;
        }
 
+       if (cursor_active == -1) // starting to display the cursor
+       {
+               // since HUD_Mouse is called by CSQC_UpdateView before CSQC_InputEvent,
+               // in the first frame mousepos is the mouse position of the last time
+               // the cursor was displayed, thus we ignore it to avoid a glictch
+               cursor_active = 1;
+               return;
+       }
+
        if(!autocvar_hud_cursormode)
                update_mousepos();
 
index 5bce2fe..12fd6eb 100644 (file)
@@ -16,7 +16,7 @@ entity viewmodels[MAX_WEAPONSLOTS];
 
 vector viewloc_mousepos;
 
-bool cursor_active;
+int cursor_active;
 int cursor_type;
 const int CURSOR_NORMAL = 0;
 const int CURSOR_MOVE = 1;