From 4816f86a69397a55ddd741598ac6b770fcdf0bdc Mon Sep 17 00:00:00 2001 From: adjoly Date: Thu, 7 Nov 2024 12:23:38 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E2=9C=A8=E3=80=8D=20feat(Key=5Fhook):?= =?UTF-8?q?=20Rework=20how=20keys=20are=20handle=20so=20movement=20are=20d?= =?UTF-8?q?one=20in=20the=20loop=20and=20not=20on=20key=20press?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .envrc | 1 + includes/game/game.h | 6 +++++- src/cub3d.c | 24 ++++++++++++++++++++++-- src/raycasting/key_hook.c | 36 +++++++++++++++++++++++++++++++++++- src/utils/convert_parsing.c | 4 +++- 5 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 .envrc diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/includes/game/game.h b/includes/game/game.h index bf063bb..4057e3f 100644 --- a/includes/game/game.h +++ b/includes/game/game.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/11 16:38:40 by adjoly #+# #+# */ -/* Updated: 2024/11/02 15:55:39 by adjoly ### ########.fr */ +/* Updated: 2024/11/07 12:15:23 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,6 +41,7 @@ typedef struct s_player { t_vec2 coord; float direction; + bool key[4]; } t_player; typedef struct s_render @@ -62,6 +63,9 @@ typedef struct s_render * @return Minilibx go brrrr(useless always 0) */ int key_hook(int key, void *param); +int key_down(int key, void *param); +int key_down(int key, void *param); +int key_up(int key, void *param); /** * @brief This function is here to change the direction of the player diff --git a/src/cub3d.c b/src/cub3d.c index e9eb975..1cdb197 100644 --- a/src/cub3d.c +++ b/src/cub3d.c @@ -6,7 +6,7 @@ /* By: madumerg +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/04 16:58:27 by madumerg #+# #+# */ -/* Updated: 2024/11/06 13:43:14 by adjoly ### ########.fr */ +/* Updated: 2024/11/07 12:21:41 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,25 @@ int loop(void *param) render = (t_render *)param; mlx_destroy_image(render->mlx, render->img); + + if (render->player->key[0]) + { + render->player->coord.x += PLAYER_SPEED * \ + cos(render->player->direction); + render->player->coord.y += PLAYER_SPEED * \ + -sin(render->player->direction); + } + if (render->player->key[2]) + { + render->player->coord.x -= PLAYER_SPEED * \ + cos(render->player->direction); + render->player->coord.y -= PLAYER_SPEED * \ + -sin(render->player->direction); + } + if (render->player->key[3]) + change_direction(PLAYER_ROT_SPEED, false, render->player); + if (render->player->key[1]) + change_direction(PLAYER_ROT_SPEED, true, render->player); render->img = mlx_new_image(render->mlx, WINDOW_W, WINDOW_H); render_frame(render); mlx_put_image_to_window(render->mlx, render->win, render->img, 0, 0); @@ -50,7 +69,8 @@ int main(int ac, char **av) render.world = &world; init_texture(&render, parsing); render.img = mlx_new_image(render.mlx, WINDOW_W, WINDOW_H); - mlx_on_event(render.mlx, render.win, MLX_KEYDOWN, key_hook, &render); + mlx_on_event(render.mlx, render.win, MLX_KEYDOWN, key_down, &render); + mlx_on_event(render.mlx, render.win, MLX_KEYUP, key_up, &render); mlx_loop_hook(render.mlx, loop, &render); mlx_loop(render.mlx); mlx_destroy_image(render.mlx, render.img); diff --git a/src/raycasting/key_hook.c b/src/raycasting/key_hook.c index faa3a56..e8dfa9a 100644 --- a/src/raycasting/key_hook.c +++ b/src/raycasting/key_hook.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/11 16:37:56 by adjoly #+# #+# */ -/* Updated: 2024/11/02 15:50:23 by adjoly ### ########.fr */ +/* Updated: 2024/11/07 12:20:02 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -51,3 +51,37 @@ int key_hook(int key, void *param) change_direction(PLAYER_ROT_SPEED, true, render->player); return (0); } + +int key_down(int key, void *param) +{ + t_render *render; + + render = (t_render *)param; + if (key == ESCAPE_KEY) + return (mlx_loop_end(render->mlx)); + if (key == W_KEY) + render->player->key[0] = true; + else if (key == A_KEY) + render->player->key[1] = true; + else if (key == S_KEY) + render->player->key[2] = true; + else if (key == D_KEY) + render->player->key[3] = true; + return (0); +} + +int key_up(int key, void *param) +{ + t_render *render; + + render = (t_render *)param; + if (key == W_KEY) + render->player->key[0] = false; + else if (key == A_KEY) + render->player->key[1] = false; + else if (key == S_KEY) + render->player->key[2] = false; + else if (key == D_KEY) + render->player->key[3] = false; + return (0); +} diff --git a/src/utils/convert_parsing.c b/src/utils/convert_parsing.c index 63b0098..391ae49 100644 --- a/src/utils/convert_parsing.c +++ b/src/utils/convert_parsing.c @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/06 13:01:03 by adjoly #+# #+# */ -/* Updated: 2024/11/06 13:44:16 by adjoly ### ########.fr */ +/* Updated: 2024/11/07 12:17:13 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,7 @@ #include "mlx.h" #include "parsing.h" #include "game/game.h" +#include "strings.h" t_player init_player(t_pars parsing) { @@ -21,6 +22,7 @@ t_player init_player(t_pars parsing) player.coord.x = parsing.coor.x * CHUNK_SIZE + (CHUNK_SIZE / 2); player.coord.y = parsing.coor.y * CHUNK_SIZE + (CHUNK_SIZE / 2); + ft_bzero(player.key, 4); if (parsing.l_player == 'N') player.direction = M_PI / 2; else if (parsing.l_player == 'S')