Movement file
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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_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
|
||||
|
||||
@@ -6,9 +6,115 @@
|
||||
/* By: aortigos <aortigos@student.42malaga.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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"
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user