Movement file

This commit is contained in:
2025-12-09 18:40:44 +01:00
parent f693cda860
commit a7f7d77bf9
2 changed files with 116 additions and 2 deletions

View File

@@ -6,7 +6,7 @@
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */ /* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/11/25 19:47:02 by aortigos #+# #+# */ /* Created: 2025/11/25 19:47:02 by aortigos #+# #+# */
/* Updated: 2025/12/05 17:10:22 by aortigos ### ########.fr */ /* Updated: 2025/12/09 18:40:30 by aortigos ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -87,4 +87,12 @@ int valid_map(t_data *m);
void ft_delete_texture(t_texture *texture); void ft_delete_texture(t_texture *texture);
void ft_exit(t_mlx *mlx); void ft_exit(t_mlx *mlx);
// movement.c
void rotate_player(t_mlx *mlx, int i);
void move_player(t_mlx *mlx, double move_x, double move_y);
void cub_hook(t_mlx *mlx, double move_x, double move_y);
void ft_reset_move(mlx_key_data_t keydata, t_mlx *mlx);
void key_press(mlx_key_data_t keydata, void *ml);
#endif #endif

View File

@@ -6,9 +6,115 @@
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */ /* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/12/05 17:11:09 by aortigos #+# #+# */ /* Created: 2025/12/05 17:11:09 by aortigos #+# #+# */
/* Updated: 2025/12/05 17:11:19 by aortigos ### ########.fr */ /* Updated: 2025/12/09 18:40:05 by aortigos ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "../../includes/cub3d.h" #include "../../includes/cub3d.h"
void rotate_player(t_mlx *mlx, int i)
{
if (i == 1)
{
mlx->ply->angle += ROTATION_SPEED;
if (mlx->ply->angle > 2 * M_PI)
mlx->ply->angle -= 2 * M_PI;
}
else
{
mlx->ply->angle -= ROTATION_SPEED;
if (mlx->ply->angle < 0)
mlx->ply->angle += 2 * M_PI;
}
}
void move_player(t_mlx *mlx, double move_x, double move_y)
{
int map_grid_y;
int map_grid_x;
int new_x;
int new_y;
new_x = roundf(mlx->ply->plyr_x + move_x);
new_y = roundf(mlx->ply->plyr_y + move_y);
map_grid_x = (new_x / WALL_SIZE);
map_grid_y = (new_y / WALL_SIZE);
if (mlx->dt->sq_map[map_grid_y][map_grid_x] != '1'
&& (mlx->dt->sq_map[map_grid_y][mlx->ply->plyr_x / WALL_SIZE] != '1'
&& mlx->dt->sq_map[mlx->ply->plyr_y
/ WALL_SIZE][map_grid_x] != '1'))
{
mlx->ply->plyr_x = new_x;
mlx->ply->plyr_y = new_y;
}
}
void cub_hook(t_mlx *mlx, double move_x, double move_y)
{
if (mlx->ply->rot == 1)
rotate_player(mlx, 1);
if (mlx->ply->rot == -1)
rotate_player(mlx, 0);
if (mlx->ply->l_r == 1)
{
move_x = -sin(mlx->ply->angle) * PLAYER_SPEED;
move_y = cos(mlx->ply->angle) * PLAYER_SPEED;
}
if (mlx->ply->l_r == -1)
{
move_x = sin(mlx->ply->angle) * PLAYER_SPEED;
move_y = -cos(mlx->ply->angle) * PLAYER_SPEED;
}
if (mlx->ply->u_d == 1)
{
move_x = cos(mlx->ply->angle) * PLAYER_SPEED;
move_y = sin(mlx->ply->angle) * PLAYER_SPEED;
}
if (mlx->ply->u_d == -1)
{
move_x = -cos(mlx->ply->angle) * PLAYER_SPEED;
move_y = -sin(mlx->ply->angle) * PLAYER_SPEED;
}
move_player(mlx, move_x, move_y);
}
void ft_reset_move(mlx_key_data_t keydata, t_mlx *mlx)
{
if (keydata.key == MLX_KEY_D && (keydata.action == MLX_RELEASE))
mlx->ply->l_r = 0;
else if (keydata.key == MLX_KEY_A && (keydata.action == MLX_RELEASE))
mlx->ply->l_r = 0;
else if (keydata.key == MLX_KEY_S && (keydata.action == MLX_RELEASE))
mlx->ply->u_d = 0;
else if (keydata.key == MLX_KEY_W && (keydata.action == MLX_RELEASE))
mlx->ply->u_d = 0;
else if (keydata.key == MLX_KEY_LEFT && keydata.action == MLX_RELEASE)
mlx->ply->rot = 0;
else if (keydata.key == MLX_KEY_RIGHT && keydata.action == MLX_RELEASE)
mlx->ply->rot = 0;
}
void key_press(mlx_key_data_t keydata, void *ml)
{
t_mlx *mlx;
mlx = ml;
if (keydata.key == MLX_KEY_ESCAPE && (keydata.action == MLX_PRESS
|| keydata.action == MLX_REPEAT))
{
ft_exit(mlx);
}
else if (keydata.key == MLX_KEY_A && (keydata.action == MLX_PRESS))
mlx->ply->l_r = -1;
else if (keydata.key == MLX_KEY_D && (keydata.action == MLX_PRESS))
mlx->ply->l_r = 1;
else if (keydata.key == MLX_KEY_S && (keydata.action == MLX_PRESS))
mlx->ply->u_d = -1;
else if (keydata.key == MLX_KEY_W && keydata.action == MLX_PRESS)
mlx->ply->u_d = 1;
else if (keydata.key == MLX_KEY_LEFT && keydata.action == MLX_PRESS)
mlx->ply->rot = -1;
else if (keydata.key == MLX_KEY_RIGHT && keydata.action == MLX_PRESS)
mlx->ply->rot = 1;
ft_reset_move(keydata, mlx);
}