Skip to content

Commit 8e1e2ab

Browse files
committed
Support multi-button and WSAD joystick keyboard mapping
1 parent 52c0c5f commit 8e1e2ab

File tree

3 files changed

+39
-54
lines changed

3 files changed

+39
-54
lines changed

src/systems/x65.c

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,23 @@ void x65_key_down(x65_t* sys, int key_code) {
393393
CHIPS_ASSERT(sys && sys->valid);
394394
uint8_t m = 0;
395395
switch (key_code) {
396-
case 0x20: m = X65_JOYSTICK_BTN; break; // SPACE
397-
case 0x08: m = X65_JOYSTICK_LEFT; break; // CURSOR_LEFT
398-
case 0x09: m = X65_JOYSTICK_RIGHT; break; // CURSOR_RIGHT
399-
case 0x0A: m = X65_JOYSTICK_DOWN; break; // CURSOR_DOWN
400-
case 0x0B: m = X65_JOYSTICK_UP; break; // CURSOR_UP
396+
case 0x20: // SPACE
397+
case 0x4A: // J
398+
case 0x5A: m = X65_JOYSTICK_BTN; break; // Z
399+
case 0x4B: // K
400+
case 0x58: m = X65_JOYSTICK_BTN2; break; // X
401+
case 0x4C: // L
402+
case 0x43: m = X65_JOYSTICK_BTN3; break; // C
403+
case 0x3B: // ;
404+
case 0x56: m = X65_JOYSTICK_BTN4; break; // V
405+
case 0x41: // A
406+
case 0x107: m = X65_JOYSTICK_LEFT; break; // CURSOR_LEFT
407+
case 0x44: // D
408+
case 0x106: m = X65_JOYSTICK_RIGHT; break; // CURSOR_RIGHT
409+
case 0x53: // S
410+
case 0x108: m = X65_JOYSTICK_DOWN; break; // CURSOR_DOWN
411+
case 0x57: // W
412+
case 0x109: m = X65_JOYSTICK_UP; break; // CURSOR_UP
401413
default: break;
402414
}
403415
if (m != 0) {
@@ -418,11 +430,23 @@ void x65_key_up(x65_t* sys, int key_code) {
418430
CHIPS_ASSERT(sys && sys->valid);
419431
uint8_t m = 0;
420432
switch (key_code) {
421-
case 0x20: m = X65_JOYSTICK_BTN; break;
422-
case 0x08: m = X65_JOYSTICK_LEFT; break;
423-
case 0x09: m = X65_JOYSTICK_RIGHT; break;
424-
case 0x0A: m = X65_JOYSTICK_DOWN; break;
425-
case 0x0B: m = X65_JOYSTICK_UP; break;
433+
case 0x20:
434+
case 0x4A:
435+
case 0x5A: m = X65_JOYSTICK_BTN; break;
436+
case 0x4B:
437+
case 0x58: m = X65_JOYSTICK_BTN2; break;
438+
case 0x4C:
439+
case 0x43: m = X65_JOYSTICK_BTN3; break;
440+
case 0x3B:
441+
case 0x56: m = X65_JOYSTICK_BTN4; break;
442+
case 0x41:
443+
case 0x107: m = X65_JOYSTICK_LEFT; break;
444+
case 0x44:
445+
case 0x106: m = X65_JOYSTICK_RIGHT; break;
446+
case 0x53:
447+
case 0x108: m = X65_JOYSTICK_DOWN; break;
448+
case 0x57:
449+
case 0x109: m = X65_JOYSTICK_UP; break;
426450
default: break;
427451
}
428452
if (m != 0) {

src/systems/x65.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ typedef enum {
6666
#define X65_JOYSTICK_LEFT (1 << 2)
6767
#define X65_JOYSTICK_RIGHT (1 << 3)
6868
#define X65_JOYSTICK_BTN (1 << 5)
69+
#define X65_JOYSTICK_BTN2 (1 << 7)
70+
#define X65_JOYSTICK_BTN3 (1 << 4)
71+
#define X65_JOYSTICK_BTN4 (1 << 6)
6972

7073
// special keyboard keys
7174
#define X65_KEY_SPACE (0x20) // space

src/x65.c

Lines changed: 2 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -329,57 +329,15 @@ void app_input(const sapp_event* event) {
329329
return;
330330
}
331331
#endif
332-
const bool shift = event->modifiers & SAPP_MODIFIER_SHIFT;
333332
switch (event->type) {
334-
int c;
335-
case SAPP_EVENTTYPE_CHAR:
336-
c = (int)event->char_code;
337-
if ((c > 0x20) && (c < 0x7F)) {
338-
// need to invert case (unshifted is upper caps, shifted is lower caps
339-
if (isupper(c)) {
340-
c = tolower(c);
341-
}
342-
else if (islower(c)) {
343-
c = toupper(c);
344-
}
345-
x65_key_down(&state.x65, c);
346-
x65_key_up(&state.x65, c);
347-
}
348-
break;
349-
case SAPP_EVENTTYPE_KEY_DOWN:
333+
case SAPP_EVENTTYPE_KEY_DOWN: x65_key_down(&state.x65, event->key_code); break;
350334
case SAPP_EVENTTYPE_KEY_UP:
335+
x65_key_up(&state.x65, event->key_code);
351336
if (event->key_code == SAPP_KEYCODE_Q) {
352337
if (event->modifiers == SAPP_MODIFIER_SUPER || event->modifiers == SAPP_MODIFIER_CTRL) {
353338
sapp_request_quit();
354339
}
355340
}
356-
switch (event->key_code) {
357-
case SAPP_KEYCODE_SPACE: c = 0x20; break;
358-
case SAPP_KEYCODE_LEFT: c = 0x08; break;
359-
case SAPP_KEYCODE_RIGHT: c = 0x09; break;
360-
case SAPP_KEYCODE_DOWN: c = 0x0A; break;
361-
case SAPP_KEYCODE_UP: c = 0x0B; break;
362-
case SAPP_KEYCODE_ENTER: c = 0x0D; break;
363-
case SAPP_KEYCODE_BACKSPACE: c = shift ? 0x0C : 0x01; break;
364-
case SAPP_KEYCODE_ESCAPE: c = shift ? 0x13 : 0x03; break;
365-
case SAPP_KEYCODE_F1: c = 0xF1; break;
366-
case SAPP_KEYCODE_F2: c = 0xF2; break;
367-
case SAPP_KEYCODE_F3: c = 0xF3; break;
368-
case SAPP_KEYCODE_F4: c = 0xF4; break;
369-
case SAPP_KEYCODE_F5: c = 0xF5; break;
370-
case SAPP_KEYCODE_F6: c = 0xF6; break;
371-
case SAPP_KEYCODE_F7: c = 0xF7; break;
372-
case SAPP_KEYCODE_F8: c = 0xF8; break;
373-
default: c = 0; break;
374-
}
375-
if (c) {
376-
if (event->type == SAPP_EVENTTYPE_KEY_DOWN) {
377-
x65_key_down(&state.x65, c);
378-
}
379-
else {
380-
x65_key_up(&state.x65, c);
381-
}
382-
}
383341
break;
384342
default: break;
385343
}

0 commit comments

Comments
 (0)