From c356e96932b5d1a23bf41914934cf83e8b535994 Mon Sep 17 00:00:00 2001 From: Schark Date: Wed, 6 Mar 2024 02:00:59 -0800 Subject: Working barebones heightmap renderer --- simple-raycaster/src/player.c | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 simple-raycaster/src/player.c (limited to 'simple-raycaster/src/player.c') diff --git a/simple-raycaster/src/player.c b/simple-raycaster/src/player.c new file mode 100644 index 0000000..f2d9883 --- /dev/null +++ b/simple-raycaster/src/player.c @@ -0,0 +1,44 @@ +#include +#include + +#include "player.h" + +void move_player(Player *player, GLFWwindow* window, double* mouse_x, double* mouse_y, double width, double height) { + if (glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) { + player->pos_x += player->dir_x * player->move_speed; + player->pos_y += player->dir_y * player->move_speed; + } + if (glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) { + player->pos_x -= player->dir_x * player->move_speed; + player->pos_y -= player->dir_y * player->move_speed; + } + if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) { + player->pos_x += player->dir_y * player->move_speed; + player->pos_y -= player->dir_x * player->move_speed; + } + if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) { + player->pos_x -= player->dir_y * player->move_speed; + player->pos_y += player->dir_x * player->move_speed; + } + + // mouse controls (including y-shearing angle calculations + // DO NOT TOUCH, THIS TOOK A WHOLE NIGHT TO FIGURE OUT + double mouse_dx, mouse_dy; + double old_mouse_x, old_mouse_y; + old_mouse_x = *mouse_x; + old_mouse_y = *mouse_y; + glfwGetCursorPos(window, mouse_x, mouse_y); + mouse_dx = *mouse_x - old_mouse_x; + mouse_dy = *mouse_y - old_mouse_y; + double rot_speed = mouse_dx * player->sensitivity; + double old_dir_x = player->dir_x; + player->dir_x = player->dir_x * cos(rot_speed) - player->dir_y * sin(rot_speed); + player->dir_y = old_dir_x * sin(rot_speed) + player->dir_y * cos(rot_speed); + double old_plane_x = player->plane_x; + player->plane_x = player->plane_x * cos(rot_speed) - player->plane_y * sin(rot_speed); + player->plane_y = old_plane_x * sin(rot_speed) + player->plane_y * cos(rot_speed); + player->look_angle += mouse_dy * player->sensitivity; + if (player->look_angle > M_PI/4) { player->look_angle = M_PI/4; } + if (player->look_angle < -M_PI/4) { player->look_angle = -M_PI/4; } + +} -- cgit v1.2.3-18-g5258