「✨」 feat(Key_hook): Rework how keys are handle so movement are done in the loop and not on key press
This commit is contained in:
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
|
24
src/cub3d.c
24
src/cub3d.c
@ -6,7 +6,7 @@
|
||||
/* By: madumerg <madumerg@42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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')
|
||||
|
Reference in New Issue
Block a user