commit c0855c54283731633610d318693898b162beebd2
parent ceadbe46bfd6207eb6b6c73cd522257325352e71
Author: amin <dev@aminmesbah.com>
Date: Mon, 1 Jul 2019 01:58:26 +0000
Fix windows platform layer
FossilOrigin-Name: cb848410b73b0a6b3b1512087d229e0aa25c019f5dc1c7429b5d214c8d06e459
Diffstat:
1 file changed, 38 insertions(+), 60 deletions(-)
diff --git a/src/platform_windows.c b/src/platform_windows.c
@@ -11,6 +11,16 @@
#include "platform.h"
#include "platform_windows.h"
+// TODO: map this in a nicer way
+global_variable int platform_input_map[NUM_GAME_BUTTONS] = {
+ [BTN_LEFT] = GLFW_KEY_LEFT,
+ [BTN_RIGHT] = GLFW_KEY_RIGHT,
+ [BTN_UP] = GLFW_KEY_UP,
+ [BTN_DOWN] = GLFW_KEY_DOWN,
+ [BTN_JUMP] = GLFW_KEY_S,
+ [BTN_DEBUG_FLOAT] = GLFW_KEY_F11,
+};
+
int main(void)
{
glfwSetErrorCallback(error_callback);
@@ -26,7 +36,7 @@ int main(void)
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);
- GLFWwindow* window = glfwCreateWindow(PLATFORM_SCR_WIDTH, PLATFORM_SCR_HEIGHT, "A Game", NULL, NULL);
+ GLFWwindow *window = glfwCreateWindow(PLATFORM_SCR_WIDTH, PLATFORM_SCR_HEIGHT, "A Game", NULL, NULL);
if (!window)
{
fprintf(stderr, "GLFW window creation failed\n");
@@ -112,81 +122,49 @@ int main(void)
return 0;
}
-internal void error_callback(int error, const char* description)
+internal void error_callback(int error, const char *description)
{
fprintf(stderr, "Error: %s\n", description);
}
-internal void framebuffer_size_callback(GLFWwindow* window, int width, int height)
+internal void framebuffer_size_callback(GLFWwindow *window, int width, int height)
{
glViewport(0, 0, width, height);
}
-internal void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
+internal void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods)
{
- struct GameInput *game_input = (struct GameInput*)glfwGetWindowUserPointer(window);
+ struct GameInput *game_input = (struct GameInput *)glfwGetWindowUserPointer(window);
- enum InputKeyAction game_input_key_action = 0;
- switch (action)
+ enum GameButton game_button = NULL_GAME_BUTTON;
+ // TODO: Determine the button in a nicer way
+ for (enum GameButton b = 0; b < NUM_GAME_BUTTONS; b++)
{
- case GLFW_PRESS:
- game_input_key_action = KEY_PRESS;
- break;
- case GLFW_RELEASE:
- game_input_key_action = KEY_RELEASE;
- break;
- case GLFW_REPEAT:
- game_input_key_action = KEY_REPEAT;
- break;
- default:
- exit(1);
- break;
- }
-
- enum InputKeyAction* game_key = NULL;
- switch (key)
- {
- case GLFW_KEY_LEFT:
- game_key = &(game_input->key_left);
- break;
- case GLFW_KEY_RIGHT:
- game_key = &(game_input->key_right);
- break;
- case GLFW_KEY_UP:
- game_key = &(game_input->key_up);
- break;
- case GLFW_KEY_DOWN:
- game_key = &(game_input->key_down);
- break;
- case GLFW_KEY_S:
- game_key = &(game_input->key_jump);
- break;
- default:
- break;
+ if (platform_input_map[b] == key)
+ {
+ game_button = b;
+ }
}
-
- if (game_key)
+ if (game_button != NULL_GAME_BUTTON)
{
- *game_key = game_input_key_action;
+ switch (action)
+ {
+ case GLFW_PRESS:
+ game_input->button_states |= (1 << game_button);
+ break;
+ case GLFW_RELEASE:
+ game_input->button_states &= ~(1 << game_button);
+ break;
+ case GLFW_REPEAT:
+ // Do nothing
+ break;
+ default:
+ exit(1);
+ break;
+ }
}
}
-//internal time_t file_get_modified_time(char *file_path)
-//{
-// time_t mtime = 0;
-// struct stat file_status = {0};
-// if (stat(file_path, &file_status) == 0)
-// {
-// //printf("File: %s last modified: %s\n", file_path, ctime(&file_status.st_mtime));
-// mtime = file_status.st_mtime;
-// }
-// else
-// {
-// fprintf(stderr, "ERROR: Failed to stat file: %s\n", file_path);
-// }
-// return mtime;
-//}
-
internal PLATFORM_READ_ENTIRE_FILE(windows_read_entire_file)
{
FILE *handle = fopen(file_path, "rb");