diff -r b2beb784e4b5 -r 9443dc6663ba hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Tue Apr 16 00:07:15 2019 +0300 +++ b/hedgewars/uWorld.pas Thu Apr 18 19:44:25 2019 +0200 @@ -1974,7 +1974,6 @@ if CursorPoint.Y < cScreenHeight - (AmmoRect.y + AmmoRect.h - AMSlotSize - 5) then//check bottom CursorPoint.Y:= cScreenHeight - (AmmoRect.y + AmmoRect.h - AMSlotSize - 5); prevPoint:= CursorPoint; - //if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight - CursorPoint.Y); exit end; @@ -2030,7 +2029,6 @@ // this moves the camera according to CursorPoint X and Y prevPoint:= CursorPoint; -//if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight - CursorPoint.Y); if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; if WorldDy < wdy then @@ -2148,10 +2146,21 @@ procedure updateCursorVisibility; begin - if isPaused or isAFK then - SDL_ShowCursor(1) + if isPaused or isAFK or (GameState = gsConfirm) then + begin + SDL_SetRelativeMouseMode(SDL_FALSE); + if SDL_ShowCursor(SDL_QUERY) = SDL_DISABLE then + begin + uCursor.resetPosition; + SDL_ShowCursor(SDL_ENABLE); + end; + end else - SDL_ShowCursor(ord(GameState = gsConfirm)) + begin + uCursor.resetPositionDelta; + SDL_ShowCursor(SDL_DISABLE); + SDL_SetRelativeMouseMode(SDL_TRUE); + end; end; procedure updateTouchWidgets(ammoType: TAmmoType);