summaryrefslogtreecommitdiff
path: root/src/player.c
diff options
context:
space:
mode:
authorSchark <jordan@schark.online>2023-05-12 02:14:15 -0700
committerSchark <jordan@schark.online>2023-05-12 02:14:15 -0700
commit743d7f3ef9709a89c6ba48ed83e26a0bdfbdd200 (patch)
treef1f959406c201e2a9c2e1515f0bc09200145e8fc /src/player.c
parent4b23f2fcc44fc636d8d4dbe94881cf937c54199b (diff)
downloadgamedev-743d7f3ef9709a89c6ba48ed83e26a0bdfbdd200.tar.gz
gamedev-743d7f3ef9709a89c6ba48ed83e26a0bdfbdd200.zip
y-shearing!
Diffstat (limited to 'src/player.c')
-rw-r--r--src/player.c47
1 files changed, 13 insertions, 34 deletions
diff --git a/src/player.c b/src/player.c
index c06dfa4..512069a 100644
--- a/src/player.c
+++ b/src/player.c
@@ -12,41 +12,17 @@ void move_player(Player *player, GLFWwindow* window, double* mouse_x, double* mo
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;
+ }
- // old implementation
- // if (glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS) {
- // // this changes where we're casting our rays
- // double old_dir_x = player->dir_x;
- // player->dir_x = player->dir_x * cos(-player->sensitivity) - player->dir_y * sin(-player->sensitivity);
- // player->dir_y = old_dir_x * sin(-player->sensitivity) + player->dir_y * cos(-player->sensitivity);
- // // this updates perspective
- // double old_plane_x = player->plane_x;
- // player->plane_x = player->plane_x * cos(-player->sensitivity) - player->plane_y * sin(-player->sensitivity);
- // player->plane_y = old_plane_x * sin(-player->sensitivity) + player->plane_y * cos(-player->sensitivity);
- // }
- // if (glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS) {
- // double old_dir_x = player->dir_x;
- // player->dir_x = player->dir_x * cos(player->sensitivity) - player->dir_y * sin(player->sensitivity);
- // player->dir_y = old_dir_x * sin(player->sensitivity) + player->dir_y * cos(player->sensitivity);
- // double old_plane_x = player->plane_x;
- // player->plane_x = player->plane_x * cos(player->sensitivity) - player->plane_y * sin(player->sensitivity);
- // player->plane_y = old_plane_x * sin(player->sensitivity) + player->plane_y * cos(player->sensitivity);
- // }
-
- // issues
- //double new_mouse_x = 0, new_mouse_y = 0;
- //glfwGetCursorPos(window, &new_mouse_x, &new_mouse_y);
- //new_mouse_x -= width / 2;
- //new_mouse_y -= height / 2;
- //double dx = new_mouse_x - *mouse_x;
- //double dy = new_mouse_y - *mouse_y;
- //*mouse_x = new_mouse_x;
- //*mouse_y = new_mouse_y;
- //player->dir += dx * player->sensitivity;
- //player->dir_x = cos(player->dir);
- //player->dir_y = sin(player->dir);
-
-
+ // 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;
@@ -61,5 +37,8 @@ void move_player(Player *player, GLFWwindow* window, double* mouse_x, double* mo
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; }
}