From 49bb9312470a4dae0b57ade976f16aae1f23c598 Mon Sep 17 00:00:00 2001 From: Noah Metz Date: Sat, 9 Nov 2024 22:10:49 -0700 Subject: [PATCH] Added free cam --- client/src/main.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/client/src/main.c b/client/src/main.c index 90f6ab6..79308e6 100644 --- a/client/src/main.c +++ b/client/src/main.c @@ -30,6 +30,8 @@ typedef struct ClientContextStruct { vec3 position; + vec3 velocity; + vec2 rotation; int32_t key_spin[2]; vec2 cur_spin; @@ -41,6 +43,7 @@ typedef struct ClientContextStruct { float key_spin_speed; float cur_spin_speed; float zoom_speed; + float move_speed; } ClientContext; void* network_thread(void* data) { @@ -131,9 +134,12 @@ VkResult main_thread(ClientContext* context) { glfwPollEvents(); if((context->key_spin[0] != 0 || context->key_spin[1] != 0 || + context->velocity[0] != 0 || context->velocity[1] != 0 || context->velocity[2] != 0 || context->zoom != 0 || context->cur_spin[0] != 0 || context->cur_spin[1] != 0 || context->render->framebuffer_recreated == true) && frame > 0) { + + if(context->render->framebuffer_recreated == true) { context->render->framebuffer_recreated = false; VK_RESULT(update_hex_proj(context->render, context->hex)); @@ -155,6 +161,14 @@ VkResult main_thread(ClientContext* context) { context->rotation[1] = 0; } + context->position[0] += - context->velocity[2]*context->move_speed*cos(context->rotation[0]) + - context->velocity[0]*context->move_speed*sin(context->rotation[0]); + + context->position[2] += context->velocity[0]*context->move_speed*cos(context->rotation[0]) + - context->velocity[2]*context->move_speed*sin(context->rotation[0]); + + context->position[1] += context->velocity[1]*context->move_speed; + context->distance += context->zoom*delta_time*context->zoom_speed; if(context->distance < 1) { context->distance = 1; @@ -216,6 +230,51 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod context->key_spin[1] += 1; } break; + + case GLFW_KEY_UP: + if(action == GLFW_PRESS) { + context->velocity[2] += 1; + } else if(action == GLFW_RELEASE) { + context->velocity[2] -= 1; + } + break; + case GLFW_KEY_DOWN: + if(action == GLFW_PRESS) { + context->velocity[2] -= 1; + } else if(action == GLFW_RELEASE) { + context->velocity[2] += 1; + } + break; + + case GLFW_KEY_LEFT: + if(action == GLFW_PRESS) { + context->velocity[0] -= 1; + } else if(action == GLFW_RELEASE) { + context->velocity[0] += 1; + } + break; + case GLFW_KEY_RIGHT: + if(action == GLFW_PRESS) { + context->velocity[0] += 1; + } else if(action == GLFW_RELEASE) { + context->velocity[0] -= 1; + } + break; + + case GLFW_KEY_LEFT_SHIFT: + if(action == GLFW_PRESS) { + context->velocity[1] -= 1; + } else if(action == GLFW_RELEASE) { + context->velocity[1] += 1; + } + break; + case GLFW_KEY_SPACE: + if(action == GLFW_PRESS) { + context->velocity[1] += 1; + } else if(action == GLFW_RELEASE) { + context->velocity[1] -= 1; + } + break; } } @@ -313,6 +372,7 @@ int main() { .key_spin_speed = 1.0, .cur_spin_speed = 1.0, .zoom_speed = 1.0, + .move_speed = 0.1, }; if(context.window == NULL || context.render == NULL || context.ui == NULL || context.hex == NULL) { return VK_ERROR_OUT_OF_HOST_MEMORY;