]> git.bts.cx Git - benzene.git/blob - src_platform/playdate/bz/input/input.c
Initial version
[benzene.git] / src_platform / playdate / bz / input / input.c
1 #include <bz/input/input_internal.h>
2 #include <bz/input/platform.h>
3
4 #include <bz/input/input_id_internal.h>
5 #include <playdate/entrypoint.h>
6
7 typedef enum BZInputCode {
8 BZInputCodeQuit = 1,
9 } BZInputCode;
10 const BZInputCode BZInputCodeMax = BZInputCodeQuit;
11
12 typedef union BZInputTableEntry {
13 bool booleanValue;
14 int integerValue;
15 float floatValue;
16 } BZInputTableEntry;
17
18 static BZInput bzQuitInput = { .id = BZInputCodeQuit, };
19 BZInputID bzQuitInputID = &bzQuitInput;
20
21 //const size_t inputTableSize = BZInputCodeMax + 1;
22 #define inputTableSize 8
23 static BZInputTableEntry inputTable[inputTableSize];
24
25 typedef struct {
26 bool down;
27 bool pressed;
28 } Button;
29
30 static Button buttons[8];
31
32 /*int buttonIdx(SDL_KeyCode keyCode) {
33 switch (keyCode) {
34 case SDLK_UP:
35 return 1;
36
37 case SDLK_DOWN:
38 return 2;
39
40 case SDLK_LEFT:
41 return 3;
42
43 case SDLK_RIGHT:
44 return 4;
45
46 case 'z':
47 return 5;
48
49 case 'x':
50 return 6;
51
52 default:
53 return 0;
54 }
55 }*/
56
57 void bzInputInit() {
58 for (size_t i = 0; i < 8; ++i) {
59 buttons[i].down = false;
60 }
61 }
62
63 void bzInputTeardown() {
64
65 }
66
67 void bzInputProcessFrame() {
68 for (size_t i = 0; i < inputTableSize; ++i) {
69 inputTable[i].integerValue = 0; // FIXME, max size and whatever.
70 }
71
72 // for (size_t i = 0; i < 8; ++i) {
73 // buttons[i].down = buttons[i].down || buttons[i].pressed;
74 // buttons[i].pressed = false;
75 // }
76
77 PDButtons current;
78 PDButtons pushed;
79 PDButtons released;
80 playdate->system->getButtonState(&current, &pushed, &released);
81
82 buttons[1].down = (current & kButtonUp) > 0;
83 buttons[1].pressed = (pushed & kButtonUp) > 0;
84
85 buttons[2].down = (current & kButtonDown) > 0;
86 buttons[2].pressed = (pushed & kButtonDown) > 0;
87
88 buttons[3].down = (current & kButtonLeft) > 0;
89 buttons[3].pressed = (pushed & kButtonLeft) > 0;
90
91 buttons[4].down = (current & kButtonRight) > 0;
92 buttons[4].pressed = (pushed & kButtonRight) > 0;
93
94 buttons[5].down = (current & kButtonB) > 0;
95 buttons[5].pressed = (pushed & kButtonB) > 0;
96
97 buttons[6].down = (current & kButtonA) > 0;
98 buttons[6].pressed = (pushed & kButtonA) > 0;
99
100 /*SDL_Event event;
101 while (SDL_PollEvent(&event)) {
102 switch (event.type) {
103 case SDL_QUIT:
104 inputTable[BZInputCodeQuit].booleanValue = true;
105 break;
106
107 case SDL_KEYDOWN:
108 buttons[buttonIdx(event.key.keysym.sym)].pressed = true;
109 break;
110
111 case SDL_KEYUP:
112 buttons[buttonIdx(event.key.keysym.sym)].pressed = false;
113 buttons[buttonIdx(event.key.keysym.sym)].down = false;
114 break;
115 }
116 }*/
117 }
118
119 bool bzInputGetBooleanValue(BZInputID inputID) {
120 return inputTable[inputID->id].booleanValue;
121 }
122
123 int bzInputGetIntegerValue(BZInputID inputID) {
124 return inputTable[inputID->id].integerValue;
125 }
126
127 float bzInputGetFloatValue(BZInputID inputID) {
128 return inputTable[inputID->id].floatValue;
129 }
130
131 bool bzInputBtn(int id) {
132 return buttons[id].down || buttons[id].pressed;
133 }
134
135 bool bzInputBtnP(int id) {
136 return buttons[id].pressed;
137 }
138