/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* manage_keys.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: erey-bet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/27 14:14:51 by erey-bet #+# #+# */ /* Updated: 2023/06/15 13:00:31 by erey-bet ### ########.fr */ /* */ /* ************************************************************************** */ #include "game.h" static int rotate(t_ply *ply, bool right) { double old_dir_x; double old_dir_y; double old_plane_x; double old_plane_y; double speed; old_dir_x = ply->dir_x; old_dir_y = ply->dir_y; old_plane_x = ply->pla_x; old_plane_y = ply->pla_y; speed = ROTATIONSPEED * (M_1_PI / 180.0); if (!right) speed = -speed; ply->dir_x = old_dir_x * cos(speed) - old_dir_y * sin(speed); ply->dir_y = old_dir_x * sin(speed) + old_dir_y * cos(speed); ply->pla_x = old_plane_x * cos(speed) - old_plane_y * sin(speed); ply->pla_y = old_plane_x * sin(speed) + old_plane_y * cos(speed); return (1); } static int movement(t_ply *ply, double x, double y) { ply->pos_x += x; ply->pos_y += y; return (1); } int manage_movement(t_game *game) { t_ply *ply; int is_moving; ply = &game->ply; is_moving = 0; if (mlx_is_key_down(game->mlx, MLX_KEY_W)) is_moving = movement(ply, (ply->dir_x * MOVESPEED), (ply->dir_y * MOVESPEED)); if (mlx_is_key_down(game->mlx, MLX_KEY_S)) is_moving = movement(ply, -(ply->dir_x * MOVESPEED), -(ply->dir_y * MOVESPEED)); if (mlx_is_key_down(game->mlx, MLX_KEY_D)) is_moving = movement(ply, (ply->pla_x * MOVESPEED), (ply->pla_y * MOVESPEED)); if (mlx_is_key_down(game->mlx, MLX_KEY_A)) is_moving = movement(ply, -(ply->pla_x * MOVESPEED), -(ply->pla_y * MOVESPEED)); if (mlx_is_key_down(game->mlx, MLX_KEY_RIGHT) || mlx_is_key_down(game->mlx, MLX_KEY_L)) is_moving = rotate(ply, true); else if (mlx_is_key_down(game->mlx, MLX_KEY_LEFT) || mlx_is_key_down(game->mlx, MLX_KEY_J)) is_moving = rotate(ply, false); return (is_moving); } int manage_keys(t_game *game) { if (mlx_is_key_down(game->mlx, MLX_KEY_ESCAPE)) mlx_close_window(game->mlx); if (manage_movement(game)) return (1); return (0); }