Skip to content

Commit b8d57c2

Browse files
committed
Added mouse relative mode
1 parent 651606b commit b8d57c2

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

Chapter08/InputSystem.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,32 @@ void InputSystem::PrepareForUpdate()
102102

103103
// Mouse
104104
mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons;
105+
mState.Mouse.mIsRelative = false;
105106
}
106107

107108
void InputSystem::Update()
108109
{
109110
// Mouse
110111
int x = 0, y = 0;
111-
mState.Mouse.mCurrButtons = SDL_GetMouseState(&x, &y);
112+
if (mState.Mouse.mIsRelative)
113+
{
114+
mState.Mouse.mCurrButtons =
115+
SDL_GetRelativeMouseState(&x, &y);
116+
}
117+
else
118+
{
119+
mState.Mouse.mCurrButtons =
120+
SDL_GetMouseState(&x, &y);
121+
}
122+
112123
mState.Mouse.mMousePos.x = static_cast<float>(x);
113124
mState.Mouse.mMousePos.y = static_cast<float>(y);
114125
}
126+
127+
void InputSystem::SetRelativeMouseMode(bool value)
128+
{
129+
SDL_bool set = value ? SDL_TRUE : SDL_FALSE;
130+
SDL_SetRelativeMouseMode(set);
131+
132+
mState.Mouse.mIsRelative = value;
133+
}

Chapter08/InputSystem.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class MouseState
4242

4343
// For mouse position
4444
const Vector2& GetPosition() const { return mMousePos; }
45+
bool IsRelative() const { return mIsRelative; }
4546

4647
// For buttons
4748
bool GetButtonValue(int button) const;
@@ -52,6 +53,8 @@ class MouseState
5253
// Store button data
5354
Uint32 mCurrButtons;
5455
Uint32 mPrevButtons;
56+
// Are we in relative mouse mode
57+
bool mIsRelative;
5558
};
5659

5760
// Wrapper that contains current state of input
@@ -73,6 +76,8 @@ class InputSystem
7376
void Update();
7477

7578
const InputState& GetState() const { return mState; }
79+
80+
void SetRelativeMouseMode(bool value);
7681
private:
7782
InputState mState;
7883
};

0 commit comments

Comments
 (0)