Treat the first mouse motion event as non-relative

This fixes incorrect starting camera orientation when using --skip-menu or --load-savegame.
openmw-35
scrawl 10 years ago
parent 9b3728d878
commit 60f722b0a9

@ -30,7 +30,8 @@ namespace SFO
mWantMouseVisible(false), mWantMouseVisible(false),
mAllowGrab(grab), mAllowGrab(grab),
mWarpX(0), mWarpX(0),
mWarpY(0) mWarpY(0),
mFirstMouseMove(true)
{ {
_setupOISKeys(); _setupOISKeys();
} }
@ -316,6 +317,13 @@ namespace SFO
pack_evt.y = mMouseY = evt.motion.y; pack_evt.y = mMouseY = evt.motion.y;
pack_evt.xrel = evt.motion.xrel; pack_evt.xrel = evt.motion.xrel;
pack_evt.yrel = evt.motion.yrel; pack_evt.yrel = evt.motion.yrel;
if (mFirstMouseMove)
{
// first event should be treated as non-relative, since there's no point of reference
// SDL then (incorrectly) uses (0,0) as point of reference, on Linux at least...
pack_evt.xrel = pack_evt.yrel = 0;
mFirstMouseMove = false;
}
} }
else if(evt.type == SDL_MOUSEWHEEL) else if(evt.type == SDL_MOUSEWHEEL)
{ {

@ -71,6 +71,8 @@ namespace SFO
bool mGrabPointer; bool mGrabPointer;
bool mMouseRelative; bool mMouseRelative;
bool mFirstMouseMove;
Sint32 mMouseZ; Sint32 mMouseZ;
Sint32 mMouseX; Sint32 mMouseX;
Sint32 mMouseY; Sint32 mMouseY;

Loading…
Cancel
Save