From 1626b1d9dab0e96b1d65ffb5e09ae0aa85468c7e Mon Sep 17 00:00:00 2001 From: Theo Champion Date: Tue, 29 Jul 2025 12:31:05 +0200 Subject: [PATCH] fix(hooks): Reworked keypresses events Keypresses (along with keyreleases) events are now using booleans, a function in the game loop will apply various changes as the key are pressed. By default every boolean are set to false --- src/cub3d_data.h | 14 ++++++++------ src/main.c | 3 ++- src/utils/hooks.c | 41 ++++++++++++++++++++++------------------- src/utils/hooks.h | 12 +++++++++++- 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/src/cub3d_data.h b/src/cub3d_data.h index dbadee9..e1ad270 100644 --- a/src/cub3d_data.h +++ b/src/cub3d_data.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:59:37 by kcolin #+# #+# */ -/* Updated: 2025/07/17 15:54:29 by kcolin ### ########.fr */ +/* Updated: 2025/07/29 12:26:32 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,14 +16,16 @@ # include "map/mapdata.h" # include "draw/img_data.h" # include "player/player.h" +#include "utils/hooks.h" typedef struct s_cub3d_data { - void *mlx; - void *mlx_win; - t_img_data *img_data; - t_mapdata *map; - t_player player; + void *mlx; + void *mlx_win; + t_img_data *img_data; + t_mapdata *map; + t_player player; + t_keypresses keypresses; } t_cub3d_data; #endif // CUB3D_DATA_H diff --git a/src/main.c b/src/main.c index 701e30a..160952e 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/28 17:18:38 by tchampio ### ########.fr */ +/* Updated: 2025/07/29 12:33:46 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -162,6 +162,7 @@ int main(int argc, char **argv) if (argc < 2) return (ft_printf("Error: Missing cub3d file\n"), 1); + ft_bzero(&data, sizeof(data)); data.map = ft_calloc(sizeof(t_mapdata), 1); if (!check_cubfile(argv[1], data.map)) return (ft_printf("Error: Wrong map file. Reason: %s\n", diff --git a/src/utils/hooks.c b/src/utils/hooks.c index d8e0c79..dd940a2 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/25 14:55:54 by tchampio ### ########.fr */ +/* Updated: 2025/07/29 12:28:54 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,31 +22,34 @@ int keypress_handler(int keycode, t_cub3d_data *data) { if (keycode == XK_Escape) destroy(data); + if (keycode == XK_w) + data->keypresses.is_w_pressed = true; + if (keycode == XK_a) + data->keypresses.is_a_pressed = true; + if (keycode == XK_s) + data->keypresses.is_s_pressed = true; + if (keycode == XK_d) + data->keypresses.is_d_pressed = true; if (keycode == XK_Left) - data->player.yaw += ROTATION_SPEED; - else if (keycode == XK_Right) - data->player.yaw -= ROTATION_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 || keycode == XK_d - || keycode == XK_w || keycode == XK_s) - apply_angle(keycode, data); + data->keypresses.is_left_pressed = true; + if (keycode == XK_Right) + data->keypresses.is_right_pressed = true; return (0); } int keyrelease_handler(int keycode, t_cub3d_data *data) { - if (keycode == XK_Escape) - destroy(data); - if (keycode == XK_a) - data->player.movement.x = 0; - if (keycode == XK_d) - data->player.movement.x = 0; if (keycode == XK_w) - data->player.movement.y = 0; + data->keypresses.is_w_pressed = false; + if (keycode == XK_a) + data->keypresses.is_a_pressed = false; if (keycode == XK_s) - data->player.movement.y = 0; + data->keypresses.is_s_pressed = false; + if (keycode == XK_d) + data->keypresses.is_d_pressed = false; + if (keycode == XK_Left) + data->keypresses.is_left_pressed = false; + if (keycode == XK_Right) + data->keypresses.is_right_pressed = false; return (0); } diff --git a/src/utils/hooks.h b/src/utils/hooks.h index 95fda45..fee72ef 100644 --- a/src/utils/hooks.h +++ b/src/utils/hooks.h @@ -6,7 +6,7 @@ /* By: kcolin +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/07/17 14:23:06 by kcolin #+# #+# */ -/* Updated: 2025/07/17 15:50:08 by kcolin ### ########.fr */ +/* Updated: 2025/07/29 12:26:04 by tchampio ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,16 @@ # include "../cub3d_data.h" +typedef struct s_keypresses +{ + bool is_w_pressed; + bool is_a_pressed; + bool is_s_pressed; + bool is_d_pressed; + bool is_left_pressed; + bool is_right_pressed; +} t_keypresses; + int keypress_handler(int keycode, t_cub3d_data *data); int keyrelease_handler(int keycode, t_cub3d_data *data);