From a55ebc69b25eb427bcf0110310d899bf1c49dd2d Mon Sep 17 00:00:00 2001 From: Adam JOLY Date: Mon, 11 Nov 2024 13:45:56 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix(Keys):=20c?= =?UTF-8?q?hanged=20keysto=20match=20subject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/game/game.h | 5 +- includes/game/settings.h | 8 +- maps/g_ntm.cub | 100 +++++++++++++++++++++++++ src/cub3d.c | 37 ++++++++- src/raycasting/{key_hook.c => event.c} | 47 +++++------- 5 files changed, 158 insertions(+), 39 deletions(-) create mode 100644 maps/g_ntm.cub rename src/raycasting/{key_hook.c => event.c} (68%) diff --git a/includes/game/game.h b/includes/game/game.h index a0bfe46..ec4cc62 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/10 16:41:35 by adjoly ### ########.fr */ +/* Updated: 2024/11/11 13:27:55 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,7 +41,7 @@ typedef struct s_player { t_vec2 coord; float direction; - bool key[4]; + bool key[6]; } t_player; typedef struct s_render @@ -64,6 +64,7 @@ typedef struct s_render */ int key_down(int key, void *param); int key_up(int key, void *param); +int window_event(int event, void *param); /** * @brief This function is here to change the direction of the player diff --git a/includes/game/settings.h b/includes/game/settings.h index 03c12d9..2fb1c98 100644 --- a/includes/game/settings.h +++ b/includes/game/settings.h @@ -6,7 +6,7 @@ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/04 14:06:39 by adjoly #+# #+# */ -/* Updated: 2024/11/11 12:26:38 by adjoly ### ########.fr */ +/* Updated: 2024/11/11 13:43:41 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,17 +19,19 @@ # define S_KEY 22 # define A_KEY 4 # define D_KEY 7 +# define LEFT_KEY 80 +# define RIGHT_KEY 79 # define WHITE 0xFFFFFFFF # define WINDOW_W 1600 # define WINDOW_H 900 -# define PLAYER_ROT_SPEED 0.034906585039887 +# define PLAYER_ROT_SPEED 0.1308996939 # define PLAYER_SPEED 10 # define FOV 70 # define CHUNK_SIZE 64 # define TEXTURE_SIZE 64 -# define RENDER_DISTANCE 64 +# define RENDER_DISTANCE 65 #endif diff --git a/maps/g_ntm.cub b/maps/g_ntm.cub new file mode 100644 index 0000000..518ecea --- /dev/null +++ b/maps/g_ntm.cub @@ -0,0 +1,100 @@ +NO ./img/kanel.png +SO ./img/cats.png +WE ./img/flo.png + +EA ./img/cahuete.png +F 109,67,20 +C 255,204,255 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1111111111111111111111111 + 1000000000110000000000001 + 1011000001110000000000001 + 1001000000000000000000001 +1111111110110000011100000000000S1 +100000000011000001110111111111111 +111000000000000111100000010001 +100000000000001111101001000001 +10000000000011111100000010001 +10000000000001111111111111101 +10011000000100011111111111111 +10000000000000001101010010001 +11000001110101011111011110001 +11111111 1110101 101111010001 +11111111 1111111 111111111111 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cub3d.c b/src/cub3d.c index 20db872..49271ba 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/10 16:57:46 by adjoly ### ########.fr */ +/* Updated: 2024/11/11 13:37:32 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -38,6 +38,25 @@ void move_for_back(t_render *render, bool forward) } } +void move_right_left(t_render *render, bool right) +{ + if (right) + { + render->player->coord.x += PLAYER_SPEED * \ + sin(render->player->direction); + render->player->coord.y += PLAYER_SPEED * \ + cos(render->player->direction); + } + else + { + render->player->coord.x -= PLAYER_SPEED * \ + sin(render->player->direction); + render->player->coord.y -= PLAYER_SPEED * \ + cos(render->player->direction); + } +} + + int loop(void *param) { t_render *render; @@ -49,8 +68,12 @@ int loop(void *param) if (render->player->key[2]) move_for_back(render, false); if (render->player->key[3]) - change_direction(PLAYER_ROT_SPEED, false, render->player); + move_right_left(render, true); if (render->player->key[1]) + move_right_left(render, false); + if (render->player->key[4]) + change_direction(PLAYER_ROT_SPEED, false, render->player); + if (render->player->key[5]) change_direction(PLAYER_ROT_SPEED, true, render->player); render->img = mlx_new_image(render->mlx, WINDOW_W, WINDOW_H); render_frame(render); @@ -70,6 +93,13 @@ void delete_everything(t_pars *parsing, t_render *render) free_pars(parsing); } +void event_hook(t_render *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_on_event(render->mlx, render->win, MLX_WINDOW_EVENT, window_event, render); +} + int main(int ac, char **av) { t_render render; @@ -90,9 +120,8 @@ int main(int ac, char **av) render.player = &player; render.world = &world; init_texture(&render, parsing); + event_hook(&render); render.img = mlx_new_image(render.mlx, WINDOW_W, WINDOW_H); - 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); delete_everything(&parsing, &render); diff --git a/src/raycasting/key_hook.c b/src/raycasting/event.c similarity index 68% rename from src/raycasting/key_hook.c rename to src/raycasting/event.c index e8dfa9a..ea5ce56 100644 --- a/src/raycasting/key_hook.c +++ b/src/raycasting/event.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* key_hook.c :+: :+: :+: */ +/* event.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: adjoly +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/09/11 16:37:56 by adjoly #+# #+# */ -/* Updated: 2024/11/07 12:20:02 by adjoly ### ########.fr */ +/* Updated: 2024/11/11 13:29:30 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,34 +24,6 @@ void change_direction(float speed, bool clockwise, t_player *player) fix_ang(&player->direction); } -int key_hook(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->coord.x += PLAYER_SPEED * \ - cos(render->player->direction); - render->player->coord.y += PLAYER_SPEED * \ - -sin(render->player->direction); - } - else if (key == S_KEY) - { - render->player->coord.x -= PLAYER_SPEED * \ - cos(render->player->direction); - render->player->coord.y -= PLAYER_SPEED * \ - -sin(render->player->direction); - } - else if (key == D_KEY) - change_direction(PLAYER_ROT_SPEED, false, render->player); - else if (key == A_KEY) - change_direction(PLAYER_ROT_SPEED, true, render->player); - return (0); -} - int key_down(int key, void *param) { t_render *render; @@ -67,6 +39,10 @@ int key_down(int key, void *param) render->player->key[2] = true; else if (key == D_KEY) render->player->key[3] = true; + else if (key == RIGHT_KEY) + render->player->key[4] = true; + else if (key == LEFT_KEY) + render->player->key[5] = true; return (0); } @@ -83,5 +59,16 @@ int key_up(int key, void *param) render->player->key[2] = false; else if (key == D_KEY) render->player->key[3] = false; + else if (key == RIGHT_KEY) + render->player->key[4] = false; + else if (key == LEFT_KEY) + render->player->key[5] = false; + return (0); +} + +int window_event(int event, void *param) +{ + if (event == 0) + mlx_loop_end(((t_render *)param)->mlx); return (0); }