-
Notifications
You must be signed in to change notification settings - Fork 0
/
ActionMap.h
378 lines (303 loc) · 9.45 KB
/
ActionMap.h
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
// Defines an Action Map, which contains all our actions.
// Represents the complete control structure for a character.
#ifndef StormForge_Matt_ActionMap
#define StormForge_Matt_ActionMap
#include "InputDevice.h"
#include "MemoryMgr.h"
#include "InputJoystick.h"
#include "DirectInput2.h"
class CAction;
class ActionMap
{
private:
// How many actions in this map?
int iActionCount;
// Which joystick are we mapping to?
int iJoystickIndex;
public:
// Manage memory
#if _DEBUG
ManageMemory(ActionMap, CORETYPE_INPUT_ACTIONMAP);
#endif
// Set up.
ActionMap(void) { iJoystickIndex = -1; pActions = NULL; iActionCount = 0; }
ActionMap(int iJoystick) { iJoystickIndex = iJoystick; pActions = NULL; iActionCount = 0; }
// Add an action. Return the "index"
int AddAction(char *strActionName, DWORD dwKeyboard, DWORD dwMouse = NULL, DWORD dwJoystick = NULL);
// Check for an action
DWORD ActionMap::CheckAction(int iIndex, DeviceType eDevice = DEVICE_ALL, bool bBuffered = true);
// Destroy list
void Shutdown(void)
{
DeleteAction(pActions);
}
//int GetJoystickIndex(){return iJoystickIndex;}
// This is specifically included so we can do a switch() to see what action is occurring.
DWORD ActionMap::CurrentAction(DeviceType eDevice, bool bBuffered);
void ActionMap::SetJoystick(int iStick) { iJoystickIndex = iStick; }
CInputJoystick*ActionMap::GetJoystick(void)
{
return DirectInput::GetJoystick(iJoystickIndex);
}
private:
class CAction
{
private:
/////////////////////////////////
// Member Variables
/////////////////////////////////
// The name, in words, of what this action does. Will be shown on-screen during action
// map configurations. Example: Jump, Shoot, Strafe.
char czActionName[21];
// The currently mapped button for the keyboard, mouse, and joystick, respectively.
DWORD dwCurrent[3];
// The default buttons for the keyboard, mouse, and joystick, respectively.
// RestoreDefaults() will set the key to this.
DWORD dwDefault[3];
// Indexing
int iIndex;
/////////////////////////////////
// Private Member Functions
/////////////////////////////////
////////////////////////
/// GetJoystickInputText()
////////////////////////
/// Gets the default input for a joystick.
/// PRIVATE.
///
/// Input:
/// char* czBuffer This will be filled with the string.
///
/// Output:
/// char* czBuffer This will be filled with the string.
///
/// Returns:
/// none
////////////////////////
void CAction::GetJoystickInputText(char *czBuffer);
////////////////////////
/// GetMouseInputText()
////////////////////////
/// Gets the default input for a mouse
/// PRIVATE.
///
/// Input:
/// char* czBuffer This will be filled with the string.
///
/// Output:
/// char* czBuffer This will be filled with the string.
///
/// Returns:
/// none
////////////////////////
void ActionMap::CAction::GetMouseInputText(char *czBuffer);
public:
// For linked list functionality
ActionMap::CAction *pNext;
int ActionMap::CAction::GetIndex(void) { return iIndex; }
////////////////////////
/// GetDefault()
////////////////////////
/// Gets the default input for a particular device.
///
/// Input:
/// DeviceType eDevice
/// Which device you want. See the DeviceTypes enumeration for help.
///
/// Returns:
/// DWORD The default input for this action.
////////////////////////
DWORD GetDefault(DeviceType eDevice)
{
return dwDefault[eDevice];
}
////////////////////////
/// GetCurrent()
////////////////////////
/// Gets the current input for a particular device.
///
/// Input:
/// DeviceType eDevice
// Which device you want. See the DeviceTypes enumeration for help.
///
/// Returns:
/// DWORD The current input for this action.
////////////////////////
DWORD GetCurrent(DeviceType eDevice)
{
return dwCurrent[eDevice];
}
////////////////////////
/// Operator [ ]
////////////////////////
/// A shortcut for GetCurrent().
///
/// Input:
/// DeviceType eDevice
/// Which device you want. See the DeviceTypes enumeration for help.
///
/// Returns:
/// DWORD The result of GetCurrent
////////////////////////
DWORD operator [] ( DeviceType eDevice )
{
return GetCurrent(eDevice);
}
////////////////////////
/// SetCurrent()
////////////////////////
/// Sets the current input for a particular device.
///
/// Input:
/// DeviceType eDevice
/// Which device you want. See the DeviceTypes enumeration for help.
///
/// DWORD dwInput
/// Which button / key you want to map to this action.
///
/// Returns:
/// none
////////////////////////
void SetCurrent(DeviceType eDevice, DWORD dwInput)
{
dwCurrent[eDevice] = dwInput;
}
////////////////////////
/// SetDefault()
////////////////////////
/// Sets the Default input for a particular device.
///
/// Input:
/// DeviceType eDevice
/// Which device you want. See the DeviceTypes enumeration for help.
///
/// DWORD dwInput
/// Which button / key you want to map to this action.
///
/// Returns:
/// none
////////////////////////
void SetDefault(DeviceType eDevice, DWORD dwInput)
{
// Set the device.
dwDefault[eDevice] = dwInput;
}
////////////////////////
/// RestoreDefaults()
////////////////////////
/// Sets this action to its default value.
///
/// Input:
/// DeviceType eDevice
/// Which device you want. See the DeviceTypes enumeration for help.
/// Use the default parameter (pass in no parameters) to reset all devices.
///
/// Returns:
/// DWORD The default input for this action.
/// Will return NULL if the default parameter is used.
////////////////////////
DWORD RestoreDefaults(DeviceType eDevice = DEVICE_ALL);
////////////////////////
/// GetActionName()
////////////////////////
/// Gets the name of the action.
///
/// Input:
/// none
///
/// Returns:
/// char* The name of the action.
////////////////////////
char* GetActionName(void)
{
return czActionName;
}
////////////////////////
/// SetActionName()
////////////////////////
/// Sets the name of this action. If your string is longer than 20 characters,
/// it will be clipped.
///
/// Input:
/// char *czString The desired name.
///
/// Returns:
/// none
////////////////////////
void SetActionName(char* czString);
////////////////////////
/// CAction()
////////////////////////
/// Sets up all of our default values, which will be currents by default.
/// Hey, who'd have thought? :)
///
/// Input:
/// char *czString The desired name. It'll be truncated to 20 characters!
/// int iIdx The index for this action
/// DWORD dwKeyboard Default keyboard setting for this action
/// DWORD dwMouse Default mouse setting for this action
/// DWORD dwJoystick Default joystick setting for this action
///
/// Returns:
/// none
////////////////////////
CAction(char* czString, int iIdx, DWORD dwKeyboard = NULL, DWORD dwMouse = NULL, DWORD dwJoystick = NULL)
{
SetDefaults(czString, dwKeyboard, dwMouse, dwJoystick);
pNext = NULL;
iIndex = iIdx;
}
////////////////////////
/// SetDefaults()
////////////////////////
/// Sets up all of our default values, which will be currents by default.
/// Hey, who'd have thought? :)
///
/// Input:
/// char *czString The desired name. It'll be truncated to 20 characters!
/// DWORD dwKeyboard Default keyboard setting for this action
/// DWORD dwMouse Default mouse setting for this action
/// DWORD dwJoystick Default joystick setting for this action
///
/// Returns:
/// none
////////////////////////
void SetDefaults(char* czString, DWORD dwKeyboard, DWORD dwMouse = NULL, DWORD dwJoystick = NULL);
////////////////////////
/// GetActionText()
////////////////////////
/// Gets a text representation of the key or axis/button this action
/// is currently mapped to for the selected device. Primarily implemented
/// for on-screen display during control configuration.
///
/// Input:
/// DeviceType eDevice Which device to check
/// char* czBuffer This will be filled with the string.
///
/// Output:
/// char* czBuffer This will be filled with the string.
///
/// Returns:
/// none
////////////////////////
void GetActionText(DeviceType eDevice, char* czBuffer);
// Manage memory:
#if _DEBUG
ManageMemory(ActionMap::CAction, CORETYPE_INPUT_ACTION);
#endif
};
// All of our actions
CAction *pActions;
// Try deleting recursively
void DeleteAction(ActionMap::CAction *pAct)
{
if (pAct)
DeleteAction(pAct->pNext);
delete pAct;
}
// Get an action's name
void ActionMap::ActionName(int iIndex, char *strStoreHere);
// Get an action's pointer
ActionMap::CAction *ActionMap::Action(int iIndex);
};
#endif