diff options
author | 3gg <3gg@shellblade.net> | 2024-02-08 07:55:30 -0800 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2024-02-08 07:55:30 -0800 |
commit | 32897d35fa724e46e4195927d385da4e35ac7c76 (patch) | |
tree | 7d9c23aba558b5e703aa07aa55350d7d127ab148 | |
parent | 3cd5b0bcca694630fcb4b977ddf7be7cd1bce153 (diff) |
Add function to check for key press.
-rw-r--r-- | gfx-app/include/gfx/gfx_app.h | 32 | ||||
-rw-r--r-- | gfx-app/src/gfx_app.c | 63 |
2 files changed, 95 insertions, 0 deletions
diff --git a/gfx-app/include/gfx/gfx_app.h b/gfx-app/include/gfx/gfx_app.h index 3c544fa..86c502a 100644 --- a/gfx-app/include/gfx/gfx_app.h +++ b/gfx-app/include/gfx/gfx_app.h | |||
@@ -28,12 +28,44 @@ typedef struct GfxAppCallbacks { | |||
28 | GfxAppShutdown shutdown; | 28 | GfxAppShutdown shutdown; |
29 | } GfxAppCallbacks; | 29 | } GfxAppCallbacks; |
30 | 30 | ||
31 | typedef enum Key { | ||
32 | KeyA = 'a', | ||
33 | KeyB, | ||
34 | KeyC, | ||
35 | KeyD, | ||
36 | KeyE, | ||
37 | KeyF, | ||
38 | KeyG, | ||
39 | KeyH, | ||
40 | KeyI, | ||
41 | KeyJ, | ||
42 | KeyK, | ||
43 | KeyL, | ||
44 | KeyM, | ||
45 | KeyN, | ||
46 | KeyO, | ||
47 | KeyP, | ||
48 | KeyQ, | ||
49 | KeyR, | ||
50 | KeyS, | ||
51 | KeyT, | ||
52 | KeyU, | ||
53 | KeyV, | ||
54 | KeyW, | ||
55 | KeyX, | ||
56 | KeyY, | ||
57 | KeyZ, | ||
58 | } Key; | ||
59 | |||
31 | /// Create a window with an OpenGL context and run the main loop. | 60 | /// Create a window with an OpenGL context and run the main loop. |
32 | bool gfx_app_run(const GfxAppDesc*, const GfxAppCallbacks*); | 61 | bool gfx_app_run(const GfxAppDesc*, const GfxAppCallbacks*); |
33 | 62 | ||
34 | /// Get the mouse coordinates relative to the app's window. | 63 | /// Get the mouse coordinates relative to the app's window. |
35 | void gfx_app_get_mouse_position(double* x, double* y); | 64 | void gfx_app_get_mouse_position(double* x, double* y); |
36 | 65 | ||
66 | /// Return true if the given key is pressed. | ||
67 | bool gfx_is_key_pressed(Key); | ||
68 | |||
37 | /// Define a main function that initializes and puts the application in a loop. | 69 | /// Define a main function that initializes and puts the application in a loop. |
38 | /// See also: gfx_app_run(). | 70 | /// See also: gfx_app_run(). |
39 | #define GFX_APP_MAIN(WIDTH, HEIGHT, MAX_FPS) \ | 71 | #define GFX_APP_MAIN(WIDTH, HEIGHT, MAX_FPS) \ |
diff --git a/gfx-app/src/gfx_app.c b/gfx-app/src/gfx_app.c index a313ce8..e0211b1 100644 --- a/gfx-app/src/gfx_app.c +++ b/gfx-app/src/gfx_app.c | |||
@@ -138,3 +138,66 @@ cleanup: | |||
138 | void gfx_app_get_mouse_position(double* x, double* y) { | 138 | void gfx_app_get_mouse_position(double* x, double* y) { |
139 | glfwGetCursorPos(g_gfx_app.window, x, y); | 139 | glfwGetCursorPos(g_gfx_app.window, x, y); |
140 | } | 140 | } |
141 | |||
142 | static int to_glfw_key(Key key); | ||
143 | |||
144 | bool gfx_is_key_pressed(Key key) { | ||
145 | return glfwGetKey(g_gfx_app.window, to_glfw_key(key)) == GLFW_PRESS; | ||
146 | } | ||
147 | |||
148 | static int to_glfw_key(Key key) { | ||
149 | switch (key) { | ||
150 | case KeyA: | ||
151 | return GLFW_KEY_A; | ||
152 | case KeyB: | ||
153 | return GLFW_KEY_B; | ||
154 | case KeyC: | ||
155 | return GLFW_KEY_C; | ||
156 | case KeyD: | ||
157 | return GLFW_KEY_D; | ||
158 | case KeyE: | ||
159 | return GLFW_KEY_E; | ||
160 | case KeyF: | ||
161 | return GLFW_KEY_F; | ||
162 | case KeyG: | ||
163 | return GLFW_KEY_G; | ||
164 | case KeyH: | ||
165 | return GLFW_KEY_H; | ||
166 | case KeyI: | ||
167 | return GLFW_KEY_I; | ||
168 | case KeyJ: | ||
169 | return GLFW_KEY_J; | ||
170 | case KeyK: | ||
171 | return GLFW_KEY_K; | ||
172 | case KeyL: | ||
173 | return GLFW_KEY_L; | ||
174 | case KeyM: | ||
175 | return GLFW_KEY_M; | ||
176 | case KeyN: | ||
177 | return GLFW_KEY_N; | ||
178 | case KeyO: | ||
179 | return GLFW_KEY_O; | ||
180 | case KeyP: | ||
181 | return GLFW_KEY_P; | ||
182 | case KeyQ: | ||
183 | return GLFW_KEY_Q; | ||
184 | case KeyR: | ||
185 | return GLFW_KEY_R; | ||
186 | case KeyS: | ||
187 | return GLFW_KEY_S; | ||
188 | case KeyT: | ||
189 | return GLFW_KEY_T; | ||
190 | case KeyU: | ||
191 | return GLFW_KEY_U; | ||
192 | case KeyV: | ||
193 | return GLFW_KEY_V; | ||
194 | case KeyW: | ||
195 | return GLFW_KEY_W; | ||
196 | case KeyX: | ||
197 | return GLFW_KEY_X; | ||
198 | case KeyY: | ||
199 | return GLFW_KEY_Y; | ||
200 | case KeyZ: | ||
201 | return GLFW_KEY_Z; | ||
202 | } | ||
203 | } | ||