From 6f25b4e530f9be4c964505f6d27a06255906e643 Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Thu, 24 Jul 2025 14:37:18 +0200 Subject: [PATCH] feat: added angle support --- src/consts.h | 5 +++-- src/main.c | 6 +++--- src/player/player.h | 2 +- src/utils/hooks.c | 41 ++++++++++++++++++++++++++++++++++------- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/consts.h b/src/consts.h index 2ef886e..ebe0ca1 100644 --- a/src/consts.h +++ b/src/consts.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:54:36 by kcolin #+# #+# */ -/* Updated: 2025/07/17 14:57:09 by kcolin ### ########.fr */ +/* Updated: 2025/07/24 14:17:52 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,8 @@ # define HEIGHT 800 # define WIDTH 800 # define RESSOURCE_DIR "ressources" -# define MOVEMENT_SPEED 0.01 +# define MOVEMENT_SPEED 0.1 +# define ANGLE_SPEED 0.1 # ifdef BONUS # define COMPILED_TEXT "Compiled with bonuses" # else diff --git a/src/main.c b/src/main.c index 7edf1ea..42934ca 100644 --- a/src/main.c +++ b/src/main.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:14:30 by kcolin #+# #+# */ -/* Updated: 2025/07/22 12:50:14 by kcolin ### ########.fr */ +/* Updated: 2025/07/24 14:31:07 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,18 +22,18 @@ #include #include #include +#include void init_player(t_mapdata *mapdata, t_player *player) { player->health = 100; player->x = mapdata->startx; player->y = mapdata->starty; + player->yaw = M_PI; } int game_loop(t_cub3d_data *data) { - data->player.x += data->player.movement.x; - data->player.y += data->player.movement.y; mlx_destroy_image(data->mlx, data->img_data->img); data->img_data->img = mlx_new_image(data->mlx, WIDTH, HEIGHT); draw_map(data->map, &data->player, data->img_data); diff --git a/src/player/player.h b/src/player/player.h index 806cffa..24563e0 100644 --- a/src/player/player.h +++ b/src/player/player.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 15:51:29 by kcolin #+# #+# */ -/* Updated: 2025/07/17 15:51:42 by kcolin ### ########.fr */ +/* Updated: 2025/07/24 14:07:09 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/utils/hooks.c b/src/utils/hooks.c index afbb212..e3c2c6e 100644 --- a/src/utils/hooks.c +++ b/src/utils/hooks.c @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:22:57 by kcolin #+# #+# */ -/* Updated: 2025/07/17 15:53:49 by kcolin ### ########.fr */ +/* Updated: 2025/07/24 14:20:15 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,19 +14,46 @@ #include "frees.h" #include #include +#include +#include int keypress_handler(int keycode, t_cub3d_data *data) { + double cos_angle; + double sin_angle; + + cos_angle = cos(data->player.yaw); + sin_angle = sin(data->player.yaw); if (keycode == XK_Escape) destroy(data); + if (keycode == XK_Left) + data->player.yaw += ANGLE_SPEED; + else if (keycode == XK_Right) + data->player.yaw -= ANGLE_SPEED; + if (data->player.yaw > 2 * M_PI) + data->player.yaw -= 2 * M_PI; + if (data->player.yaw < 0) + data->player.yaw += 2 * M_PI; if (keycode == XK_a) - data->player.movement.x = -MOVEMENT_SPEED; - else if (keycode == XK_d) - data->player.movement.x = MOVEMENT_SPEED; + { + data->player.x += cos_angle * MOVEMENT_SPEED; + data->player.y -= sin_angle * MOVEMENT_SPEED; + } + if (keycode == XK_d) + { + data->player.x -= cos_angle * MOVEMENT_SPEED; + data->player.y += sin_angle * MOVEMENT_SPEED; + } if (keycode == XK_w) - data->player.movement.y = -MOVEMENT_SPEED; - else if (keycode == XK_s) - data->player.movement.y = MOVEMENT_SPEED; + { + data->player.x += sin_angle * MOVEMENT_SPEED; + data->player.y += cos_angle * MOVEMENT_SPEED; + } + if (keycode == XK_s) + { + data->player.x -= sin_angle * MOVEMENT_SPEED; + data->player.y -= cos_angle * MOVEMENT_SPEED; + } return (0); }