blob: a4a489d00a9a10aa2bd9d56b61c7dbfb07cee4b2 (
plain)
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
|
#include "TZR_events.h"
#include "TZR_globals.h"
#include "sdl_error.h"
#include "reserve.h"
#include "getbind.h"
#include <SDL2/SDL_events.h>
#include <SDL2/SDL_gamecontroller.h>
int
TZR_PollEvent(TZR_Event *e)
{
TZR_Event discard;
if (e == NULL)
e = &discard;
SDL_Event se;
while (SDL_PollEvent(&se)) switch (se.type) {
case SDL_QUIT:
e->type = TZR_EV_QUIT;
___tzr_should_quit = 1;
return 1;
case SDL_KEYDOWN:
if (se.key.repeat)
break;
e->type = TZR_EV_KEYDOWN;
e->button = se.key.keysym.scancode;
___tzr_keystates[e->button] = TZR_KEYSTATE_PRESS;
return 1;
case SDL_KEYUP:
e->type = TZR_EV_KEYUP;
e->button = se.key.keysym.scancode;
___tzr_keystates[e->button] = TZR_KEYSTATE_RELEASE;
return 1;
case SDL_MOUSEBUTTONDOWN:
___tzr_mouse_x = se.button.x;
___tzr_mouse_y = se.button.y;
___tzr_mousestates[se.button.button] = TZR_KEYSTATE_PRESS;
break;
case SDL_MOUSEBUTTONUP:
___tzr_mouse_x = se.button.x;
___tzr_mouse_y = se.button.y;
___tzr_mousestates[se.button.button] = TZR_KEYSTATE_RELEASE;
break;
case SDL_MOUSEMOTION:
___tzr_mouse_x = se.motion.x;
___tzr_mouse_y = se.motion.y;
break;
case SDL_JOYDEVICEADDED: {
size_t i;
for (i = 0; i < ___tzr_joysticks_size; i++) {
if (___tzr_joysticks[i].ptr == NULL)
break;
}
if (i == ___tzr_joysticks_size) {
void *vec = ___tzr_joysticks;
if (reserve(&vec,
___tzr_joysticks_size + 1,
&___tzr_joysticks_capacity,
sizeof(SDL_Joystick *)))
{
TZR_Log("failed to reserve for new joystick");
break;
}
___tzr_joysticks = vec;
___tzr_joysticks_size += 1;
i = ___tzr_joysticks_size - 1;
}
SDL_GameController *jstick = SDL_GameControllerOpen(se.jdevice.which);
if (jstick == NULL) {
sdl_error(0);
break;
}
memset(&___tzr_joysticks[i], 0, sizeof(___tzr_joysticks[i]));
___tzr_joysticks[i].ptr = jstick;
TZR_Log("opened joystick");
break;
}
case SDL_JOYDEVICEREMOVED:
for (size_t i = 0; i < ___tzr_joysticks_size; i++) {
SDL_Joystick *const jstick =
SDL_GameControllerGetJoystick(___tzr_joysticks[i].ptr);
if (se.jdevice.which == SDL_JoystickInstanceID(jstick)) {
SDL_GameControllerClose(___tzr_joysticks[i].ptr);
___tzr_joysticks[i].ptr = NULL;
break;
}
}
TZR_Log("didn't remove no joystick");
break;
default:
break;
}
return 0;
}
|