forked from KS-Presto/Wolf4SDL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
id_in.h
191 lines (174 loc) · 5.16 KB
/
id_in.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
//
// ID Engine
// ID_IN.h - Header file for Input Manager
// v1.0d1
// By Jason Blochowiak
//
#include <unordered_map>
#ifndef __ID_IN__
#define __ID_IN__
#ifdef __DEBUG__
#define __DEBUG_InputMgr__
#endif
typedef int ScanCode;
#define sc_None SDLK_UNKNOWN
#define sc_Return SDLK_RETURN
#define sc_Escape SDLK_ESCAPE
#define sc_Space SDLK_SPACE
#define sc_BackSpace SDLK_BACKSPACE
#define sc_Tab SDLK_TAB
#define sc_Alt SDLK_LALT
#define sc_Control SDLK_LCTRL
#define sc_CapsLock SDLK_CAPSLOCK
#define sc_LShift SDLK_LSHIFT
#define sc_RShift SDLK_RSHIFT
#define sc_UpArrow SDLK_UP
#define sc_DownArrow SDLK_DOWN
#define sc_LeftArrow SDLK_LEFT
#define sc_RightArrow SDLK_RIGHT
#define sc_Insert SDLK_INSERT
#define sc_Delete SDLK_DELETE
#define sc_Home SDLK_HOME
#define sc_End SDLK_END
#define sc_PgUp SDLK_PAGEUP
#define sc_PgDn SDLK_PAGEDOWN
#define sc_F1 SDLK_F1
#define sc_F2 SDLK_F2
#define sc_F3 SDLK_F3
#define sc_F4 SDLK_F4
#define sc_F5 SDLK_F5
#define sc_F6 SDLK_F6
#define sc_F7 SDLK_F7
#define sc_F8 SDLK_F8
#define sc_F9 SDLK_F9
#define sc_F10 SDLK_F10
#define sc_F11 SDLK_F11
#define sc_F12 SDLK_F12
#define sc_ScrollLock SDLK_SCROLLLOCK
#define sc_PrintScreen SDLK_PRINTSCREEN
#define sc_Pause SDLK_PAUSE
#define sc_1 SDLK_1
#define sc_2 SDLK_2
#define sc_3 SDLK_3
#define sc_4 SDLK_4
#define sc_5 SDLK_5
#define sc_6 SDLK_6
#define sc_7 SDLK_7
#define sc_8 SDLK_8
#define sc_9 SDLK_9
#define sc_0 SDLK_0
#define sc_A SDLK_a
#define sc_B SDLK_b
#define sc_C SDLK_c
#define sc_D SDLK_d
#define sc_E SDLK_e
#define sc_F SDLK_f
#define sc_G SDLK_g
#define sc_H SDLK_h
#define sc_I SDLK_i
#define sc_J SDLK_j
#define sc_K SDLK_k
#define sc_L SDLK_l
#define sc_M SDLK_m
#define sc_N SDLK_n
#define sc_O SDLK_o
#define sc_P SDLK_p
#define sc_Q SDLK_q
#define sc_R SDLK_r
#define sc_S SDLK_s
#define sc_T SDLK_t
#define sc_U SDLK_u
#define sc_V SDLK_v
#define sc_W SDLK_w
#define sc_X SDLK_x
#define sc_Y SDLK_y
#define sc_Z SDLK_z
#define key_None 0
typedef enum {
demo_Off, demo_Record, demo_Playback, demo_PlayDone
} Demo;
typedef enum {
ctrl_Keyboard,
ctrl_Keyboard1 = ctrl_Keyboard, ctrl_Keyboard2,
ctrl_Joystick,
ctrl_Joystick1 = ctrl_Joystick, ctrl_Joystick2,
ctrl_Mouse
} ControlType;
typedef enum {
motion_Left = -1, motion_Up = -1,
motion_None = 0,
motion_Right = 1, motion_Down = 1
} Motion;
typedef enum {
dir_North, dir_NorthEast,
dir_East, dir_SouthEast,
dir_South, dir_SouthWest,
dir_West, dir_NorthWest,
dir_None
} Direction;
typedef struct {
boolean button0, button1, button2, button3;
short x, y;
Motion xaxis, yaxis;
Direction dir;
} CursorInfo;
typedef CursorInfo ControlInfo;
typedef struct {
ScanCode button0, button1,
upleft, up, upright,
left, right,
downleft, down, downright;
} KeyboardDef;
typedef struct {
word joyMinX, joyMinY,
threshMinX, threshMinY,
threshMaxX, threshMaxY,
joyMaxX, joyMaxY,
joyMultXL, joyMultYL,
joyMultXH, joyMultYH;
} JoystickDef;
// Global variables
extern std::unordered_map<int, boolean> Keyboard;
//I do not see multiple threads reading this
extern boolean MousePresent;
extern volatile boolean Paused;
extern volatile char LastASCII;
extern volatile ScanCode LastScan;
extern int JoyNumButtons;
extern boolean forcegrabmouse;
struct JoystickSens
{
int sensitivity;
int deadzone;
};
extern JoystickSens* JoySensitivity;
// Function prototypes
#define IN_KeyDown(code) (Keyboard[(code)])
#define IN_ClearKey(code) {Keyboard[code] = false;\
if (code == LastScan) LastScan = sc_None;}
// DEBUG - put names in prototypes
extern void IN_Startup(void), IN_Shutdown(void);
extern void IN_ClearKeysDown(void);
extern void IN_ReadControl(int, ControlInfo*);
extern void IN_GetJoyAbs(word joy, word* xp, word* yp);
extern void IN_SetupJoy(word joy, word minx, word maxx,
word miny, word maxy);
extern void IN_StopDemo(void), IN_FreeDemoBuffer(void),
IN_Ack(void);
extern boolean IN_UserInput(longword delay);
extern word IN_GetJoyButtonsDB(word joy);
extern const char* IN_GetScanName(ScanCode);
void IN_WaitAndProcessEvents();
void IN_ProcessEvents();
int IN_MouseButtons(void);
boolean IN_JoyPresent();
void IN_SetJoyCurrent(int joyIndex);
int IN_JoyButtons(void);
void IN_GetJoyDelta(int* dx, int* dy);
void IN_GetJoyFineDelta(int* dx, int* dy);
void IN_StartAck(void);
boolean IN_CheckAck(void);
bool IN_IsInputGrabbed();
int IN_GetJoyAxis(int axis);
int IN_JoyAxes(void);
#endif