Repository navigation
Expand file tree
/
Copy pathInputSystem.cpp
More file actions
148 lines (133 loc) · 2.65 KB
/
Copy pathInputSystem.cpp
File metadata and controls
148 lines (133 loc) · 2.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// ----------------------------------------------------------------
// From Game Programming in C++ by Sanjay Madhav
// Copyright (C) 2017 Sanjay Madhav. All rights reserved.
//
// Released under the BSD License
// See LICENSE in root directory for full details.
// ----------------------------------------------------------------
#include "InputSystem.h"
#include <SDL/SDL.h>
#include <cstring>
bool KeyboardState::GetKeyValue(int keyCode) const
{
return mCurrState[keyCode] == 1;
}
ButtonState KeyboardState::GetKeyState(int keyCode) const
{
if (mPrevState[keyCode] == 0)
{
if (mCurrState[keyCode] == 0)
{
return ENone;
}
else
{
return EPressed;
}
}
else // Prev state must be 1
{
if (mCurrState[keyCode] == 0)
{
return EReleased;
}
else
{
return EHeld;
}
}
}
bool MouseState::GetButtonValue(int button) const
{
return (SDL_BUTTON(button) & mCurrButtons) == 1;
}
ButtonState MouseState::GetButtonState(int button) const
{
int mask = SDL_BUTTON(button);
if ((mask & mPrevButtons) == 0)
{
if ((mask & mCurrButtons) == 0)
{
return ENone;
}
else
{
return EPressed;
}
}
else
{
if ((mask & mCurrButtons) == 0)
{
return EReleased;
}
else
{
return EHeld;
}
}
}
bool InputSystem::Initialize()
{
// Keyboard
// Assign current state pointer
mState.Keyboard.mCurrState = SDL_GetKeyboardState(NULL);
// Clear previous state memory
memset(mState.Keyboard.mPrevState, 0,
SDL_NUM_SCANCODES);
// Mouse (just set everything to 0)
mState.Mouse.mCurrButtons = 0;
mState.Mouse.mPrevButtons = 0;
return true;
}
void InputSystem::Shutdown()
{
}
void InputSystem::PrepareForUpdate()
{
// Copy current state to previous
// Keyboard
memcpy(mState.Keyboard.mPrevState,
mState.Keyboard.mCurrState,
SDL_NUM_SCANCODES);
// Mouse
mState.Mouse.mPrevButtons = mState.Mouse.mCurrButtons;
mState.Mouse.mIsRelative = false;
mState.Mouse.mScrollWheel = Vector2::Zero;
}
void InputSystem::Update()
{
// Mouse
int x = 0, y = 0;
if (mState.Mouse.mIsRelative)
{
mState.Mouse.mCurrButtons =
SDL_GetRelativeMouseState(&x, &y);
}
else
{
mState.Mouse.mCurrButtons =
SDL_GetMouseState(&x, &y);
}
mState.Mouse.mMousePos.x = static_cast<float>(x);
mState.Mouse.mMousePos.y = static_cast<float>(y);
}
void InputSystem::ProcessEvent(SDL_Event& event)
{
switch (event.type)
{
case SDL_MOUSEWHEEL:
mState.Mouse.mScrollWheel = Vector2(
static_cast<float>(event.wheel.x),
static_cast<float>(event.wheel.y));
break;
default:
break;
}
}
void InputSystem::SetRelativeMouseMode(bool value)
{
SDL_bool set = value ? SDL_TRUE : SDL_FALSE;
SDL_SetRelativeMouseMode(set);
mState.Mouse.mIsRelative = value;
}