/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* manage_keys.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: erey-bet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/27 14:14:51 by erey-bet #+# #+# */ /* Updated: 2023/05/03 16:16:34 by erey-bet ### ########.fr */ /* */ /* ************************************************************************** */ #include "game.h" void rotate(t_ply *ply, bool right) { double old_dir_x; double old_plane_x; double speed; old_dir_x = ply->dir_x; old_plane_x = ply->pla_x; speed = ROTATIONSPEED * (M_1_PI / 180.0); if (right) speed = -speed; ply->dir_x = ply->dir_x * cos(speed) - ply->dir_y * sin(speed); ply->dir_y = old_dir_x * sin(speed) + ply->dir_y * cos(speed); ply->pla_x = ply->pla_x * cos(speed) - ply->pla_y * sin(speed); ply->pla_y = old_plane_x * sin(speed) + ply->pla_y * cos(speed); } void movement(t_game *game, t_ply *ply, double x, double y) { if(game->map.map[(int)(ply->pos_x + ply->dir_x * MOVESPEED)][(int)ply->pos_y] == '0') ply->pos_x += x; if(game->map.map[(int)ply->pos_x][(int)(ply->pos_y + ply->dir_y * MOVESPEED)] == '0') ply->pos_y += y; printf("ply->pos_x: %f, ply->pos_y: %f\n", ply->pos_x, ply->pos_y); printf("x: %f, y: %f\n", x, y); } int manage_movement(t_game *game, int key) { t_ply *ply; ply = &game->ply; if (key == MLX_KEY_W) movement(game, ply, ply->dir_x * MOVESPEED, ply->dir_y * MOVESPEED); else if (key == MLX_KEY_S) movement(game, ply, -(ply->dir_x * MOVESPEED), -(ply->dir_y * MOVESPEED)); else if (key == MLX_KEY_D) rotate(ply, true); else if (key == MLX_KEY_A) rotate(ply, false); return (1); } int manage_keys(mlx_key_data_t keys, t_game *game) { int is_moving; is_moving = 0; if (keys.key == MLX_KEY_ESCAPE) mlx_close_window(game->mlx); else if (keys.key == MLX_KEY_W || keys.key == MLX_KEY_S || keys.key == MLX_KEY_D || keys.key == MLX_KEY_A) is_moving = manage_movement(game, keys.key); if (is_moving) return (1); return (0); }