Mercurial > LightClone
annotate LightClone/Source/InputManager.cpp @ 75:57c0ce406a68 tip
Add main menu
author | koryspansel <koryspansel@bendbroadband.com> |
---|---|
date | Tue, 18 Oct 2011 17:08:17 -0700 |
parents | d27c06bd8ce1 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * InputManager | |
3 */ | |
4 | |
5 #include "InputManager.h" | |
6 | |
7 /* | |
3 | 8 * fMouseSensitivity |
9 */ | |
10 static const float fMouseSensitivity = 1.5f; | |
11 | |
12 /* | |
0 | 13 * InputManager |
14 */ | |
15 InputManager::InputManager() | |
16 { | |
17 pDirectInput = NULL; | |
18 pKeyboard = NULL; | |
19 pMouse = NULL; | |
3 | 20 fMouseX = 0.0f; |
21 fMouseY = 0.0f; | |
0 | 22 |
23 memset(kCurrentKeyboardState, 0, sizeof(kCurrentKeyboardState)); | |
24 memset(kPreviousKeyboardState, 0, sizeof(kPreviousKeyboardState)); | |
25 memset(&kCurrentMouseState, 0, sizeof(kCurrentMouseState)); | |
26 memset(&kPreviousMouseState, 0, sizeof(kPreviousMouseState)); | |
27 } | |
28 | |
29 /* | |
30 * Initialze | |
31 */ | |
32 ErrorCode InputManager::Initialize(HWND kWindow) | |
33 { | |
34 HINSTANCE hInstance = GetModuleHandle(NULL); | |
35 | |
36 HRESULT hResult = DirectInput8Create(hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&pDirectInput, NULL); | |
37 if(FAILED(hResult)) | |
38 { | |
39 return Error_Fail; | |
40 } | |
41 | |
42 hResult = pDirectInput->CreateDevice(GUID_SysKeyboard, &pKeyboard, NULL); | |
43 if(FAILED(hResult)) | |
44 { | |
45 Terminate(); | |
46 return Error_Fail; | |
47 } | |
48 | |
49 hResult = pKeyboard->SetDataFormat(&c_dfDIKeyboard); | |
50 if(FAILED(hResult)) | |
51 { | |
52 Terminate(); | |
53 return Error_Fail; | |
54 } | |
55 | |
56 hResult = pKeyboard->SetCooperativeLevel(kWindow, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND); | |
57 if(FAILED(hResult)) | |
58 { | |
59 Terminate(); | |
60 return Error_Fail; | |
61 } | |
62 | |
63 hResult = pDirectInput->CreateDevice(GUID_SysMouse, &pMouse, NULL); | |
64 if(FAILED(hResult)) | |
65 { | |
66 Terminate(); | |
67 return Error_Fail; | |
68 } | |
69 | |
70 hResult = pMouse->SetDataFormat(&c_dfDIMouse); | |
71 if(FAILED(hResult)) | |
72 { | |
73 Terminate(); | |
74 return Error_Fail; | |
75 } | |
76 | |
77 hResult = pMouse->SetCooperativeLevel(kWindow, DISCL_EXCLUSIVE | DISCL_FOREGROUND); | |
78 if(FAILED(hResult)) | |
79 { | |
80 Terminate(); | |
81 return Error_Fail; | |
82 } | |
83 | |
84 pMouse->Acquire(); | |
85 | |
86 return Error_Success; | |
87 } | |
88 | |
89 /* | |
90 * Terminate | |
91 */ | |
92 void InputManager::Terminate() | |
93 { | |
94 if(pMouse) | |
95 { | |
96 pMouse->Release(); | |
97 pMouse = NULL; | |
98 } | |
99 | |
100 if(pKeyboard) | |
101 { | |
102 pKeyboard->Release(); | |
103 pKeyboard = NULL; | |
104 } | |
105 | |
106 if(pDirectInput) | |
107 { | |
108 pDirectInput->Release(); | |
109 pDirectInput = NULL; | |
110 } | |
111 } | |
112 | |
113 /* | |
114 * Update | |
115 */ | |
43 | 116 void InputManager::Update(float fElapsed) |
0 | 117 { |
118 if(pKeyboard) | |
119 { | |
120 memcpy(kPreviousKeyboardState, kCurrentKeyboardState, sizeof(kCurrentKeyboardState)); | |
121 | |
122 HRESULT hResult = pKeyboard->GetDeviceState(sizeof(kCurrentKeyboardState), kCurrentKeyboardState); | |
123 if(FAILED(hResult)) | |
124 { | |
125 hResult = pKeyboard->Acquire(); | |
126 if(SUCCEEDED(hResult)) | |
127 { | |
128 hResult = pKeyboard->GetDeviceState(sizeof(kCurrentKeyboardState), kCurrentKeyboardState); | |
15
ee1c2510096d
Work on GUI system
koryspansel <koryspansel@bendbroadband.com>
parents:
14
diff
changeset
|
129 } |
ee1c2510096d
Work on GUI system
koryspansel <koryspansel@bendbroadband.com>
parents:
14
diff
changeset
|
130 } |
0 | 131 } |
132 | |
133 if(pMouse) | |
134 { | |
135 memcpy(&kPreviousMouseState, &kCurrentMouseState, sizeof(kCurrentMouseState)); | |
136 | |
137 HRESULT hResult = pMouse->GetDeviceState(sizeof(kCurrentMouseState), &kCurrentMouseState); | |
138 if(FAILED(hResult)) | |
139 { | |
140 hResult = pMouse->Acquire(); | |
141 if(SUCCEEDED(hResult)) | |
142 { | |
143 hResult = pMouse->GetDeviceState(sizeof(kCurrentMouseState), &kCurrentMouseState); | |
144 } | |
145 } | |
3 | 146 |
147 fMouseX = Clamp(fMouseX + fMouseSensitivity * kCurrentMouseState.lX, kMouseBounds.X, kMouseBounds.X + kMouseBounds.Width - 1.0f); | |
148 fMouseY = Clamp(fMouseY + fMouseSensitivity * kCurrentMouseState.lY, kMouseBounds.Y, kMouseBounds.Y + kMouseBounds.Height - 1.0f); | |
0 | 149 } |
150 } | |
151 | |
152 /* | |
3 | 153 * SetBounds |
0 | 154 */ |
3 | 155 void InputManager::SetBounds(float fMinimumX, float fMinimumY, float fMaximumX, float fMaximumY) |
0 | 156 { |
3 | 157 kMouseBounds.X = fMinimumX; |
158 kMouseBounds.Y = fMinimumY; | |
159 kMouseBounds.Width = fMaximumX - fMinimumX; | |
160 kMouseBounds.Height = fMaximumY - fMinimumY; | |
0 | 161 } |
162 | |
163 /* | |
3 | 164 * SetMouse |
0 | 165 */ |
3 | 166 void InputManager::SetMouse(float fX, float fY) |
0 | 167 { |
3 | 168 fMouseX = Clamp(fX, kMouseBounds.X, kMouseBounds.X + kMouseBounds.Width - 1.0f); |
169 fMouseY = Clamp(fY, kMouseBounds.Y, kMouseBounds.Y + kMouseBounds.Height - 1.0f); | |
0 | 170 } |
171 | |
172 /* | |
173 * IsKeyDown | |
174 */ | |
175 bool InputManager::IsKeyDown(uint32 nKey) const | |
176 { | |
177 return (kCurrentKeyboardState[nKey] & 0x80) != 0; | |
178 } | |
179 | |
180 /* | |
181 * WasKeyDown | |
182 */ | |
183 bool InputManager::WasKeyDown(uint32 nKey) const | |
184 { | |
185 return (kPreviousKeyboardState[nKey] & 0x80) != 0; | |
186 } | |
187 | |
188 /* | |
189 * IsButtonDown | |
190 */ | |
191 bool InputManager::IsButtonDown(uint32 nButton) const | |
192 { | |
193 return (kCurrentMouseState.rgbButtons[nButton] & 0x80) != 0; | |
194 } | |
195 | |
196 /* | |
197 * WasButtonDown | |
198 */ | |
199 bool InputManager::WasButtonDown(uint32 nButton) const | |
200 { | |
201 return (kPreviousMouseState.rgbButtons[nButton] & 0x80) != 0; | |
202 } | |
203 | |
204 /* | |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
205 * IsButtonPressed |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
206 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
207 bool InputManager::IsButtonPressed(uint32 nButton) const |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
208 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
209 return ((kCurrentMouseState.rgbButtons[nButton] & 0x80) != 0) && ((kPreviousMouseState.rgbButtons[nButton] & 0x80) == 0); |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
210 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
211 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
212 /* |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
213 * IsButtonReleased |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
214 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
215 bool InputManager::IsButtonReleased(uint32 nButton) const |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
216 { |
31
0b729faa4e73
Fixed resource leak; Corrected button state logic
koryspansel
parents:
26
diff
changeset
|
217 return ((kCurrentMouseState.rgbButtons[nButton] & 0x80) == 0) && ((kPreviousMouseState.rgbButtons[nButton] & 0x80) != 0); |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
218 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
219 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
220 /* |
3 | 221 * GetMouseX |
0 | 222 */ |
3 | 223 float InputManager::GetMouseX() const |
0 | 224 { |
3 | 225 return fMouseX; |
0 | 226 } |
227 | |
228 /* | |
3 | 229 * GetMouseY |
0 | 230 */ |
3 | 231 float InputManager::GetMouseY() const |
0 | 232 { |
3 | 233 return fMouseY; |
26
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
234 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
235 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
236 /* |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
237 * GetMouseDeltaX |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
238 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
239 float InputManager::GetMouseDeltaX() const |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
240 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
241 return (float)kCurrentMouseState.lX; |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
242 } |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
243 |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
244 /* |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
245 * GetMouseDeltaY |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
246 */ |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
247 float InputManager::GetMouseDeltaY() const |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
248 { |
3a63df04f3c0
Several Gui enhancements; Drag and drop should work; Added resource caching
koryspansel
parents:
15
diff
changeset
|
249 return (float)kCurrentMouseState.lY; |
0 | 250 } |