mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-27 20:41:42 +00:00
More Peachy reviews + added dxgi gKeyboard support
This commit is contained in:
parent
24ac64b8b8
commit
77952291b8
11 changed files with 622 additions and 221 deletions
|
|
@ -18,9 +18,7 @@
|
|||
|
||||
static int keyboard_buttons_down;
|
||||
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
bool kb_keys_curr_down[SDL_NUM_SCANCODES];
|
||||
#endif
|
||||
bool kb_keys_curr_down[512];
|
||||
|
||||
#define MAX_KEYBINDS 64
|
||||
static int keyboard_mapping[MAX_KEYBINDS][2];
|
||||
|
|
@ -65,13 +63,11 @@ bool keyboard_on_key_up(int scancode) {
|
|||
|
||||
void keyboard_on_all_keys_up(void) {
|
||||
keyboard_buttons_down = 0;
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
for (int scancode = 0; scancode < SDL_NUM_SCANCODES; ++scancode) {
|
||||
for (int scancode = 0; scancode < 512; ++scancode) {
|
||||
gKeyboard[scancode].down = false;
|
||||
gKeyboard[scancode].pressed = false;
|
||||
gKeyboard[scancode].released = false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void keyboard_on_text_input(char* text) {
|
||||
|
|
@ -124,8 +120,7 @@ static void keyboard_init(void) {
|
|||
|
||||
|
||||
static void keyboard_read(OSContPad *pad) {
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
for (int scancode = 0; scancode < SDL_NUM_SCANCODES; ++scancode) {
|
||||
for (int scancode = 0; scancode < 512; ++scancode) {
|
||||
bool prev = gKeyboard[scancode].down;
|
||||
bool curr = kb_keys_curr_down[scancode];
|
||||
|
||||
|
|
@ -133,7 +128,6 @@ static void keyboard_read(OSContPad *pad) {
|
|||
gKeyboard[scancode].pressed = (!prev && curr);
|
||||
gKeyboard[scancode].released = (prev && !curr);
|
||||
}
|
||||
#endif
|
||||
|
||||
pad->button |= keyboard_buttons_down;
|
||||
const u32 xstick = keyboard_buttons_down & STICK_XMASK;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include <stdbool.h>
|
||||
#include "controller_api.h"
|
||||
|
||||
# define VK_BASE_KEYBOARD 0x0000
|
||||
#define VK_BASE_KEYBOARD 0x0000
|
||||
|
||||
#define SCANCODE_ESCAPE 1
|
||||
#define SCANCODE_BACKSPACE 14
|
||||
|
|
@ -44,9 +44,7 @@ void keyboard_on_all_keys_up(void);
|
|||
void keyboard_on_text_input(char* text);
|
||||
void keyboard_on_text_editing(char* text, int cursorPos);
|
||||
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
extern bool kb_keys_curr_down[SDL_NUM_SCANCODES];
|
||||
#endif
|
||||
extern bool kb_keys_curr_down[512];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
|
|
@ -292,6 +292,65 @@ bool fs_sys_filename_is_portable(char const *filename) {
|
|||
|
||||
/* these operate on the real file system */
|
||||
|
||||
static bool concat_path(char* destination, char* path, char* fname) {
|
||||
return (snprintf(destination, SYS_MAX_PATH - 1, "%s/%s", path, fname) >= 0);
|
||||
}
|
||||
|
||||
static char* path_basename(char* path) {
|
||||
char* base = path;
|
||||
while (*path != '\0') {
|
||||
if (*(path + 1) != '\0') {
|
||||
if (*path == '\\' || *path == '/') {
|
||||
base = path + 1;
|
||||
}
|
||||
}
|
||||
path++;
|
||||
}
|
||||
return base;
|
||||
}
|
||||
|
||||
bool fs_sys_copy_file(char* src, const char* dir) {
|
||||
const char* directory = fs_get_write_path(dir);
|
||||
fs_sys_mkdir(directory);
|
||||
|
||||
char dst[SYS_MAX_PATH] = { 0 };
|
||||
if (!concat_path(dst, (char*)directory, path_basename(src))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fin = fopen(src, "rb");
|
||||
if (fin == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fout = fopen(dst, "wb");
|
||||
if (fout == NULL) {
|
||||
fclose(fin);
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t rbytes;
|
||||
size_t wbytes;
|
||||
unsigned char buff[8192];
|
||||
do {
|
||||
rbytes = fread(buff, 1, sizeof(buff), fin);
|
||||
if (rbytes > 0) {
|
||||
wbytes = fwrite(buff, 1, rbytes, fout);
|
||||
} else {
|
||||
wbytes = 0;
|
||||
}
|
||||
} while ((rbytes > 0) && (rbytes == wbytes));
|
||||
|
||||
fclose(fout);
|
||||
fclose(fin);
|
||||
|
||||
if (wbytes) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool fs_sys_path_exists(const char *name) {
|
||||
#ifdef _WIN32
|
||||
return GetFileAttributesA(name) != INVALID_FILE_ATTRIBUTES;
|
||||
|
|
|
|||
|
|
@ -102,6 +102,7 @@ bool fs_sys_filename_is_portable(char const *filename);
|
|||
/* these operate on the real filesystem and are used by fs_packtype_dir */
|
||||
|
||||
bool fs_sys_walk(const char *base, walk_fn_t walk, void *user, const bool recur);
|
||||
bool fs_sys_copy_file(char* src, const char* dir);
|
||||
bool fs_sys_path_exists(const char *name);
|
||||
bool fs_sys_file_exists(const char *name);
|
||||
bool fs_sys_dir_exists(const char *name);
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ extern "C" {
|
|||
#include "pc/network/version.h"
|
||||
#include "pc/configfile.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
#include "pc/controller/controller_keyboard.h"
|
||||
}
|
||||
|
||||
#include "pc/pc_main.h"
|
||||
|
|
@ -230,6 +231,260 @@ static void update_screen_settings(void) {
|
|||
}
|
||||
}
|
||||
|
||||
// Maps dxgi scancodes to sdl2 scancodes, left scancodes are non-extended keys and right ones are extended keys
|
||||
static const DXGI_Scancode dxgi_scancodes[256][2] = {
|
||||
/* Non-Extended | Extended */
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNKNOWN }, // 0x00
|
||||
{ DXGI_SCANCODE_ESCAPE, DXGI_SCANCODE_UNKNOWN }, // 0x01
|
||||
{ DXGI_SCANCODE_1, DXGI_SCANCODE_UNKNOWN }, // 0x02
|
||||
{ DXGI_SCANCODE_2, DXGI_SCANCODE_UNKNOWN }, // 0x03
|
||||
{ DXGI_SCANCODE_3, DXGI_SCANCODE_UNKNOWN }, // 0x04
|
||||
{ DXGI_SCANCODE_4, DXGI_SCANCODE_UNKNOWN }, // 0x05
|
||||
{ DXGI_SCANCODE_5, DXGI_SCANCODE_UNKNOWN }, // 0x06
|
||||
{ DXGI_SCANCODE_6, DXGI_SCANCODE_UNKNOWN }, // 0x07
|
||||
{ DXGI_SCANCODE_7, DXGI_SCANCODE_UNKNOWN }, // 0x08
|
||||
{ DXGI_SCANCODE_8, DXGI_SCANCODE_UNKNOWN }, // 0x09
|
||||
{ DXGI_SCANCODE_9, DXGI_SCANCODE_UNKNOWN }, // 0x0A
|
||||
{ DXGI_SCANCODE_0, DXGI_SCANCODE_UNKNOWN }, // 0x0B
|
||||
{ DXGI_SCANCODE_MINUS, DXGI_SCANCODE_UNKNOWN }, // 0x0C
|
||||
{ DXGI_SCANCODE_EQUALS, DXGI_SCANCODE_UNKNOWN }, // 0x0D
|
||||
{ DXGI_SCANCODE_BACKSPACE, DXGI_SCANCODE_UNKNOWN }, // 0x0E
|
||||
{ DXGI_SCANCODE_TAB, DXGI_SCANCODE_UNKNOWN }, // 0x0F
|
||||
{ DXGI_SCANCODE_Q, DXGI_SCANCODE_UNKNOWN }, // 0x10
|
||||
{ DXGI_SCANCODE_W, DXGI_SCANCODE_UNKNOWN }, // 0x11
|
||||
{ DXGI_SCANCODE_E, DXGI_SCANCODE_UNKNOWN }, // 0x12
|
||||
{ DXGI_SCANCODE_R, DXGI_SCANCODE_UNKNOWN }, // 0x13
|
||||
{ DXGI_SCANCODE_T, DXGI_SCANCODE_UNKNOWN }, // 0x14
|
||||
{ DXGI_SCANCODE_Y, DXGI_SCANCODE_UNKNOWN }, // 0x15
|
||||
{ DXGI_SCANCODE_U, DXGI_SCANCODE_UNKNOWN }, // 0x16
|
||||
{ DXGI_SCANCODE_I, DXGI_SCANCODE_UNKNOWN }, // 0x17
|
||||
{ DXGI_SCANCODE_O, DXGI_SCANCODE_UNKNOWN }, // 0x18
|
||||
{ DXGI_SCANCODE_P, DXGI_SCANCODE_UNKNOWN }, // 0x19
|
||||
{ DXGI_SCANCODE_LEFTBRACKET, DXGI_SCANCODE_UNKNOWN }, // 0x1A
|
||||
{ DXGI_SCANCODE_RIGHTBRACKET, DXGI_SCANCODE_UNKNOWN }, // 0x1B
|
||||
{ DXGI_SCANCODE_RETURN, DXGI_SCANCODE_KP_ENTER }, // 0x1C
|
||||
{ DXGI_SCANCODE_LCTRL, DXGI_SCANCODE_RCTRL }, // 0x1D
|
||||
{ DXGI_SCANCODE_A, DXGI_SCANCODE_UNKNOWN }, // 0x1E
|
||||
{ DXGI_SCANCODE_S, DXGI_SCANCODE_UNKNOWN }, // 0x1F
|
||||
{ DXGI_SCANCODE_D, DXGI_SCANCODE_UNKNOWN }, // 0x20
|
||||
{ DXGI_SCANCODE_F, DXGI_SCANCODE_UNKNOWN }, // 0x21
|
||||
{ DXGI_SCANCODE_G, DXGI_SCANCODE_UNKNOWN }, // 0x22
|
||||
{ DXGI_SCANCODE_H, DXGI_SCANCODE_UNKNOWN }, // 0x23
|
||||
{ DXGI_SCANCODE_J, DXGI_SCANCODE_UNKNOWN }, // 0x24
|
||||
{ DXGI_SCANCODE_K, DXGI_SCANCODE_UNKNOWN }, // 0x25
|
||||
{ DXGI_SCANCODE_L, DXGI_SCANCODE_UNKNOWN }, // 0x26
|
||||
{ DXGI_SCANCODE_SEMICOLON, DXGI_SCANCODE_UNKNOWN }, // 0x27
|
||||
{ DXGI_SCANCODE_APOSTROPHE, DXGI_SCANCODE_UNKNOWN }, // 0x28
|
||||
{ DXGI_SCANCODE_GRAVE, DXGI_SCANCODE_UNKNOWN }, // 0x29
|
||||
{ DXGI_SCANCODE_LSHIFT, DXGI_SCANCODE_UNKNOWN }, // 0x2A
|
||||
{ DXGI_SCANCODE_BACKSLASH, DXGI_SCANCODE_UNKNOWN }, // 0x2B
|
||||
{ DXGI_SCANCODE_Z, DXGI_SCANCODE_UNKNOWN }, // 0x2C
|
||||
{ DXGI_SCANCODE_X, DXGI_SCANCODE_UNKNOWN }, // 0x2D
|
||||
{ DXGI_SCANCODE_C, DXGI_SCANCODE_UNKNOWN }, // 0x2E
|
||||
{ DXGI_SCANCODE_V, DXGI_SCANCODE_UNKNOWN }, // 0x2F
|
||||
{ DXGI_SCANCODE_B, DXGI_SCANCODE_UNKNOWN }, // 0x30
|
||||
{ DXGI_SCANCODE_N, DXGI_SCANCODE_UNKNOWN }, // 0x31
|
||||
{ DXGI_SCANCODE_M, DXGI_SCANCODE_UNKNOWN }, // 0x32
|
||||
{ DXGI_SCANCODE_COMMA, DXGI_SCANCODE_UNKNOWN }, // 0x33
|
||||
{ DXGI_SCANCODE_PERIOD, DXGI_SCANCODE_UNKNOWN }, // 0x34
|
||||
{ DXGI_SCANCODE_SLASH, DXGI_SCANCODE_KP_DIVIDE }, // 0x35
|
||||
{ DXGI_SCANCODE_RSHIFT, DXGI_SCANCODE_UNKNOWN }, // 0x36
|
||||
{ DXGI_SCANCODE_KP_MULTIPLY, DXGI_SCANCODE_PRINTSCREEN }, // 0x37
|
||||
{ DXGI_SCANCODE_LALT, DXGI_SCANCODE_RALT }, // 0x38
|
||||
{ DXGI_SCANCODE_SPACE, DXGI_SCANCODE_UNKNOWN }, // 0x39
|
||||
{ DXGI_SCANCODE_CAPSLOCK, DXGI_SCANCODE_UNKNOWN }, // 0x3A
|
||||
{ DXGI_SCANCODE_F1, DXGI_SCANCODE_UNKNOWN }, // 0x3B
|
||||
{ DXGI_SCANCODE_F2, DXGI_SCANCODE_UNKNOWN }, // 0x3C
|
||||
{ DXGI_SCANCODE_F3, DXGI_SCANCODE_UNKNOWN }, // 0x3D
|
||||
{ DXGI_SCANCODE_F4, DXGI_SCANCODE_UNKNOWN }, // 0x3E
|
||||
{ DXGI_SCANCODE_F5, DXGI_SCANCODE_UNKNOWN }, // 0x3F
|
||||
{ DXGI_SCANCODE_F6, DXGI_SCANCODE_UNKNOWN }, // 0x40
|
||||
{ DXGI_SCANCODE_F7, DXGI_SCANCODE_UNKNOWN }, // 0x41
|
||||
{ DXGI_SCANCODE_F8, DXGI_SCANCODE_UNKNOWN }, // 0x42
|
||||
{ DXGI_SCANCODE_F9, DXGI_SCANCODE_UNKNOWN }, // 0x43
|
||||
{ DXGI_SCANCODE_F10, DXGI_SCANCODE_UNKNOWN }, // 0x44
|
||||
{ DXGI_SCANCODE_PAUSE, DXGI_SCANCODE_NUMLOCKCLEAR }, // 0x45
|
||||
{ DXGI_SCANCODE_SCROLLLOCK, DXGI_SCANCODE_UNKNOWN }, // 0x46
|
||||
{ DXGI_SCANCODE_KP_7, DXGI_SCANCODE_HOME }, // 0x47
|
||||
{ DXGI_SCANCODE_KP_8, DXGI_SCANCODE_UP }, // 0x48
|
||||
{ DXGI_SCANCODE_KP_9, DXGI_SCANCODE_PAGEUP }, // 0x49
|
||||
{ DXGI_SCANCODE_KP_MINUS, DXGI_SCANCODE_UNKNOWN }, // 0x4A
|
||||
{ DXGI_SCANCODE_KP_4, DXGI_SCANCODE_LEFT }, // 0x4B
|
||||
{ DXGI_SCANCODE_KP_5, DXGI_SCANCODE_UNKNOWN }, // 0x4C
|
||||
{ DXGI_SCANCODE_KP_6, DXGI_SCANCODE_RIGHT }, // 0x4D
|
||||
{ DXGI_SCANCODE_KP_PLUS, DXGI_SCANCODE_UNKNOWN }, // 0x4E
|
||||
{ DXGI_SCANCODE_KP_1, DXGI_SCANCODE_END }, // 0x4F
|
||||
{ DXGI_SCANCODE_KP_2, DXGI_SCANCODE_DOWN }, // 0x50
|
||||
{ DXGI_SCANCODE_KP_3, DXGI_SCANCODE_PAGEDOWN }, // 0x51
|
||||
{ DXGI_SCANCODE_KP_0, DXGI_SCANCODE_INSERT }, // 0x52
|
||||
{ DXGI_SCANCODE_KP_PERIOD, DXGI_SCANCODE_DELETE }, // 0x53
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNKNOWN }, // 0x54
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNKNOWN }, // 0x55
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNKNOWN }, // 0x56
|
||||
{ DXGI_SCANCODE_F11, DXGI_SCANCODE_UNKNOWN }, // 0x57
|
||||
{ DXGI_SCANCODE_F12, DXGI_SCANCODE_UNKNOWN }, // 0x58
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNKNOWN }, // 0x59
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNKNOWN }, // 0x5A
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LGUI }, // 0x5B
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_RGUI }, // 0x5C
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_APPLICATION }, // 0x5D
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F13 }, // 0x5E
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F14 }, // 0x5F
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F15 }, // 0x60
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F16 }, // 0x61
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F17 }, // 0x62
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F18 }, // 0x63
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F19 }, // 0x64
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F20 }, // 0x65
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F21 }, // 0x66
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F22 }, // 0x67
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F23 }, // 0x68
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_F24 }, // 0x69
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_EXECUTE }, // 0x6A
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_HELP }, // 0x6B
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_MENU }, // 0x6C
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_SELECT }, // 0x6D
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_STOP }, // 0x6E
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AGAIN }, // 0x6F
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_UNDO }, // 0x70
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CUT }, // 0x71
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_COPY }, // 0x72
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_PASTE }, // 0x73
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_FIND }, // 0x74
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_MUTE }, // 0x75
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_VOLUMEUP }, // 0x76
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_VOLUMEDOWN }, // 0x77
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_COMMA }, // 0x78
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_EQUALSAS400 }, // 0x79
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL1 }, // 0x7A
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL2 }, // 0x7B
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL3 }, // 0x7C
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL4 }, // 0x7D
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL5 }, // 0x7E
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL6 }, // 0x7F
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL7 }, // 0x80
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL8 }, // 0x81
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_INTERNATIONAL9 }, // 0x82
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG1 }, // 0x83
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG2 }, // 0x84
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG3 }, // 0x85
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG4 }, // 0x86
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG5 }, // 0x87
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG6 }, // 0x88
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG7 }, // 0x89
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG8 }, // 0x8A
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LANG9 }, // 0x8B
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_ALTERASE }, // 0x8C
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_SYSREQ }, // 0x8D
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CANCEL }, // 0x8E
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CLEAR }, // 0x8F
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_PRIOR }, // 0x90
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_RETURN2 }, // 0x91
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_SEPARATOR }, // 0x92
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_OUT }, // 0x93
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_OPER }, // 0x94
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CLEARAGAIN }, // 0x95
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CRSEL }, // 0x96
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_EXSEL }, // 0x97
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_00 }, // 0x98
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_000 }, // 0x99
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_THOUSANDSSEPARATOR }, // 0x9A
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_DECIMALSEPARATOR }, // 0x9B
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CURRENCYUNIT }, // 0x9C
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CURRENCYSUBUNIT }, // 0x9D
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_LEFTPAREN }, // 0x9E
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_RIGHTPAREN }, // 0x9F
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_LEFTBRACE }, // 0xA0
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_RIGHTBRACE }, // 0xA1
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_TAB }, // 0xA2
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_BACKSPACE }, // 0xA3
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_A }, // 0xA4
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_B }, // 0xA5
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_C }, // 0xA6
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_D }, // 0xA7
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_E }, // 0xA8
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_F }, // 0xA9
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_XOR }, // 0xAA
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_POWER }, // 0xAB
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_PERCENT }, // 0xAC
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_LESS }, // 0xAD
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_GREATER }, // 0xAE
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_AMPERSAND }, // 0xAF
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_DBLAMPERSAND }, // 0xB0
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_VERTICALBAR }, // 0xB1
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_DBLVERTICALBAR }, // 0xB2
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_COLON }, // 0xB3
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_HASH }, // 0xB4
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_SPACE }, // 0xB5
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_AT }, // 0xB6
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_EXCLAM }, // 0xB7
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMSTORE }, // 0xB8
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMRECALL }, // 0xB9
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMCLEAR }, // 0xBA
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMADD }, // 0xBB
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMSUBTRACT }, // 0xBC
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMMULTIPLY }, // 0xBD
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_MEMDIVIDE }, // 0xBE
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_PLUSMINUS }, // 0xBF
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_CLEAR }, // 0xC0
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_CLEARENTRY }, // 0xC1
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_BINARY }, // 0xC2
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_OCTAL }, // 0xC3
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_DECIMAL }, // 0xC4
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KP_HEXADECIMAL }, // 0xC5
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LCTRL }, // 0xC6
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LSHIFT }, // 0xC7
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LALT }, // 0xC8
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_LGUI }, // 0xC9
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_RCTRL }, // 0xCA
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_RSHIFT }, // 0xCB
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_RALT }, // 0xCC
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_RGUI }, // 0xCD
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_MODE }, // 0xCE
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIONEXT }, // 0xCF
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIOPREV }, // 0xD0
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIOSTOP }, // 0xD1
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIOPLAY }, // 0xD2
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIOMUTE }, // 0xD3
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_MEDIASELECT }, // 0xD4
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_WWW }, // 0xD5
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_MAIL }, // 0xD6
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CALCULATOR }, // 0xD7
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_COMPUTER }, // 0xD8
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_SEARCH }, // 0xD9
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_HOME }, // 0xDA
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_BACK }, // 0xDB
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_FORWARD }, // 0xDC
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_STOP }, // 0xDD
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_REFRESH }, // 0xDE
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AC_BOOKMARKS }, // 0xDF
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_BRIGHTNESSDOWN }, // 0xE0
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_BRIGHTNESSUP }, // 0xE1
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_DISPLAYSWITCH }, // 0xE2
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KBDILLUMTOGGLE }, // 0xE3
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KBDILLUMDOWN }, // 0xE4
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_KBDILLUMUP }, // 0xE5
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_EJECT }, // 0xE6
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_SLEEP }, // 0xE7
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_APP1 }, // 0xE8
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_APP2 }, // 0xE9
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIOREWIND }, // 0xEA
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_AUDIOFASTFORWARD }, // 0xEB
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_SOFTLEFT }, // 0xEC
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_SOFTRIGHT }, // 0xED
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_CALL }, // 0xEE
|
||||
{ DXGI_SCANCODE_UNKNOWN, DXGI_SCANCODE_ENDCALL }, // 0xEF
|
||||
};
|
||||
|
||||
static inline DXGI_Scancode dxgi_key_to_scancode(LPARAM l_param) {
|
||||
uint32_t sc = (l_param >> 16) & 0xFF;
|
||||
bool ext = (l_param >> 24) & 1;
|
||||
|
||||
if (sc <= 0xEE) return dxgi_scancodes[sc][ext];
|
||||
|
||||
return DXGI_SCANCODE_UNKNOWN;
|
||||
}
|
||||
|
||||
static void gfx_dxgi_on_resize(void) {
|
||||
if (dxgi.swap_chain.Get() != nullptr) {
|
||||
gfx_get_current_rendering_api()->on_resize();
|
||||
|
|
@ -247,11 +502,21 @@ static void gfx_dxgi_on_resize(void) {
|
|||
|
||||
static void gfx_dxgi_on_key_down(WPARAM w_param, LPARAM l_param) {
|
||||
int key = ((l_param >> 16) & 0x1ff);
|
||||
if (dxgi.on_key_down != nullptr) { dxgi.on_key_down(key); }
|
||||
int scancode = dxgi_key_to_scancode(l_param);
|
||||
if (dxgi.on_key_down != nullptr) {
|
||||
dxgi.on_key_down(key);
|
||||
kb_keys_curr_down[scancode] = true;
|
||||
}
|
||||
}
|
||||
|
||||
static void gfx_dxgi_on_key_up(WPARAM w_param, LPARAM l_param) {
|
||||
int key = ((l_param >> 16) & 0x1ff);
|
||||
if (dxgi.on_key_up != nullptr) { dxgi.on_key_up(key); }
|
||||
int scancode = dxgi_key_to_scancode(l_param);
|
||||
if (w_param == VK_PAUSE) scancode = DXGI_SCANCODE_PAUSE;
|
||||
if (dxgi.on_key_up != nullptr) {
|
||||
dxgi.on_key_up(key);
|
||||
kb_keys_curr_down[scancode] = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void gfx_dxgi_on_text_input(wchar_t code_unit) {
|
||||
|
|
@ -306,10 +571,23 @@ static LRESULT CALLBACK gfx_dxgi_wnd_proc(HWND h_wnd, UINT message, WPARAM w_par
|
|||
}
|
||||
break;
|
||||
}
|
||||
case WM_SYSKEYDOWN: {
|
||||
if (w_param == VK_RETURN && !(l_param & (1 << 30))) {
|
||||
toggle_borderless_window_full_screen(!dxgi.is_full_screen);
|
||||
return 0;
|
||||
}
|
||||
|
||||
gfx_dxgi_on_key_down(w_param, l_param);
|
||||
break;
|
||||
}
|
||||
case WM_KEYDOWN: {
|
||||
gfx_dxgi_on_key_down(w_param, l_param);
|
||||
return 0;
|
||||
}
|
||||
case WM_SYSKEYUP: {
|
||||
gfx_dxgi_on_key_up(w_param, l_param);
|
||||
break;
|
||||
}
|
||||
case WM_KEYUP: {
|
||||
gfx_dxgi_on_key_up(w_param, l_param);
|
||||
return 0;
|
||||
|
|
@ -323,13 +601,6 @@ static LRESULT CALLBACK gfx_dxgi_wnd_proc(HWND h_wnd, UINT message, WPARAM w_par
|
|||
gfx_dxgi_on_scroll(w_param);
|
||||
return 0;
|
||||
}
|
||||
case WM_SYSKEYDOWN: {
|
||||
if ((w_param == VK_RETURN) && ((l_param & 1 << 30) == 0)) {
|
||||
toggle_borderless_window_full_screen(!dxgi.is_full_screen);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_LBUTTONDOWN: {
|
||||
if (!gRomIsValid) {
|
||||
OPENFILENAMEW ofn;
|
||||
|
|
|
|||
|
|
@ -13,4 +13,256 @@ void ThrowIfFailed(HRESULT res, HWND h_wnd, const char *message);
|
|||
|
||||
extern struct GfxWindowManagerAPI gfx_dxgi;
|
||||
|
||||
// SDL_Scancode enum from SDL2
|
||||
typedef enum DXGI_Scancode {
|
||||
DXGI_SCANCODE_UNKNOWN = 0,
|
||||
DXGI_SCANCODE_A = 4,
|
||||
DXGI_SCANCODE_B = 5,
|
||||
DXGI_SCANCODE_C = 6,
|
||||
DXGI_SCANCODE_D = 7,
|
||||
DXGI_SCANCODE_E = 8,
|
||||
DXGI_SCANCODE_F = 9,
|
||||
DXGI_SCANCODE_G = 10,
|
||||
DXGI_SCANCODE_H = 11,
|
||||
DXGI_SCANCODE_I = 12,
|
||||
DXGI_SCANCODE_J = 13,
|
||||
DXGI_SCANCODE_K = 14,
|
||||
DXGI_SCANCODE_L = 15,
|
||||
DXGI_SCANCODE_M = 16,
|
||||
DXGI_SCANCODE_N = 17,
|
||||
DXGI_SCANCODE_O = 18,
|
||||
DXGI_SCANCODE_P = 19,
|
||||
DXGI_SCANCODE_Q = 20,
|
||||
DXGI_SCANCODE_R = 21,
|
||||
DXGI_SCANCODE_S = 22,
|
||||
DXGI_SCANCODE_T = 23,
|
||||
DXGI_SCANCODE_U = 24,
|
||||
DXGI_SCANCODE_V = 25,
|
||||
DXGI_SCANCODE_W = 26,
|
||||
DXGI_SCANCODE_X = 27,
|
||||
DXGI_SCANCODE_Y = 28,
|
||||
DXGI_SCANCODE_Z = 29,
|
||||
DXGI_SCANCODE_1 = 30,
|
||||
DXGI_SCANCODE_2 = 31,
|
||||
DXGI_SCANCODE_3 = 32,
|
||||
DXGI_SCANCODE_4 = 33,
|
||||
DXGI_SCANCODE_5 = 34,
|
||||
DXGI_SCANCODE_6 = 35,
|
||||
DXGI_SCANCODE_7 = 36,
|
||||
DXGI_SCANCODE_8 = 37,
|
||||
DXGI_SCANCODE_9 = 38,
|
||||
DXGI_SCANCODE_0 = 39,
|
||||
DXGI_SCANCODE_RETURN = 40,
|
||||
DXGI_SCANCODE_ESCAPE = 41,
|
||||
DXGI_SCANCODE_BACKSPACE = 42,
|
||||
DXGI_SCANCODE_TAB = 43,
|
||||
DXGI_SCANCODE_SPACE = 44,
|
||||
DXGI_SCANCODE_MINUS = 45,
|
||||
DXGI_SCANCODE_EQUALS = 46,
|
||||
DXGI_SCANCODE_LEFTBRACKET = 47,
|
||||
DXGI_SCANCODE_RIGHTBRACKET = 48,
|
||||
DXGI_SCANCODE_BACKSLASH = 49,
|
||||
DXGI_SCANCODE_NONUSHASH = 50,
|
||||
DXGI_SCANCODE_SEMICOLON = 51,
|
||||
DXGI_SCANCODE_APOSTROPHE = 52,
|
||||
DXGI_SCANCODE_GRAVE = 53,
|
||||
DXGI_SCANCODE_COMMA = 54,
|
||||
DXGI_SCANCODE_PERIOD = 55,
|
||||
DXGI_SCANCODE_SLASH = 56,
|
||||
DXGI_SCANCODE_CAPSLOCK = 57,
|
||||
DXGI_SCANCODE_F1 = 58,
|
||||
DXGI_SCANCODE_F2 = 59,
|
||||
DXGI_SCANCODE_F3 = 60,
|
||||
DXGI_SCANCODE_F4 = 61,
|
||||
DXGI_SCANCODE_F5 = 62,
|
||||
DXGI_SCANCODE_F6 = 63,
|
||||
DXGI_SCANCODE_F7 = 64,
|
||||
DXGI_SCANCODE_F8 = 65,
|
||||
DXGI_SCANCODE_F9 = 66,
|
||||
DXGI_SCANCODE_F10 = 67,
|
||||
DXGI_SCANCODE_F11 = 68,
|
||||
DXGI_SCANCODE_F12 = 69,
|
||||
DXGI_SCANCODE_PRINTSCREEN = 70,
|
||||
DXGI_SCANCODE_SCROLLLOCK = 71,
|
||||
DXGI_SCANCODE_PAUSE = 72,
|
||||
DXGI_SCANCODE_INSERT = 73,
|
||||
DXGI_SCANCODE_HOME = 74,
|
||||
DXGI_SCANCODE_PAGEUP = 75,
|
||||
DXGI_SCANCODE_DELETE = 76,
|
||||
DXGI_SCANCODE_END = 77,
|
||||
DXGI_SCANCODE_PAGEDOWN = 78,
|
||||
DXGI_SCANCODE_RIGHT = 79,
|
||||
DXGI_SCANCODE_LEFT = 80,
|
||||
DXGI_SCANCODE_DOWN = 81,
|
||||
DXGI_SCANCODE_UP = 82,
|
||||
DXGI_SCANCODE_NUMLOCKCLEAR = 83,
|
||||
DXGI_SCANCODE_KP_DIVIDE = 84,
|
||||
DXGI_SCANCODE_KP_MULTIPLY = 85,
|
||||
DXGI_SCANCODE_KP_MINUS = 86,
|
||||
DXGI_SCANCODE_KP_PLUS = 87,
|
||||
DXGI_SCANCODE_KP_ENTER = 88,
|
||||
DXGI_SCANCODE_KP_1 = 89,
|
||||
DXGI_SCANCODE_KP_2 = 90,
|
||||
DXGI_SCANCODE_KP_3 = 91,
|
||||
DXGI_SCANCODE_KP_4 = 92,
|
||||
DXGI_SCANCODE_KP_5 = 93,
|
||||
DXGI_SCANCODE_KP_6 = 94,
|
||||
DXGI_SCANCODE_KP_7 = 95,
|
||||
DXGI_SCANCODE_KP_8 = 96,
|
||||
DXGI_SCANCODE_KP_9 = 97,
|
||||
DXGI_SCANCODE_KP_0 = 98,
|
||||
DXGI_SCANCODE_KP_PERIOD = 99,
|
||||
DXGI_SCANCODE_NONUSBACKSLASH = 100,
|
||||
DXGI_SCANCODE_APPLICATION = 101,
|
||||
DXGI_SCANCODE_POWER = 102,
|
||||
DXGI_SCANCODE_KP_EQUALS = 103,
|
||||
DXGI_SCANCODE_F13 = 104,
|
||||
DXGI_SCANCODE_F14 = 105,
|
||||
DXGI_SCANCODE_F15 = 106,
|
||||
DXGI_SCANCODE_F16 = 107,
|
||||
DXGI_SCANCODE_F17 = 108,
|
||||
DXGI_SCANCODE_F18 = 109,
|
||||
DXGI_SCANCODE_F19 = 110,
|
||||
DXGI_SCANCODE_F20 = 111,
|
||||
DXGI_SCANCODE_F21 = 112,
|
||||
DXGI_SCANCODE_F22 = 113,
|
||||
DXGI_SCANCODE_F23 = 114,
|
||||
DXGI_SCANCODE_F24 = 115,
|
||||
DXGI_SCANCODE_EXECUTE = 116,
|
||||
DXGI_SCANCODE_HELP = 117,
|
||||
DXGI_SCANCODE_MENU = 118,
|
||||
DXGI_SCANCODE_SELECT = 119,
|
||||
DXGI_SCANCODE_STOP = 120,
|
||||
DXGI_SCANCODE_AGAIN = 121,
|
||||
DXGI_SCANCODE_UNDO = 122,
|
||||
DXGI_SCANCODE_CUT = 123,
|
||||
DXGI_SCANCODE_COPY = 124,
|
||||
DXGI_SCANCODE_PASTE = 125,
|
||||
DXGI_SCANCODE_FIND = 126,
|
||||
DXGI_SCANCODE_MUTE = 127,
|
||||
DXGI_SCANCODE_VOLUMEUP = 128,
|
||||
DXGI_SCANCODE_VOLUMEDOWN = 129,
|
||||
DXGI_SCANCODE_KP_COMMA = 133,
|
||||
DXGI_SCANCODE_KP_EQUALSAS400 = 134,
|
||||
DXGI_SCANCODE_INTERNATIONAL1 = 135,
|
||||
DXGI_SCANCODE_INTERNATIONAL2 = 136,
|
||||
DXGI_SCANCODE_INTERNATIONAL3 = 137,
|
||||
DXGI_SCANCODE_INTERNATIONAL4 = 138,
|
||||
DXGI_SCANCODE_INTERNATIONAL5 = 139,
|
||||
DXGI_SCANCODE_INTERNATIONAL6 = 140,
|
||||
DXGI_SCANCODE_INTERNATIONAL7 = 141,
|
||||
DXGI_SCANCODE_INTERNATIONAL8 = 142,
|
||||
DXGI_SCANCODE_INTERNATIONAL9 = 143,
|
||||
DXGI_SCANCODE_LANG1 = 144,
|
||||
DXGI_SCANCODE_LANG2 = 145,
|
||||
DXGI_SCANCODE_LANG3 = 146,
|
||||
DXGI_SCANCODE_LANG4 = 147,
|
||||
DXGI_SCANCODE_LANG5 = 148,
|
||||
DXGI_SCANCODE_LANG6 = 149,
|
||||
DXGI_SCANCODE_LANG7 = 150,
|
||||
DXGI_SCANCODE_LANG8 = 151,
|
||||
DXGI_SCANCODE_LANG9 = 152,
|
||||
DXGI_SCANCODE_ALTERASE = 153,
|
||||
DXGI_SCANCODE_SYSREQ = 154,
|
||||
DXGI_SCANCODE_CANCEL = 155,
|
||||
DXGI_SCANCODE_CLEAR = 156,
|
||||
DXGI_SCANCODE_PRIOR = 157,
|
||||
DXGI_SCANCODE_RETURN2 = 158,
|
||||
DXGI_SCANCODE_SEPARATOR = 159,
|
||||
DXGI_SCANCODE_OUT = 160,
|
||||
DXGI_SCANCODE_OPER = 161,
|
||||
DXGI_SCANCODE_CLEARAGAIN = 162,
|
||||
DXGI_SCANCODE_CRSEL = 163,
|
||||
DXGI_SCANCODE_EXSEL = 164,
|
||||
DXGI_SCANCODE_KP_00 = 176,
|
||||
DXGI_SCANCODE_KP_000 = 177,
|
||||
DXGI_SCANCODE_THOUSANDSSEPARATOR = 178,
|
||||
DXGI_SCANCODE_DECIMALSEPARATOR = 179,
|
||||
DXGI_SCANCODE_CURRENCYUNIT = 180,
|
||||
DXGI_SCANCODE_CURRENCYSUBUNIT = 181,
|
||||
DXGI_SCANCODE_KP_LEFTPAREN = 182,
|
||||
DXGI_SCANCODE_KP_RIGHTPAREN = 183,
|
||||
DXGI_SCANCODE_KP_LEFTBRACE = 184,
|
||||
DXGI_SCANCODE_KP_RIGHTBRACE = 185,
|
||||
DXGI_SCANCODE_KP_TAB = 186,
|
||||
DXGI_SCANCODE_KP_BACKSPACE = 187,
|
||||
DXGI_SCANCODE_KP_A = 188,
|
||||
DXGI_SCANCODE_KP_B = 189,
|
||||
DXGI_SCANCODE_KP_C = 190,
|
||||
DXGI_SCANCODE_KP_D = 191,
|
||||
DXGI_SCANCODE_KP_E = 192,
|
||||
DXGI_SCANCODE_KP_F = 193,
|
||||
DXGI_SCANCODE_KP_XOR = 194,
|
||||
DXGI_SCANCODE_KP_POWER = 195,
|
||||
DXGI_SCANCODE_KP_PERCENT = 196,
|
||||
DXGI_SCANCODE_KP_LESS = 197,
|
||||
DXGI_SCANCODE_KP_GREATER = 198,
|
||||
DXGI_SCANCODE_KP_AMPERSAND = 199,
|
||||
DXGI_SCANCODE_KP_DBLAMPERSAND = 200,
|
||||
DXGI_SCANCODE_KP_VERTICALBAR = 201,
|
||||
DXGI_SCANCODE_KP_DBLVERTICALBAR = 202,
|
||||
DXGI_SCANCODE_KP_COLON = 203,
|
||||
DXGI_SCANCODE_KP_HASH = 204,
|
||||
DXGI_SCANCODE_KP_SPACE = 205,
|
||||
DXGI_SCANCODE_KP_AT = 206,
|
||||
DXGI_SCANCODE_KP_EXCLAM = 207,
|
||||
DXGI_SCANCODE_KP_MEMSTORE = 208,
|
||||
DXGI_SCANCODE_KP_MEMRECALL = 209,
|
||||
DXGI_SCANCODE_KP_MEMCLEAR = 210,
|
||||
DXGI_SCANCODE_KP_MEMADD = 211,
|
||||
DXGI_SCANCODE_KP_MEMSUBTRACT = 212,
|
||||
DXGI_SCANCODE_KP_MEMMULTIPLY = 213,
|
||||
DXGI_SCANCODE_KP_MEMDIVIDE = 214,
|
||||
DXGI_SCANCODE_KP_PLUSMINUS = 215,
|
||||
DXGI_SCANCODE_KP_CLEAR = 216,
|
||||
DXGI_SCANCODE_KP_CLEARENTRY = 217,
|
||||
DXGI_SCANCODE_KP_BINARY = 218,
|
||||
DXGI_SCANCODE_KP_OCTAL = 219,
|
||||
DXGI_SCANCODE_KP_DECIMAL = 220,
|
||||
DXGI_SCANCODE_KP_HEXADECIMAL = 221,
|
||||
DXGI_SCANCODE_LCTRL = 224,
|
||||
DXGI_SCANCODE_LSHIFT = 225,
|
||||
DXGI_SCANCODE_LALT = 226,
|
||||
DXGI_SCANCODE_LGUI = 227,
|
||||
DXGI_SCANCODE_RCTRL = 228,
|
||||
DXGI_SCANCODE_RSHIFT = 229,
|
||||
DXGI_SCANCODE_RALT = 230,
|
||||
DXGI_SCANCODE_RGUI = 231,
|
||||
DXGI_SCANCODE_MODE = 257,
|
||||
DXGI_SCANCODE_AUDIONEXT = 258,
|
||||
DXGI_SCANCODE_AUDIOPREV = 259,
|
||||
DXGI_SCANCODE_AUDIOSTOP = 260,
|
||||
DXGI_SCANCODE_AUDIOPLAY = 261,
|
||||
DXGI_SCANCODE_AUDIOMUTE = 262,
|
||||
DXGI_SCANCODE_MEDIASELECT = 263,
|
||||
DXGI_SCANCODE_WWW = 264,
|
||||
DXGI_SCANCODE_MAIL = 265,
|
||||
DXGI_SCANCODE_CALCULATOR = 266,
|
||||
DXGI_SCANCODE_COMPUTER = 267,
|
||||
DXGI_SCANCODE_AC_SEARCH = 268,
|
||||
DXGI_SCANCODE_AC_HOME = 269,
|
||||
DXGI_SCANCODE_AC_BACK = 270,
|
||||
DXGI_SCANCODE_AC_FORWARD = 271,
|
||||
DXGI_SCANCODE_AC_STOP = 272,
|
||||
DXGI_SCANCODE_AC_REFRESH = 273,
|
||||
DXGI_SCANCODE_AC_BOOKMARKS = 274,
|
||||
DXGI_SCANCODE_BRIGHTNESSDOWN = 275,
|
||||
DXGI_SCANCODE_BRIGHTNESSUP = 276,
|
||||
DXGI_SCANCODE_DISPLAYSWITCH = 277,
|
||||
DXGI_SCANCODE_KBDILLUMTOGGLE = 278,
|
||||
DXGI_SCANCODE_KBDILLUMDOWN = 279,
|
||||
DXGI_SCANCODE_KBDILLUMUP = 280,
|
||||
DXGI_SCANCODE_EJECT = 281,
|
||||
DXGI_SCANCODE_SLEEP = 282,
|
||||
DXGI_SCANCODE_APP1 = 283,
|
||||
DXGI_SCANCODE_APP2 = 284,
|
||||
DXGI_SCANCODE_AUDIOREWIND = 285,
|
||||
DXGI_SCANCODE_AUDIOFASTFORWARD = 286,
|
||||
DXGI_SCANCODE_SOFTLEFT = 287,
|
||||
DXGI_SCANCODE_SOFTRIGHT = 288,
|
||||
DXGI_SCANCODE_CALL = 289,
|
||||
DXGI_SCANCODE_ENDCALL = 290,
|
||||
DXGI_NUM_SCANCODES = 512
|
||||
} DXGI_Scancode;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -14,9 +14,7 @@
|
|||
#include "pc/lua/utils/smlua_anim_utils.h"
|
||||
#include "pc/lua/utils/smlua_collision_utils.h"
|
||||
#include "pc/lua/utils/smlua_obj_utils.h"
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
#include "pc/lua/utils/smlua_input_utils.h"
|
||||
#endif
|
||||
#include "pc/mods/mods.h"
|
||||
|
||||
extern struct LuaObjectTable sLuaObjectTable[LOT_MAX];
|
||||
|
|
@ -763,11 +761,11 @@ void smlua_cobject_init_globals(void) {
|
|||
EXPOSE_GLOBAL_ARRAY(LOT_CHARACTER, gCharacters, CT_MAX);
|
||||
|
||||
EXPOSE_GLOBAL_ARRAY(LOT_CONTROLLER, gControllers, MAX_PLAYERS);
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
|
||||
EXPOSE_GLOBAL_ARRAY(LOT_GAMEPAD, gGamepads, MAX_GAMEPADS);
|
||||
|
||||
EXPOSE_GLOBAL_ARRAY(LOT_KEY, gKeyboard, SDL_NUM_SCANCODES);
|
||||
#endif
|
||||
|
||||
EXPOSE_GLOBAL_ARRAY(LOT_MAT4, gMatStack, MATRIX_STACK_SIZE);
|
||||
|
||||
EXPOSE_GLOBAL_ARRAY(LOT_MAT4, gMatStackPrev, MATRIX_STACK_SIZE);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
|
||||
#include "smlua_input_utils.h"
|
||||
|
||||
#include "engine/math_util.h"
|
||||
|
|
@ -89,76 +87,17 @@ void controller_maps_load(const char* mapsPath, bool appendMaps) {
|
|||
char fullpath[SYS_MAX_PATH] = "";
|
||||
snprintf(fullpath, SYS_MAX_PATH, "%s/%s.db", dbpath, path);
|
||||
|
||||
// open file
|
||||
FILE* f = fopen(fullpath, "rb");
|
||||
if (!f) {
|
||||
// load map
|
||||
UNUSED int loadedMaps = SDL_GameControllerAddMappingsFromFile(fullpath);
|
||||
|
||||
#ifdef DEVELOPMENT
|
||||
printf("Failed to load controller map '%s.db'\n", path);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
|
||||
// get file size
|
||||
fseek(f, 0, SEEK_END);
|
||||
int64_t size = ftell(f);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
|
||||
if (size <= 0) {
|
||||
#ifdef DEVELOPMENT
|
||||
printf("Controller map empty or invalid: '%s.db'\n", path);
|
||||
#endif
|
||||
fclose(f);
|
||||
continue;
|
||||
}
|
||||
|
||||
void* data = malloc(size);
|
||||
if (!data) {
|
||||
fclose(f);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fread(data, 1, size, f) != (size_t)size) {
|
||||
free(data);
|
||||
fclose(f);
|
||||
continue;
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
|
||||
// SDL_RWFromConstMem uses int size
|
||||
if (size > INT_MAX) {
|
||||
#ifdef DEVELOPMENT
|
||||
printf("Controller map too large: '%s.db'\n", path);
|
||||
#endif
|
||||
free(data);
|
||||
continue;
|
||||
}
|
||||
|
||||
SDL_RWops* rw = SDL_RWFromConstMem(data, (int)size);
|
||||
if (!rw) {
|
||||
#ifdef DEVELOPMENT
|
||||
printf("SDL_RWFromConstMem failed for '%s.db'\n", path);
|
||||
#endif
|
||||
free(data);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Load into SDL
|
||||
int loadedMaps = SDL_GameControllerAddMappingsFromRW(rw, SDL_FALSE);
|
||||
|
||||
SDL_RWclose(rw);
|
||||
free(data);
|
||||
|
||||
if (loadedMaps >= 0) {
|
||||
#ifdef DEVELOPMENT
|
||||
printf("Controller Database: Loaded %d controller mapping(s) from '%s.db'\n", loadedMaps, path);
|
||||
} else {
|
||||
printf("Controller Database: Failed to load controller map from '%s.db'\n", path);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
closedir(d);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -7,8 +7,6 @@
|
|||
#define MAX_GAMEPADS 256
|
||||
#define MAX_TOUCHPAD_FINGERS 10
|
||||
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
|
@ -93,6 +91,4 @@ const char* get_clipboard_text(void);
|
|||
void set_clipboard_text(const char* text);
|
||||
void clear_gamepad_input_data(void);
|
||||
void controller_maps_load(const char* mapsPath, bool appendMaps);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -11,144 +11,39 @@
|
|||
#include "mods_utils.h"
|
||||
|
||||
static bool mod_import_lua(char* src) {
|
||||
char dst[SYS_MAX_PATH] = { 0 };
|
||||
if (!concat_path(dst, (char*)fs_get_write_path(MOD_DIRECTORY), path_basename(src))) {
|
||||
LOG_ERROR("Failed to concat path for lua mod import");
|
||||
return false;
|
||||
bool success = fs_sys_copy_file(src, MOD_DIRECTORY);
|
||||
|
||||
if (!success) {
|
||||
LOG_ERROR("Failed to import lua mod file");
|
||||
} else {
|
||||
LOG_INFO("Imported lua mod: '%s'", src);
|
||||
}
|
||||
|
||||
FILE* fin = fopen(src, "rb");
|
||||
if (fin == NULL) {
|
||||
LOG_ERROR("Failed to open src path for lua mod import");
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fout = fopen(dst, "wb");
|
||||
if (fout == NULL) {
|
||||
LOG_ERROR("Failed to open dst path for lua mod import");
|
||||
fclose(fin);
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t rbytes;
|
||||
size_t wbytes;
|
||||
unsigned char buff[8192];
|
||||
do {
|
||||
rbytes = fread(buff, 1, sizeof(buff), fin);
|
||||
if (rbytes > 0) {
|
||||
wbytes = fwrite(buff, 1, rbytes, fout);
|
||||
} else {
|
||||
wbytes = 0;
|
||||
}
|
||||
} while ((rbytes > 0) && (rbytes == wbytes));
|
||||
|
||||
fclose(fout);
|
||||
fclose(fin);
|
||||
|
||||
if (wbytes) {
|
||||
LOG_ERROR("Write error on lua mod import");
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INFO("Imported lua mod: '%s' -> '%s'", src, dst);
|
||||
|
||||
return true;
|
||||
return success;
|
||||
}
|
||||
|
||||
static bool mod_import_palette(char* src) {
|
||||
const char* palettesDirectory = fs_get_write_path(PALETTES_DIRECTORY);
|
||||
fs_sys_mkdir(palettesDirectory);
|
||||
bool success = fs_sys_copy_file(src, PALETTES_DIRECTORY);
|
||||
|
||||
char dst[SYS_MAX_PATH] = { 0 };
|
||||
if (!concat_path(dst, (char*)palettesDirectory, path_basename(src))) {
|
||||
LOG_ERROR("Failed to concat path for palette ini import");
|
||||
return false;
|
||||
if (!success) {
|
||||
LOG_ERROR("Failed to import palette preset file");
|
||||
} else {
|
||||
LOG_INFO("Imported palette preset: '%s'", src);
|
||||
}
|
||||
|
||||
FILE* fin = fopen(src, "rb");
|
||||
if (fin == NULL) {
|
||||
LOG_ERROR("Failed to open src path for palette ini import");
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fout = fopen(dst, "wb");
|
||||
if (fout == NULL) {
|
||||
LOG_ERROR("Failed to open dst path for palette ini import");
|
||||
fclose(fin);
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t rbytes;
|
||||
size_t wbytes;
|
||||
unsigned char buff[8192];
|
||||
do {
|
||||
rbytes = fread(buff, 1, sizeof(buff), fin);
|
||||
if (rbytes > 0) {
|
||||
wbytes = fwrite(buff, 1, rbytes, fout);
|
||||
} else {
|
||||
wbytes = 0;
|
||||
}
|
||||
} while ((rbytes > 0) && (rbytes == wbytes));
|
||||
|
||||
fclose(fout);
|
||||
fclose(fin);
|
||||
|
||||
if (wbytes) {
|
||||
LOG_ERROR("Write error on palette ini import");
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INFO("Imported palette ini: '%s' -> '%s'", src, dst);
|
||||
|
||||
return true;
|
||||
return success;
|
||||
}
|
||||
|
||||
static bool mod_import_database(char* src) {
|
||||
const char* databasesDirectory = fs_get_write_path(DATABASES_DIRECTORY);
|
||||
fs_sys_mkdir(databasesDirectory);
|
||||
bool success = fs_sys_copy_file(src, DATABASES_DIRECTORY);
|
||||
|
||||
char dst[SYS_MAX_PATH] = { 0 };
|
||||
if (!concat_path(dst, (char*)databasesDirectory, path_basename(src))) {
|
||||
LOG_ERROR("Failed to concat path for database db import");
|
||||
return false;
|
||||
if (!success) {
|
||||
LOG_ERROR("Failed to import controller database file");
|
||||
} else {
|
||||
LOG_INFO("Imported controller database: '%s'", src);
|
||||
}
|
||||
|
||||
FILE* fin = fopen(src, "rb");
|
||||
if (fin == NULL) {
|
||||
LOG_ERROR("Failed to open src path for database db import");
|
||||
return false;
|
||||
}
|
||||
|
||||
FILE* fout = fopen(dst, "wb");
|
||||
if (fout == NULL) {
|
||||
LOG_ERROR("Failed to open dst path for database db import");
|
||||
fclose(fin);
|
||||
return false;
|
||||
}
|
||||
|
||||
size_t rbytes;
|
||||
size_t wbytes;
|
||||
unsigned char buff[8192];
|
||||
do {
|
||||
rbytes = fread(buff, 1, sizeof(buff), fin);
|
||||
if (rbytes > 0) {
|
||||
wbytes = fwrite(buff, 1, rbytes, fout);
|
||||
} else {
|
||||
wbytes = 0;
|
||||
}
|
||||
} while ((rbytes > 0) && (rbytes == wbytes));
|
||||
|
||||
fclose(fout);
|
||||
fclose(fin);
|
||||
|
||||
if (wbytes) {
|
||||
LOG_ERROR("Write error on database db import");
|
||||
return false;
|
||||
}
|
||||
|
||||
LOG_INFO("Imported database db: '%s' -> '%s'", src, dst);
|
||||
|
||||
return true;
|
||||
return success;
|
||||
}
|
||||
|
||||
static bool mod_import_zip(char* path, bool* isLua, bool* isDynos) {
|
||||
|
|
|
|||
|
|
@ -768,9 +768,7 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup, bool reconnect
|
|||
vec3f_set(gFirstPersonCamera.offset, 0, 0, 0);
|
||||
first_person_reset();
|
||||
|
||||
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
|
||||
clear_gamepad_input_data();
|
||||
#endif
|
||||
|
||||
le_shutdown();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue