From 78553e775f618d20e328bc85c635fbab4bf43d60 Mon Sep 17 00:00:00 2001 From: sanine-a Date: Wed, 21 Oct 2020 21:53:43 -0500 Subject: add table recurtion to honey_lua_create_table and fix input setup --- demo/main.lua | 13 +- src/common.h | 9 +- src/honey.c | 6 +- src/honey_lua.c | 6 + src/input/input.c | 1005 ++++++++++++++++++++++++++++++++++++++++++++++++++++- src/input/input.h | 9 +- src/main.c | 13 +- 7 files changed, 1029 insertions(+), 32 deletions(-) diff --git a/demo/main.lua b/demo/main.lua index 8c0072f..ba548b9 100644 --- a/demo/main.lua +++ b/demo/main.lua @@ -1,14 +1,15 @@ -for key, value in pairs(honey.input.key) do +for key, value in pairs(honey.input) do print(key, value) end local total_time = 0 ---function honey.update(dt) --- total_time = total_time + dt --- print(dt) ---end --- +function honey.update(dt) + if honey.input.is_down(honey.input.key.a) then + print('a pressed!') + end +end + --function honey.draw() -- print('draw!') --end diff --git a/src/common.h b/src/common.h index 1a56b56..bf9a528 100644 --- a/src/common.h +++ b/src/common.h @@ -80,11 +80,12 @@ typedef enum { HONEY_INT, HONEY_NUM, HONEY_STRING, - HONEY_FUNC + HONEY_FUNC, + HONEY_TABLE, } honey_lua_type; /** @brief Wrap C objects for lua. */ -typedef struct { +typedef struct honey_lua_element { char* name; honey_lua_type type; union { @@ -92,6 +93,10 @@ typedef struct { double number; char* string; int (*function)(lua_State*); + struct { + int n_elements; + struct honey_lua_element* elements; + } table; } data; } honey_lua_element; diff --git a/src/honey.c b/src/honey.c index 71d07b1..79ff970 100644 --- a/src/honey.c +++ b/src/honey.c @@ -28,8 +28,8 @@ honey_window honey_setup(int screen_width, int screen_height, char* window_title return NULL; } - //honey_setup_keyboard(); - //glfwSetKeyCallback(window, default_honey_keyboard_callback); + honey_setup_keyboard(); + glfwSetKeyCallback(window, default_honey_keyboard_callback); // Enable blending glEnable(GL_BLEND); @@ -67,3 +67,5 @@ void honey_run(honey_window window) { } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + + diff --git a/src/honey_lua.c b/src/honey_lua.c index 076fb65..1cbd483 100644 --- a/src/honey_lua.c +++ b/src/honey_lua.c @@ -33,6 +33,12 @@ void honey_lua_push_element(lua_State* L, honey_lua_element element) lua_pushcfunction(L, element.data.function); break; + case HONEY_TABLE: + honey_lua_create_table(L, + element.data.table.elements, + element.data.table.n_elements); + break; + default: // this should never happen break; diff --git a/src/input/input.c b/src/input/input.c index 4d056d2..ffca84e 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -13,7 +13,9 @@ void honey_setup_keyboard() void honey_setup_input(lua_State* L) { - honey_lua_element elements[] = { + honey_setup_keyboard(); + + honey_lua_element keyElements[] = { { "unknown", HONEY_INT, { HONEY_KEY_UNKNOWN } }, { "space", HONEY_INT, { HONEY_KEY_SPACE } }, { "apostrophe", HONEY_INT, { HONEY_KEY_APOSTROPHE } }, @@ -137,17 +139,30 @@ void honey_setup_input(lua_State* L) { "menu", HONEY_INT, { HONEY_KEY_MENU } }, }; - honey_lua_create_table(L, elements, HONEY_N_KEYS); + honey_lua_element inputElements[] = { + { "key", HONEY_TABLE, { .table={ HONEY_N_KEYS, keyElements } } }, + { "is_down", HONEY_FUNC, { .function = honey_key_down } } + }; + + honey_lua_create_table(L, inputElements, 2); } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ -bool honey_key_down(int key) +int honey_key_down(lua_State* L) { - if (key < 0 || key >= HONEY_N_KEYS) { - return false; - } - return (bool) honey_key_states[key]; + if (!lua_isnumber(L, 1)) + return 0; + + int key = lua_tointeger(L, 1); + if (key < 0 || key >= HONEY_N_KEYS) + lua_pushboolean(L, false); + else + lua_pushboolean(L, honey_key_states[key]); + + printf("check key %d: %d\n", key, honey_key_states[key]); + + return 1; } /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @@ -186,12 +201,978 @@ void honey_key_unbind_all() void default_honey_keyboard_callback(honey_window window, int key, int scancode, int action, int mods) { - if (key >= 0 && key < HONEY_N_KEYS) { - if (action == HONEY_KEY_PRESS) { honey_key_states[key] = 1; } - if (action == HONEY_KEY_RELEASE) { honey_key_states[key] = 0; } - if (honey_key_callbacks[key] != NULL) { - honey_key_callbacks[key](honey_key_callbacks_data[key], action); + switch (key) { + case GLFW_KEY_UNKNOWN: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_UNKNOWN] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_UNKNOWN] = 0; } + if (honey_key_callbacks[HONEY_KEY_UNKNOWN] != NULL) { + honey_key_callbacks[HONEY_KEY_UNKNOWN](honey_key_callbacks_data[HONEY_KEY_UNKNOWN], + action); + } + break; + case GLFW_KEY_SPACE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_SPACE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_SPACE] = 0; } + if (honey_key_callbacks[HONEY_KEY_SPACE] != NULL) { + honey_key_callbacks[HONEY_KEY_SPACE] (honey_key_callbacks_data[HONEY_KEY_SPACE], + action); + } + break; + case GLFW_KEY_APOSTROPHE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_APOSTROPHE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_APOSTROPHE] = 0; } + if (honey_key_callbacks[HONEY_KEY_APOSTROPHE] != NULL) { + honey_key_callbacks[HONEY_KEY_APOSTROPHE] (honey_key_callbacks_data[HONEY_KEY_APOSTROPHE], + action); + } + break; + case GLFW_KEY_COMMA: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_COMMA] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_COMMA] = 0; } + if (honey_key_callbacks[HONEY_KEY_COMMA] != NULL) { + honey_key_callbacks[HONEY_KEY_COMMA] (honey_key_callbacks_data[HONEY_KEY_COMMA], + action); + } + break; + case GLFW_KEY_MINUS: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_MINUS] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_MINUS] = 0; } + if (honey_key_callbacks[HONEY_KEY_MINUS] != NULL) { + honey_key_callbacks[HONEY_KEY_MINUS] (honey_key_callbacks_data[HONEY_KEY_MINUS], + action); + } + break; + case GLFW_KEY_PERIOD: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_PERIOD] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_PERIOD] = 0; } + if (honey_key_callbacks[HONEY_KEY_PERIOD] != NULL) { + honey_key_callbacks[HONEY_KEY_PERIOD] (honey_key_callbacks_data[HONEY_KEY_PERIOD], + action); + } + break; + case GLFW_KEY_SLASH: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_SLASH] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_SLASH] = 0; } + if (honey_key_callbacks[HONEY_KEY_SLASH] != NULL) { + honey_key_callbacks[HONEY_KEY_SLASH] (honey_key_callbacks_data[HONEY_KEY_SLASH], + action); + } + break; + case GLFW_KEY_0: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_0] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_0] = 0; } + if (honey_key_callbacks[HONEY_KEY_0] != NULL) { + honey_key_callbacks[HONEY_KEY_0] (honey_key_callbacks_data[HONEY_KEY_0], + action); + } + break; + case GLFW_KEY_1: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_1] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_1] = 0; } + if (honey_key_callbacks[HONEY_KEY_1] != NULL) { + honey_key_callbacks[HONEY_KEY_1] (honey_key_callbacks_data[HONEY_KEY_1], + action); + } + break; + case GLFW_KEY_2: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_2] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_2] = 0; } + if (honey_key_callbacks[HONEY_KEY_2] != NULL) { + honey_key_callbacks[HONEY_KEY_2] (honey_key_callbacks_data[HONEY_KEY_2], + action); + } + break; + case GLFW_KEY_3: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_3] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_3] = 0; } + if (honey_key_callbacks[HONEY_KEY_3] != NULL) { + honey_key_callbacks[HONEY_KEY_3] (honey_key_callbacks_data[HONEY_KEY_3], + action); + } + break; + case GLFW_KEY_4: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_4] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_4] = 0; } + if (honey_key_callbacks[HONEY_KEY_4] != NULL) { + honey_key_callbacks[HONEY_KEY_4] (honey_key_callbacks_data[HONEY_KEY_4], + action); + } + break; + case GLFW_KEY_5: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_5] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_5] = 0; } + if (honey_key_callbacks[HONEY_KEY_5] != NULL) { + honey_key_callbacks[HONEY_KEY_5] (honey_key_callbacks_data[HONEY_KEY_5], + action); + } + break; + case GLFW_KEY_6: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_6] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_6] = 0; } + if (honey_key_callbacks[HONEY_KEY_6] != NULL) { + honey_key_callbacks[HONEY_KEY_6] (honey_key_callbacks_data[HONEY_KEY_6], + action); + } + break; + case GLFW_KEY_7: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_7] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_7] = 0; } + if (honey_key_callbacks[HONEY_KEY_7] != NULL) { + honey_key_callbacks[HONEY_KEY_7] (honey_key_callbacks_data[HONEY_KEY_7], + action); + } + break; + case GLFW_KEY_8: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_8] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_8] = 0; } + if (honey_key_callbacks[HONEY_KEY_8] != NULL) { + honey_key_callbacks[HONEY_KEY_8] (honey_key_callbacks_data[HONEY_KEY_8], + action); + } + break; + case GLFW_KEY_9: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_9] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_9] = 0; } + if (honey_key_callbacks[HONEY_KEY_9] != NULL) { + honey_key_callbacks[HONEY_KEY_9] (honey_key_callbacks_data[HONEY_KEY_9], + action); + } + break; + case GLFW_KEY_SEMICOLON: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_SEMICOLON] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_SEMICOLON] = 0; } + if (honey_key_callbacks[HONEY_KEY_SEMICOLON] != NULL) { + honey_key_callbacks[HONEY_KEY_SEMICOLON] (honey_key_callbacks_data[HONEY_KEY_SEMICOLON], + action); + } + break; + case GLFW_KEY_EQUAL: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_EQUAL] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_EQUAL] = 0; } + if (honey_key_callbacks[HONEY_KEY_EQUAL] != NULL) { + honey_key_callbacks[HONEY_KEY_EQUAL] (honey_key_callbacks_data[HONEY_KEY_EQUAL], + action); + } + break; + case GLFW_KEY_A: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_A] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_A] = 0; } + if (honey_key_callbacks[HONEY_KEY_A] != NULL) { + honey_key_callbacks[HONEY_KEY_A] (honey_key_callbacks_data[HONEY_KEY_A], + action); + } + break; + case GLFW_KEY_B: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_B] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_B] = 0; } + if (honey_key_callbacks[HONEY_KEY_B] != NULL) { + honey_key_callbacks[HONEY_KEY_B] (honey_key_callbacks_data[HONEY_KEY_B], + action); + } + break; + case GLFW_KEY_C: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_C] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_C] = 0; } + if (honey_key_callbacks[HONEY_KEY_C] != NULL) { + honey_key_callbacks[HONEY_KEY_C] (honey_key_callbacks_data[HONEY_KEY_C], + action); + } + break; + case GLFW_KEY_D: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_D] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_D] = 0; } + if (honey_key_callbacks[HONEY_KEY_D] != NULL) { + honey_key_callbacks[HONEY_KEY_D] (honey_key_callbacks_data[HONEY_KEY_D], + action); + } + break; + case GLFW_KEY_E: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_E] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_E] = 0; } + if (honey_key_callbacks[HONEY_KEY_E] != NULL) { + honey_key_callbacks[HONEY_KEY_E] (honey_key_callbacks_data[HONEY_KEY_E], + action); + } + break; + case GLFW_KEY_F: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F] = 0; } + if (honey_key_callbacks[HONEY_KEY_F] != NULL) { + honey_key_callbacks[HONEY_KEY_F] (honey_key_callbacks_data[HONEY_KEY_F], + action); + } + break; + case GLFW_KEY_G: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_G] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_G] = 0; } + if (honey_key_callbacks[HONEY_KEY_G] != NULL) { + honey_key_callbacks[HONEY_KEY_G] (honey_key_callbacks_data[HONEY_KEY_G], + action); + } + break; + case GLFW_KEY_H: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_H] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_H] = 0; } + if (honey_key_callbacks[HONEY_KEY_H] != NULL) { + honey_key_callbacks[HONEY_KEY_H] (honey_key_callbacks_data[HONEY_KEY_H], + action); + } + break; + case GLFW_KEY_I: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_I] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_I] = 0; } + if (honey_key_callbacks[HONEY_KEY_I] != NULL) { + honey_key_callbacks[HONEY_KEY_I] (honey_key_callbacks_data[HONEY_KEY_I], + action); + } + break; + case GLFW_KEY_J: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_J] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_J] = 0; } + if (honey_key_callbacks[HONEY_KEY_J] != NULL) { + honey_key_callbacks[HONEY_KEY_J] (honey_key_callbacks_data[HONEY_KEY_J], + action); + } + break; + case GLFW_KEY_K: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_K] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_K] = 0; } + if (honey_key_callbacks[HONEY_KEY_K] != NULL) { + honey_key_callbacks[HONEY_KEY_K] (honey_key_callbacks_data[HONEY_KEY_K], + action); + } + break; + case GLFW_KEY_L: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_L] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_L] = 0; } + if (honey_key_callbacks[HONEY_KEY_L] != NULL) { + honey_key_callbacks[HONEY_KEY_L] (honey_key_callbacks_data[HONEY_KEY_L], + action); + } + break; + case GLFW_KEY_M: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_M] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_M] = 0; } + if (honey_key_callbacks[HONEY_KEY_M] != NULL) { + honey_key_callbacks[HONEY_KEY_M] (honey_key_callbacks_data[HONEY_KEY_M], + action); + } + break; + case GLFW_KEY_N: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_N] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_N] = 0; } + if (honey_key_callbacks[HONEY_KEY_N] != NULL) { + honey_key_callbacks[HONEY_KEY_N] (honey_key_callbacks_data[HONEY_KEY_N], + action); + } + break; + case GLFW_KEY_O: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_O] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_O] = 0; } + if (honey_key_callbacks[HONEY_KEY_O] != NULL) { + honey_key_callbacks[HONEY_KEY_O] (honey_key_callbacks_data[HONEY_KEY_O], + action); + } + break; + case GLFW_KEY_P: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_P] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_P] = 0; } + if (honey_key_callbacks[HONEY_KEY_P] != NULL) { + honey_key_callbacks[HONEY_KEY_P] (honey_key_callbacks_data[HONEY_KEY_P], + action); + } + break; + case GLFW_KEY_Q: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_Q] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_Q] = 0; } + if (honey_key_callbacks[HONEY_KEY_Q] != NULL) { + honey_key_callbacks[HONEY_KEY_Q] (honey_key_callbacks_data[HONEY_KEY_Q], + action); + } + break; + case GLFW_KEY_R: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_R] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_R] = 0; } + if (honey_key_callbacks[HONEY_KEY_R] != NULL) { + honey_key_callbacks[HONEY_KEY_R] (honey_key_callbacks_data[HONEY_KEY_R], + action); + } + break; + case GLFW_KEY_S: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_S] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_S] = 0; } + if (honey_key_callbacks[HONEY_KEY_S] != NULL) { + honey_key_callbacks[HONEY_KEY_S] (honey_key_callbacks_data[HONEY_KEY_S], + action); + } + break; + case GLFW_KEY_T: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_T] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_T] = 0; } + if (honey_key_callbacks[HONEY_KEY_T] != NULL) { + honey_key_callbacks[HONEY_KEY_T] (honey_key_callbacks_data[HONEY_KEY_T], + action); + } + break; + case GLFW_KEY_U: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_U] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_U] = 0; } + if (honey_key_callbacks[HONEY_KEY_U] != NULL) { + honey_key_callbacks[HONEY_KEY_U] (honey_key_callbacks_data[HONEY_KEY_U], + action); + } + break; + case GLFW_KEY_V: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_V] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_V] = 0; } + if (honey_key_callbacks[HONEY_KEY_V] != NULL) { + honey_key_callbacks[HONEY_KEY_V] (honey_key_callbacks_data[HONEY_KEY_V], + action); + } + break; + case GLFW_KEY_W: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_W] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_W] = 0; } + if (honey_key_callbacks[HONEY_KEY_W] != NULL) { + honey_key_callbacks[HONEY_KEY_W] (honey_key_callbacks_data[HONEY_KEY_W], + action); + } + break; + case GLFW_KEY_X: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_X] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_X] = 0; } + if (honey_key_callbacks[HONEY_KEY_X] != NULL) { + honey_key_callbacks[HONEY_KEY_X] (honey_key_callbacks_data[HONEY_KEY_X], + action); + } + break; + case GLFW_KEY_Y: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_Y] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_Y] = 0; } + if (honey_key_callbacks[HONEY_KEY_Y] != NULL) { + honey_key_callbacks[HONEY_KEY_Y] (honey_key_callbacks_data[HONEY_KEY_Y], + action); + } + break; + case GLFW_KEY_Z: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_Z] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_Z] = 0; } + if (honey_key_callbacks[HONEY_KEY_Z] != NULL) { + honey_key_callbacks[HONEY_KEY_Z] (honey_key_callbacks_data[HONEY_KEY_Z], + action); + } + break; + case GLFW_KEY_LEFT_BRACKET: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_LEFT_BRACKET] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_LEFT_BRACKET] = 0; } + if (honey_key_callbacks[HONEY_KEY_LEFT_BRACKET] != NULL) { + honey_key_callbacks[HONEY_KEY_LEFT_BRACKET] (honey_key_callbacks_data[HONEY_KEY_LEFT_BRACKET], + action); + } + break; + case GLFW_KEY_BACKSLASH: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_BACKSLASH] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_BACKSLASH] = 0; } + if (honey_key_callbacks[HONEY_KEY_BACKSLASH] != NULL) { + honey_key_callbacks[HONEY_KEY_BACKSLASH] (honey_key_callbacks_data[HONEY_KEY_BACKSLASH], + action); + } + break; + case GLFW_KEY_RIGHT_BRACKET: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_RIGHT_BRACKET] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_RIGHT_BRACKET] = 0; } + if (honey_key_callbacks[HONEY_KEY_RIGHT_BRACKET] != NULL) { + honey_key_callbacks[HONEY_KEY_RIGHT_BRACKET] (honey_key_callbacks_data[HONEY_KEY_RIGHT_BRACKET], + action); + } + break; + case GLFW_KEY_GRAVE_ACCENT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_GRAVE_ACCENT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_GRAVE_ACCENT] = 0; } + if (honey_key_callbacks[HONEY_KEY_GRAVE_ACCENT] != NULL) { + honey_key_callbacks[HONEY_KEY_GRAVE_ACCENT] (honey_key_callbacks_data[HONEY_KEY_GRAVE_ACCENT], + action); + } + break; + case GLFW_KEY_WORLD_1: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_WORLD_1] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_WORLD_1] = 0; } + if (honey_key_callbacks[HONEY_KEY_WORLD_1] != NULL) { + honey_key_callbacks[HONEY_KEY_WORLD_1] (honey_key_callbacks_data[HONEY_KEY_WORLD_1], + action); + } + break; + case GLFW_KEY_WORLD_2: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_WORLD_2] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_WORLD_2] = 0; } + if (honey_key_callbacks[HONEY_KEY_WORLD_2] != NULL) { + honey_key_callbacks[HONEY_KEY_WORLD_2] (honey_key_callbacks_data[HONEY_KEY_WORLD_2], + action); + } + break; + case GLFW_KEY_ESCAPE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_ESCAPE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_ESCAPE] = 0; } + if (honey_key_callbacks[HONEY_KEY_ESCAPE] != NULL) { + honey_key_callbacks[HONEY_KEY_ESCAPE] (honey_key_callbacks_data[HONEY_KEY_ESCAPE], + action); + } + break; + case GLFW_KEY_ENTER: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_ENTER] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_ENTER] = 0; } + if (honey_key_callbacks[HONEY_KEY_ENTER] != NULL) { + honey_key_callbacks[HONEY_KEY_ENTER] (honey_key_callbacks_data[HONEY_KEY_ENTER], + action); + } + break; + case GLFW_KEY_TAB: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_TAB] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_TAB] = 0; } + if (honey_key_callbacks[HONEY_KEY_TAB] != NULL) { + honey_key_callbacks[HONEY_KEY_TAB] (honey_key_callbacks_data[HONEY_KEY_TAB], + action); + } + break; + case GLFW_KEY_BACKSPACE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_BACKSPACE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_BACKSPACE] = 0; } + if (honey_key_callbacks[HONEY_KEY_BACKSPACE] != NULL) { + honey_key_callbacks[HONEY_KEY_BACKSPACE] (honey_key_callbacks_data[HONEY_KEY_BACKSPACE], + action); + } + break; + case GLFW_KEY_INSERT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_INSERT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_INSERT] = 0; } + if (honey_key_callbacks[HONEY_KEY_INSERT] != NULL) { + honey_key_callbacks[HONEY_KEY_INSERT] (honey_key_callbacks_data[HONEY_KEY_INSERT], + action); + } + break; + case GLFW_KEY_DELETE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_DELETE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_DELETE] = 0; } + if (honey_key_callbacks[HONEY_KEY_DELETE] != NULL) { + honey_key_callbacks[HONEY_KEY_DELETE] (honey_key_callbacks_data[HONEY_KEY_DELETE], + action); + } + break; + case GLFW_KEY_RIGHT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_RIGHT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_RIGHT] = 0; } + if (honey_key_callbacks[HONEY_KEY_RIGHT] != NULL) { + honey_key_callbacks[HONEY_KEY_RIGHT] (honey_key_callbacks_data[HONEY_KEY_RIGHT], + action); + } + break; + case GLFW_KEY_LEFT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_LEFT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_LEFT] = 0; } + if (honey_key_callbacks[HONEY_KEY_LEFT] != NULL) { + honey_key_callbacks[HONEY_KEY_LEFT] (honey_key_callbacks_data[HONEY_KEY_LEFT], + action); + } + break; + case GLFW_KEY_DOWN: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_DOWN] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_DOWN] = 0; } + if (honey_key_callbacks[HONEY_KEY_DOWN] != NULL) { + honey_key_callbacks[HONEY_KEY_DOWN] (honey_key_callbacks_data[HONEY_KEY_DOWN], + action); + } + break; + case GLFW_KEY_UP: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_UP] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_UP] = 0; } + if (honey_key_callbacks[HONEY_KEY_UP] != NULL) { + honey_key_callbacks[HONEY_KEY_UP] (honey_key_callbacks_data[HONEY_KEY_UP], + action); + } + break; + case GLFW_KEY_PAGE_UP: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_PAGE_UP] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_PAGE_UP] = 0; } + if (honey_key_callbacks[HONEY_KEY_PAGE_UP] != NULL) { + honey_key_callbacks[HONEY_KEY_PAGE_UP] (honey_key_callbacks_data[HONEY_KEY_PAGE_UP], + action); + } + break; + case GLFW_KEY_PAGE_DOWN: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_PAGE_DOWN] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_PAGE_DOWN] = 0; } + if (honey_key_callbacks[HONEY_KEY_PAGE_DOWN] != NULL) { + honey_key_callbacks[HONEY_KEY_PAGE_DOWN] (honey_key_callbacks_data[HONEY_KEY_PAGE_DOWN], + action); + } + break; + case GLFW_KEY_HOME: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_HOME] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_HOME] = 0; } + if (honey_key_callbacks[HONEY_KEY_HOME] != NULL) { + honey_key_callbacks[HONEY_KEY_HOME] (honey_key_callbacks_data[HONEY_KEY_HOME], + action); + } + break; + case GLFW_KEY_END: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_END] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_END] = 0; } + if (honey_key_callbacks[HONEY_KEY_END] != NULL) { + honey_key_callbacks[HONEY_KEY_END] (honey_key_callbacks_data[HONEY_KEY_END], + action); + } + break; + case GLFW_KEY_CAPS_LOCK: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_CAPS_LOCK] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_CAPS_LOCK] = 0; } + if (honey_key_callbacks[HONEY_KEY_CAPS_LOCK] != NULL) { + honey_key_callbacks[HONEY_KEY_CAPS_LOCK] (honey_key_callbacks_data[HONEY_KEY_CAPS_LOCK], + action); + } + break; + case GLFW_KEY_SCROLL_LOCK: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_SCROLL_LOCK] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_SCROLL_LOCK] = 0; } + if (honey_key_callbacks[HONEY_KEY_SCROLL_LOCK] != NULL) { + honey_key_callbacks[HONEY_KEY_SCROLL_LOCK] (honey_key_callbacks_data[HONEY_KEY_SCROLL_LOCK], + action); + } + break; + case GLFW_KEY_NUM_LOCK: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_NUM_LOCK] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_NUM_LOCK] = 0; } + if (honey_key_callbacks[HONEY_KEY_NUM_LOCK] != NULL) { + honey_key_callbacks[HONEY_KEY_NUM_LOCK] (honey_key_callbacks_data[HONEY_KEY_NUM_LOCK], + action); + } + break; + case GLFW_KEY_PRINT_SCREEN: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_PRINT_SCREEN] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_PRINT_SCREEN] = 0; } + if (honey_key_callbacks[HONEY_KEY_PRINT_SCREEN] != NULL) { + honey_key_callbacks[HONEY_KEY_PRINT_SCREEN] (honey_key_callbacks_data[HONEY_KEY_PRINT_SCREEN], + action); + } + break; + case GLFW_KEY_PAUSE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_PAUSE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_PAUSE] = 0; } + if (honey_key_callbacks[HONEY_KEY_PAUSE] != NULL) { + honey_key_callbacks[HONEY_KEY_PAUSE] (honey_key_callbacks_data[HONEY_KEY_PAUSE], + action); + } + break; + case GLFW_KEY_F1: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F1] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F1] = 0; } + if (honey_key_callbacks[HONEY_KEY_F1] != NULL) { + honey_key_callbacks[HONEY_KEY_F1] (honey_key_callbacks_data[HONEY_KEY_F1], + action); + } + break; + case GLFW_KEY_F2: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F2] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F2] = 0; } + if (honey_key_callbacks[HONEY_KEY_F2] != NULL) { + honey_key_callbacks[HONEY_KEY_F2] (honey_key_callbacks_data[HONEY_KEY_F2], + action); + } + break; + case GLFW_KEY_F3: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F3] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F3] = 0; } + if (honey_key_callbacks[HONEY_KEY_F3] != NULL) { + honey_key_callbacks[HONEY_KEY_F3] (honey_key_callbacks_data[HONEY_KEY_F3], + action); + } + break; + case GLFW_KEY_F4: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F4] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F4] = 0; } + if (honey_key_callbacks[HONEY_KEY_F4] != NULL) { + honey_key_callbacks[HONEY_KEY_F4] (honey_key_callbacks_data[HONEY_KEY_F4], + action); + } + break; + case GLFW_KEY_F5: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F5] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F5] = 0; } + if (honey_key_callbacks[HONEY_KEY_F5] != NULL) { + honey_key_callbacks[HONEY_KEY_F5] (honey_key_callbacks_data[HONEY_KEY_F5], + action); + } + break; + case GLFW_KEY_F6: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F6] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F6] = 0; } + if (honey_key_callbacks[HONEY_KEY_F6] != NULL) { + honey_key_callbacks[HONEY_KEY_F6] (honey_key_callbacks_data[HONEY_KEY_F6], + action); + } + break; + case GLFW_KEY_F7: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F7] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F7] = 0; } + if (honey_key_callbacks[HONEY_KEY_F7] != NULL) { + honey_key_callbacks[HONEY_KEY_F7] (honey_key_callbacks_data[HONEY_KEY_F7], + action); + } + break; + case GLFW_KEY_F8: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F8] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F8] = 0; } + if (honey_key_callbacks[HONEY_KEY_F8] != NULL) { + honey_key_callbacks[HONEY_KEY_F8] (honey_key_callbacks_data[HONEY_KEY_F8], + action); + } + break; + case GLFW_KEY_F9: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F9] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F9] = 0; } + if (honey_key_callbacks[HONEY_KEY_F9] != NULL) { + honey_key_callbacks[HONEY_KEY_F9] (honey_key_callbacks_data[HONEY_KEY_F9], + action); + } + break; + case GLFW_KEY_F10: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F10] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F10] = 0; } + if (honey_key_callbacks[HONEY_KEY_F10] != NULL) { + honey_key_callbacks[HONEY_KEY_F10] (honey_key_callbacks_data[HONEY_KEY_F10], + action); + } + break; + case GLFW_KEY_F11: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F11] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F11] = 0; } + if (honey_key_callbacks[HONEY_KEY_F11] != NULL) { + honey_key_callbacks[HONEY_KEY_F11] (honey_key_callbacks_data[HONEY_KEY_F11], + action); + } + break; + case GLFW_KEY_F12: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F12] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F12] = 0; } + if (honey_key_callbacks[HONEY_KEY_F12] != NULL) { + honey_key_callbacks[HONEY_KEY_F12] (honey_key_callbacks_data[HONEY_KEY_F12], + action); + } + break; + case GLFW_KEY_F13: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F13] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F13] = 0; } + if (honey_key_callbacks[HONEY_KEY_F13] != NULL) { + honey_key_callbacks[HONEY_KEY_F13] (honey_key_callbacks_data[HONEY_KEY_F13], + action); + } + break; + case GLFW_KEY_F14: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F14] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F14] = 0; } + if (honey_key_callbacks[HONEY_KEY_F14] != NULL) { + honey_key_callbacks[HONEY_KEY_F14] (honey_key_callbacks_data[HONEY_KEY_F14], + action); + } + break; + case GLFW_KEY_F15: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F15] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F15] = 0; } + if (honey_key_callbacks[HONEY_KEY_F15] != NULL) { + honey_key_callbacks[HONEY_KEY_F15] (honey_key_callbacks_data[HONEY_KEY_F15], + action); + } + break; + case GLFW_KEY_F16: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F16] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F16] = 0; } + if (honey_key_callbacks[HONEY_KEY_F16] != NULL) { + honey_key_callbacks[HONEY_KEY_F16] (honey_key_callbacks_data[HONEY_KEY_F16], + action); + } + break; + case GLFW_KEY_F17: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F17] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F17] = 0; } + if (honey_key_callbacks[HONEY_KEY_F17] != NULL) { + honey_key_callbacks[HONEY_KEY_F17] (honey_key_callbacks_data[HONEY_KEY_F17], + action); + } + break; + case GLFW_KEY_F18: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F18] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F18] = 0; } + if (honey_key_callbacks[HONEY_KEY_F18] != NULL) { + honey_key_callbacks[HONEY_KEY_F18] (honey_key_callbacks_data[HONEY_KEY_F18], + action); + } + break; + case GLFW_KEY_F19: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F19] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F19] = 0; } + if (honey_key_callbacks[HONEY_KEY_F19] != NULL) { + honey_key_callbacks[HONEY_KEY_F19] (honey_key_callbacks_data[HONEY_KEY_F19], + action); + } + break; + case GLFW_KEY_F20: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F20] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F20] = 0; } + if (honey_key_callbacks[HONEY_KEY_F20] != NULL) { + honey_key_callbacks[HONEY_KEY_F20] (honey_key_callbacks_data[HONEY_KEY_F20], + action); + } + break; + case GLFW_KEY_F21: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F21] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F21] = 0; } + if (honey_key_callbacks[HONEY_KEY_F21] != NULL) { + honey_key_callbacks[HONEY_KEY_F21] (honey_key_callbacks_data[HONEY_KEY_F21], + action); + } + break; + case GLFW_KEY_F22: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F22] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F22] = 0; } + if (honey_key_callbacks[HONEY_KEY_F22] != NULL) { + honey_key_callbacks[HONEY_KEY_F22] (honey_key_callbacks_data[HONEY_KEY_F22], + action); + } + break; + case GLFW_KEY_F23: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F23] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F23] = 0; } + if (honey_key_callbacks[HONEY_KEY_F23] != NULL) { + honey_key_callbacks[HONEY_KEY_F23] (honey_key_callbacks_data[HONEY_KEY_F23], + action); + } + break; + case GLFW_KEY_F24: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F24] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F24] = 0; } + if (honey_key_callbacks[HONEY_KEY_F24] != NULL) { + honey_key_callbacks[HONEY_KEY_F24] (honey_key_callbacks_data[HONEY_KEY_F24], + action); + } + break; + case GLFW_KEY_F25: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_F25] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_F25] = 0; } + if (honey_key_callbacks[HONEY_KEY_F25] != NULL) { + honey_key_callbacks[HONEY_KEY_F25] (honey_key_callbacks_data[HONEY_KEY_F25], + action); + } + break; + case GLFW_KEY_KP_0: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_0] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_0] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_0] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_0] (honey_key_callbacks_data[HONEY_KEY_KP_0], + action); + } + break; + case GLFW_KEY_KP_1: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_1] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_1] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_1] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_1] (honey_key_callbacks_data[HONEY_KEY_KP_1], + action); + } + break; + case GLFW_KEY_KP_2: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_2] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_2] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_2] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_2] (honey_key_callbacks_data[HONEY_KEY_KP_2], + action); + } + break; + case GLFW_KEY_KP_3: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_3] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_3] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_3] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_3] (honey_key_callbacks_data[HONEY_KEY_KP_3], + action); + } + break; + case GLFW_KEY_KP_4: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_4] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_4] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_4] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_4] (honey_key_callbacks_data[HONEY_KEY_KP_4], + action); + } + break; + case GLFW_KEY_KP_5: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_5] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_5] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_5] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_5] (honey_key_callbacks_data[HONEY_KEY_KP_5], + action); + } + break; + case GLFW_KEY_KP_6: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_6] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_6] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_6] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_6] (honey_key_callbacks_data[HONEY_KEY_KP_6], + action); + } + break; + case GLFW_KEY_KP_7: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_7] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_7] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_7] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_7] (honey_key_callbacks_data[HONEY_KEY_KP_7], + action); + } + break; + case GLFW_KEY_KP_8: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_8] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_8] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_8] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_8] (honey_key_callbacks_data[HONEY_KEY_KP_8], + action); + } + break; + case GLFW_KEY_KP_9: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_9] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_9] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_9] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_9] (honey_key_callbacks_data[HONEY_KEY_KP_9], + action); + } + break; + case GLFW_KEY_KP_DECIMAL: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_DECIMAL] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_DECIMAL] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_DECIMAL] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_DECIMAL] (honey_key_callbacks_data[HONEY_KEY_KP_DECIMAL], + action); + } + break; + case GLFW_KEY_KP_DIVIDE: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_DIVIDE] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_DIVIDE] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_DIVIDE] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_DIVIDE] (honey_key_callbacks_data[HONEY_KEY_KP_DIVIDE], + action); + } + break; + case GLFW_KEY_KP_MULTIPLY: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_MULTIPLY] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_MULTIPLY] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_MULTIPLY] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_MULTIPLY] (honey_key_callbacks_data[HONEY_KEY_KP_MULTIPLY], + action); + } + break; + case GLFW_KEY_KP_SUBTRACT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_SUBTRACT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_SUBTRACT] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_SUBTRACT] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_SUBTRACT] (honey_key_callbacks_data[HONEY_KEY_KP_SUBTRACT], + action); + } + break; + case GLFW_KEY_KP_ADD: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_ADD] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_ADD] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_ADD] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_ADD] (honey_key_callbacks_data[HONEY_KEY_KP_ADD], + action); + } + break; + case GLFW_KEY_KP_ENTER: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_ENTER] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_ENTER] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_ENTER] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_ENTER] (honey_key_callbacks_data[HONEY_KEY_KP_ENTER], + action); + } + break; + case GLFW_KEY_KP_EQUAL: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_KP_EQUAL] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_KP_EQUAL] = 0; } + if (honey_key_callbacks[HONEY_KEY_KP_EQUAL] != NULL) { + honey_key_callbacks[HONEY_KEY_KP_EQUAL] (honey_key_callbacks_data[HONEY_KEY_KP_EQUAL], + action); + } + break; + case GLFW_KEY_LEFT_SHIFT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_LEFT_SHIFT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_LEFT_SHIFT] = 0; } + if (honey_key_callbacks[HONEY_KEY_LEFT_SHIFT] != NULL) { + honey_key_callbacks[HONEY_KEY_LEFT_SHIFT] (honey_key_callbacks_data[HONEY_KEY_LEFT_SHIFT], + action); + } + break; + case GLFW_KEY_LEFT_CONTROL: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_LEFT_CONTROL] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_LEFT_CONTROL] = 0; } + if (honey_key_callbacks[HONEY_KEY_LEFT_CONTROL] != NULL) { + honey_key_callbacks[HONEY_KEY_LEFT_CONTROL] (honey_key_callbacks_data[HONEY_KEY_LEFT_CONTROL], + action); + } + break; + case GLFW_KEY_LEFT_ALT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_LEFT_ALT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_LEFT_ALT] = 0; } + if (honey_key_callbacks[HONEY_KEY_LEFT_ALT] != NULL) { + honey_key_callbacks[HONEY_KEY_LEFT_ALT] (honey_key_callbacks_data[HONEY_KEY_LEFT_ALT], + action); + } + break; + case GLFW_KEY_LEFT_SUPER: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_LEFT_SUPER] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_LEFT_SUPER] = 0; } + if (honey_key_callbacks[HONEY_KEY_LEFT_SUPER] != NULL) { + honey_key_callbacks[HONEY_KEY_LEFT_SUPER] (honey_key_callbacks_data[HONEY_KEY_LEFT_SUPER], + action); + } + break; + case GLFW_KEY_RIGHT_SHIFT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_RIGHT_SHIFT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_RIGHT_SHIFT] = 0; } + if (honey_key_callbacks[HONEY_KEY_RIGHT_SHIFT] != NULL) { + honey_key_callbacks[HONEY_KEY_RIGHT_SHIFT] (honey_key_callbacks_data[HONEY_KEY_RIGHT_SHIFT], + action); + } + break; + case GLFW_KEY_RIGHT_CONTROL: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_RIGHT_CONTROL] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_RIGHT_CONTROL] = 0; } + if (honey_key_callbacks[HONEY_KEY_RIGHT_CONTROL] != NULL) { + honey_key_callbacks[HONEY_KEY_RIGHT_CONTROL] (honey_key_callbacks_data[HONEY_KEY_RIGHT_CONTROL], + action); + } + break; + case GLFW_KEY_RIGHT_ALT: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_RIGHT_ALT] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_RIGHT_ALT] = 0; } + if (honey_key_callbacks[HONEY_KEY_RIGHT_ALT] != NULL) { + honey_key_callbacks[HONEY_KEY_RIGHT_ALT] (honey_key_callbacks_data[HONEY_KEY_RIGHT_ALT], + action); + } + break; + case GLFW_KEY_RIGHT_SUPER: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_RIGHT_SUPER] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_RIGHT_SUPER] = 0; } + if (honey_key_callbacks[HONEY_KEY_RIGHT_SUPER] != NULL) { + honey_key_callbacks[HONEY_KEY_RIGHT_SUPER] (honey_key_callbacks_data[HONEY_KEY_RIGHT_SUPER], + action); + } + break; + case GLFW_KEY_MENU: + if (action == HONEY_KEY_PRESS) { honey_key_states[HONEY_KEY_MENU] = 1; } + if (action == HONEY_KEY_RELEASE) { honey_key_states[HONEY_KEY_MENU] = 0; } + if (honey_key_callbacks[HONEY_KEY_MENU] != NULL) { + honey_key_callbacks[HONEY_KEY_MENU] (honey_key_callbacks_data[HONEY_KEY_MENU], + action); } + break; + default: + /* do nothing */ + break; } } diff --git a/src/input/input.h b/src/input/input.h index a8ae206..31be34a 100644 --- a/src/input/input.h +++ b/src/input/input.h @@ -157,11 +157,14 @@ void honey_setup_input(lua_State* L); /** @brief Check if a key is down. * - * @param[in] key The key to query. + * This function accepts a single integer as input and returns TRUE if the integer + * refers to a valid key and is pressed down, and false otherwise. + * + * @param[in] L The lua state. * - * @return TRUE if the key is presently held down; FALSE if it is not, or if the keycode was out of bounds. + * @return 1 on success and 0 on failure. */ -bool honey_key_down(int key); +int honey_key_down(lua_State* L); /** @brief Bind a callback to a key. * diff --git a/src/main.c b/src/main.c index e3e98b0..c6a46fd 100644 --- a/src/main.c +++ b/src/main.c @@ -80,6 +80,9 @@ GLFWwindow* setup_window(int width, int height, char* title) return NULL; } + honey_setup_keyboard(); + glfwSetKeyCallback(window, default_honey_keyboard_callback); + glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -98,23 +101,19 @@ int main(int argc, char** argv) if (!opt.run) return 0; - + + GLFWwindow* window = setup_window(480, 320, "honey-engine"); + lua_State* L = luaL_newstate(); luaL_openlibs(L); - lua_createtable(L, 0, 1); - lua_createtable(L, 0, 1); honey_setup_input(L); - lua_setfield(L, -2, "key"); - lua_setfield(L, -2, "input"); lua_setglobal(L, "honey"); - GLFWwindow* window = setup_window(480, 320, "honey-engine"); - size_t dirlen = strlen(opt.scriptdir) + 10; char* scriptfile = malloc(sizeof(char) * dirlen); if (scriptfile == NULL) { -- cgit v1.2.1