From b6eeea5e9fd4ee42ef4d6a64ba001e833d358466 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 29 Jul 2025 19:50:23 +0200 Subject: [PATCH] feat(player): reimplemented angles --- src/player/angle.c | 34 +++++++++++++++++++++++++++++++++- src/player/angle.h | 5 +++-- src/player/move.c | 8 ++++++-- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/player/angle.c b/src/player/angle.c index a5d9837..eeacb76 100644 --- a/src/player/angle.c +++ b/src/player/angle.c @@ -6,11 +6,43 @@ /* By: tchampio #include +#include "../cub3d_data.h" +#include "../consts.h" +#include +#include "player.h" +void turn_left_angle(t_cub3d_data *data) +{ + t_player *p; + double prev_dir_x; + double prev_plane_x; + p = &data->player; + prev_dir_x = p->dir_x; + prev_plane_x = p->plane_x; + p->dir_x = p->dir_x * cos(ROTATION_SPEED) - p->dir_y * sin(ROTATION_SPEED); + p->dir_y = prev_dir_x * sin(ROTATION_SPEED) + p->dir_y * cos(ROTATION_SPEED); + p->plane_x = p->plane_x * cos(ROTATION_SPEED) - p->plane_y * sin(ROTATION_SPEED); + p->plane_y = prev_plane_x * sin(ROTATION_SPEED) + p->plane_y * cos(ROTATION_SPEED); +} + +void turn_right_angle(t_cub3d_data *data) +{ + t_player *p; + double prev_dir_x; + double prev_plane_x; + + p = &data->player; + prev_dir_x = p->dir_x; + prev_plane_x = p->plane_x; + p->dir_x = p->dir_x * cos(-ROTATION_SPEED) - p->dir_y * sin(-ROTATION_SPEED); + p->dir_y = prev_dir_x * sin(-ROTATION_SPEED) + p->dir_y * cos(-ROTATION_SPEED); + p->plane_x = p->plane_x * cos(-ROTATION_SPEED) - p->plane_y * sin(-ROTATION_SPEED); + p->plane_y = prev_plane_x * sin(-ROTATION_SPEED) + p->plane_y * cos(-ROTATION_SPEED); +} diff --git a/src/player/angle.h b/src/player/angle.h index a87c59b..bf4807a 100644 --- a/src/player/angle.h +++ b/src/player/angle.h @@ -6,7 +6,7 @@ /* By: tchampio // bad void move_player_forward(t_cub3d_data *data) { @@ -84,4 +84,8 @@ void move_player(t_cub3d_data *data) move_player_strafe_left(data); if (data->keypresses.is_d_pressed) move_player_strafe_right(data); + if (data->keypresses.is_left_pressed) + turn_left_angle(data); + if (data->keypresses.is_right_pressed) + turn_right_angle(data); }