norm - new files
This commit is contained in:
parent
be9d7df71d
commit
87f97833cf
7
Makefile
7
Makefile
@ -6,7 +6,7 @@
|
|||||||
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2022/02/13 16:27:49 by apommier #+# #+# #
|
# Created: 2022/02/13 16:27:49 by apommier #+# #+# #
|
||||||
# Updated: 2022/06/16 16:16:21 by apommier ### ########.fr #
|
# Updated: 2022/06/16 16:38:38 by apommier ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
@ -22,13 +22,16 @@ SRCS = srcs/main.c\
|
|||||||
srcs/utils/cub_utils.c\
|
srcs/utils/cub_utils.c\
|
||||||
srcs/utils/quit_game.c\
|
srcs/utils/quit_game.c\
|
||||||
srcs/parsing/parse_map.c\
|
srcs/parsing/parse_map.c\
|
||||||
|
srcs/parsing/is_a_file.c\
|
||||||
|
srcs/parsing/check_map.c\
|
||||||
|
srcs/parsing/check_map_utils.c\
|
||||||
srcs/parsing/utils_parsing.c\
|
srcs/parsing/utils_parsing.c\
|
||||||
srcs/parsing/check_color_texture.c
|
srcs/parsing/check_color_texture.c
|
||||||
|
|
||||||
OBJS = ${SRCS:.c=.o}
|
OBJS = ${SRCS:.c=.o}
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LIB = -L ./mlx -lmlx -lXext -lX11 -lm
|
LIB = -L ./mlx -lmlx -lXext -lX11 -lm
|
||||||
CFLAGS = -Wall -Wextra -g
|
CFLAGS = -Wall -Wextra -Werror -g
|
||||||
RM = rm -rf
|
RM = rm -rf
|
||||||
LIBFT = ./libft
|
LIBFT = ./libft
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/02/13 16:30:59 by apommier #+# #+# */
|
/* Created: 2022/02/13 16:30:59 by apommier #+# #+# */
|
||||||
/* Updated: 2022/06/16 16:18:45 by apommier ### ########.fr */
|
/* Updated: 2022/06/16 16:38:18 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -133,7 +133,7 @@ typedef struct draw_ray_var {
|
|||||||
double vx;
|
double vx;
|
||||||
double vy;
|
double vy;
|
||||||
int count;
|
int count;
|
||||||
double aTan;
|
double tan;
|
||||||
int nb_ray;
|
int nb_ray;
|
||||||
int my;
|
int my;
|
||||||
int mx;
|
int mx;
|
||||||
@ -142,12 +142,25 @@ typedef struct draw_ray_var {
|
|||||||
char horizontal_type;
|
char horizontal_type;
|
||||||
} t_var_draw_ray;
|
} t_var_draw_ray;
|
||||||
|
|
||||||
|
|
||||||
char *transform_map(char **double_map, t_data *img);
|
char *transform_map(char **double_map, t_data *img);
|
||||||
int check_texture_color(char **tab, t_data *img);
|
int check_texture_color(char **tab, t_data *img);
|
||||||
int check_map(char **av, t_data *img);
|
int check_map(char **av, t_data *img);
|
||||||
void ft_exit(char *str, t_data *img);
|
void ft_exit(char *str, t_data *img);
|
||||||
|
|
||||||
|
void find_angle(char c, t_data *img);
|
||||||
|
void size_line(char *str, t_data *img);
|
||||||
|
void check_inner(char **map, t_data *img);
|
||||||
|
void check_border(char **tab, t_data *img);
|
||||||
|
|
||||||
|
void verify_texture_color(t_data *img);
|
||||||
|
void error_msg(t_data *img);
|
||||||
|
void inter_map(char **split, char **tmp, t_data *img);
|
||||||
|
void check_empty_line(char **split, t_data *img, int *i);
|
||||||
|
void check_zero_one(char **split, t_data *img);
|
||||||
|
|
||||||
|
char *charge_new(t_data *img, char **map, char **tmp_map);
|
||||||
|
char **isafile(char **av, t_data *img);
|
||||||
|
|
||||||
void set_back(t_data *img);
|
void set_back(t_data *img);
|
||||||
unsigned char *get_texture(char type, char *path, t_data *img);
|
unsigned char *get_texture(char type, char *path, t_data *img);
|
||||||
int get_color(char one, char two, char three);
|
int get_color(char one, char two, char three);
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/06/16 16:15:16 by apommier #+# #+# */
|
/* Created: 2022/06/16 16:15:16 by apommier #+# #+# */
|
||||||
/* Updated: 2022/06/16 16:19:20 by apommier ### ########.fr */
|
/* Updated: 2022/06/16 16:21:20 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -40,21 +40,21 @@ void find_horizontal_wall(t_var_draw_ray *info, t_data *img)
|
|||||||
void horizontal_ray(t_var_draw_ray *hr, t_data *img)
|
void horizontal_ray(t_var_draw_ray *hr, t_data *img)
|
||||||
{
|
{
|
||||||
hr->count = 0;
|
hr->count = 0;
|
||||||
hr->aTan = 1.0 / hr->aTan;
|
hr->tan = 1.0 / hr->tan;
|
||||||
if (sin(deg_to_rad(hr->ray_angle)) > 0.001)
|
if (sin(deg_to_rad(hr->ray_angle)) > 0.001)
|
||||||
{
|
{
|
||||||
hr->ray_y = (((int)img->player.y >> 6) << 6) - 0.0001;
|
hr->ray_y = (((int)img->player.y >> 6) << 6) - 0.0001;
|
||||||
hr->ray_x = (img->player.y - hr->ray_y) * hr->aTan + img->player.x;
|
hr->ray_x = (img->player.y - hr->ray_y) * hr->tan + img->player.x;
|
||||||
hr->next_y = -64;
|
hr->next_y = -64;
|
||||||
hr->next_x = -hr->next_y * hr->aTan;
|
hr->next_x = -hr->next_y * hr->tan;
|
||||||
hr->horizontal_type = 'N';
|
hr->horizontal_type = 'N';
|
||||||
}
|
}
|
||||||
else if (sin(deg_to_rad(hr->ray_angle)) < -0.001)
|
else if (sin(deg_to_rad(hr->ray_angle)) < -0.001)
|
||||||
{
|
{
|
||||||
hr->ray_y = (((int)img->player.y >> 6) << 6) + 64;
|
hr->ray_y = (((int)img->player.y >> 6) << 6) + 64;
|
||||||
hr->ray_x = (img->player.y - hr->ray_y) * hr->aTan + img->player.x;
|
hr->ray_x = (img->player.y - hr->ray_y) * hr->tan + img->player.x;
|
||||||
hr->next_y = 64;
|
hr->next_y = 64;
|
||||||
hr->next_x = -hr->next_y * hr->aTan;
|
hr->next_x = -hr->next_y * hr->tan;
|
||||||
hr->horizontal_type = 'S';
|
hr->horizontal_type = 'S';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -95,21 +95,21 @@ void find_vertical_wall(t_var_draw_ray *info, t_data *img)
|
|||||||
|
|
||||||
void vertical_ray(t_var_draw_ray *vr, t_data *img)
|
void vertical_ray(t_var_draw_ray *vr, t_data *img)
|
||||||
{
|
{
|
||||||
vr->aTan = tan(deg_to_rad(vr->ray_angle));
|
vr->tan = tan(deg_to_rad(vr->ray_angle));
|
||||||
if (cos(deg_to_rad(vr->ray_angle)) > 0.001)
|
if (cos(deg_to_rad(vr->ray_angle)) > 0.001)
|
||||||
{
|
{
|
||||||
vr->ray_x = (((int)img->player.x >> 6) << 6) + 64;
|
vr->ray_x = (((int)img->player.x >> 6) << 6) + 64;
|
||||||
vr->ray_y = (img->player.x - vr->ray_x) * vr->aTan + img->player.y;
|
vr->ray_y = (img->player.x - vr->ray_x) * vr->tan + img->player.y;
|
||||||
vr->next_x = 64;
|
vr->next_x = 64;
|
||||||
vr->next_y = -vr->next_x * vr->aTan;
|
vr->next_y = -vr->next_x * vr->tan;
|
||||||
vr->vertical_type = 'E';
|
vr->vertical_type = 'E';
|
||||||
}
|
}
|
||||||
else if (cos(deg_to_rad(vr->ray_angle)) < -0.001)
|
else if (cos(deg_to_rad(vr->ray_angle)) < -0.001)
|
||||||
{
|
{
|
||||||
vr->ray_x = (((int)img->player.x >> 6) << 6) - 0.0001;
|
vr->ray_x = (((int)img->player.x >> 6) << 6) - 0.0001;
|
||||||
vr->ray_y = (img->player.x - vr->ray_x) * vr->aTan + img->player.y;
|
vr->ray_y = (img->player.x - vr->ray_x) * vr->tan + img->player.y;
|
||||||
vr->next_x = -64;
|
vr->next_x = -64;
|
||||||
vr->next_y = -vr->next_x * vr->aTan;
|
vr->next_y = -vr->next_x * vr->tan;
|
||||||
vr->vertical_type = 'W';
|
vr->vertical_type = 'W';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -134,7 +134,7 @@ void set_info_draw(t_var_draw_ray *info)
|
|||||||
info->vx = 0;
|
info->vx = 0;
|
||||||
info->vy = 0;
|
info->vy = 0;
|
||||||
info->count = 0;
|
info->count = 0;
|
||||||
info->aTan = 0;
|
info->tan = 0;
|
||||||
info->nb_ray = -1;
|
info->nb_ray = -1;
|
||||||
info->my = 0;
|
info->my = 0;
|
||||||
info->mx = 0;
|
info->mx = 0;
|
||||||
|
|||||||
92
srcs/parsing/check_map.c
Normal file
92
srcs/parsing/check_map.c
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* check_map.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/06/16 16:26:58 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/06/16 16:29:06 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../includes/Cub3D.h"
|
||||||
|
|
||||||
|
void close_or_not(char **tab, int i, int j, t_data *img)
|
||||||
|
{
|
||||||
|
if (tab[i + 1][j] == '3' || tab[i - 1][j] == '3')
|
||||||
|
img->map.error = 1;
|
||||||
|
if (tab[i][j + 1] == '3' || tab[i][j - 1] == '3')
|
||||||
|
img->map.error = 1;
|
||||||
|
if (tab[i + 1][j + 1] == '3' || tab[i + 1][j - 1] == '3')
|
||||||
|
img->map.error = 1;
|
||||||
|
if (tab[i - 1][j + 1] == '3' || tab[i - 1][j - 1] == '3')
|
||||||
|
img->map.error = 1;
|
||||||
|
if (img->map.error != 1)
|
||||||
|
img->map.error = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void check_border(char **tab, t_data *img)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (tab[i])
|
||||||
|
{
|
||||||
|
j = 0;
|
||||||
|
while (tab[i][j])
|
||||||
|
{
|
||||||
|
if (tab[i][j] == '0' || tab[i][j] == 'W' || tab[i][j] == 'N'
|
||||||
|
|| tab[i][j] == 'S' || tab[i][j] == 'E')
|
||||||
|
close_or_not(tab, i, j, img);
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_inner_utils(char *line, t_data *img)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int player;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
player = 0;
|
||||||
|
while (line[i])
|
||||||
|
{
|
||||||
|
if (line[i] == 'N' || line[i] == 'S'
|
||||||
|
|| line[i] == 'E' || line[i] == 'W')
|
||||||
|
{
|
||||||
|
find_angle(line[i], img);
|
||||||
|
img->player.x = i * 64 - 32;
|
||||||
|
player++;
|
||||||
|
}
|
||||||
|
else if (line[i] != '3' && line[i] != '0' && line[i] != '1')
|
||||||
|
return (100);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return (player);
|
||||||
|
}
|
||||||
|
|
||||||
|
void check_inner(char **map, t_data *img)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int player;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
player = 0;
|
||||||
|
while (map[i])
|
||||||
|
{
|
||||||
|
player += check_inner_utils(map[i], img);
|
||||||
|
if (player == 1 && !img->player.y)
|
||||||
|
img->player.y = i * 64 - 32;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (player == 0)
|
||||||
|
img->map.error = 2;
|
||||||
|
if (player > 1 && player < 100)
|
||||||
|
img->map.error = 3;
|
||||||
|
if (player >= 100)
|
||||||
|
img->map.error = -1;
|
||||||
|
}
|
||||||
102
srcs/parsing/check_map_utils.c
Normal file
102
srcs/parsing/check_map_utils.c
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* check_map_utils.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/06/16 16:30:52 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/06/16 16:32:55 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../includes/Cub3D.h"
|
||||||
|
|
||||||
|
void verify_texture_color(t_data *img)
|
||||||
|
{
|
||||||
|
if (img->map.texture.north == NULL)
|
||||||
|
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
||||||
|
if (img->map.texture.east == NULL)
|
||||||
|
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
||||||
|
if (img->map.texture.south == NULL)
|
||||||
|
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
||||||
|
if (img->map.texture.west == NULL)
|
||||||
|
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
||||||
|
if (img->map.floor.set != 1)
|
||||||
|
ft_exit("Error\nColor not set properly\n", img);
|
||||||
|
if (img->map.sky.set != 1)
|
||||||
|
ft_exit("Error\nColor not set properly\n", img);
|
||||||
|
}
|
||||||
|
|
||||||
|
void error_msg(t_data *img)
|
||||||
|
{
|
||||||
|
if (img->map.error == 1)
|
||||||
|
ft_exit("Error\nMap isn't closed\n", img);
|
||||||
|
if (img->map.error == 2)
|
||||||
|
ft_exit("Error\nMissing player\n", img);
|
||||||
|
if (img->map.error == 3)
|
||||||
|
ft_exit("Error\nToo many players\n", img);
|
||||||
|
if (img->map.error == -1)
|
||||||
|
ft_exit("Error\nBad character in map\n", img);
|
||||||
|
}
|
||||||
|
|
||||||
|
void inter_map(char **split, char **tmp, t_data *img)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (split[i])
|
||||||
|
{
|
||||||
|
j = 0;
|
||||||
|
while (split[i][j])
|
||||||
|
{
|
||||||
|
if (split[i][j] == '3')
|
||||||
|
img->map.error = -1;
|
||||||
|
else if (split[i][j] != ' ')
|
||||||
|
tmp[i + 1][j + 1] = split[i][j];
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void check_empty_line(char **split, t_data *img, int *i)
|
||||||
|
{
|
||||||
|
while (split[*i])
|
||||||
|
{
|
||||||
|
if (!ft_strchr(split[*i], '1'))
|
||||||
|
ft_exit("Error\nInvalid line in map file\n", img);
|
||||||
|
size_line(split[*i], img);
|
||||||
|
(*i)++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void check_zero_one(char **split, t_data *img)
|
||||||
|
{
|
||||||
|
char **tmp;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
check_empty_line(split, img, &i);
|
||||||
|
img->map.y = i;
|
||||||
|
tmp = malloc(sizeof(char *) * (i + 3));
|
||||||
|
if (!tmp)
|
||||||
|
quit_game(img);
|
||||||
|
i = 0;
|
||||||
|
while (i < img->map.y + 2)
|
||||||
|
{
|
||||||
|
tmp[i] = charge_new(img, split, tmp);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
tmp[i] = NULL;
|
||||||
|
inter_map(split, tmp, img);
|
||||||
|
if (img->map.error == -1)
|
||||||
|
{
|
||||||
|
free_double(tmp);
|
||||||
|
return ;
|
||||||
|
}
|
||||||
|
check_border(tmp, img);
|
||||||
|
check_inner(tmp, img);
|
||||||
|
free_double(tmp);
|
||||||
|
}
|
||||||
52
srcs/parsing/is_a_file.c
Normal file
52
srcs/parsing/is_a_file.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* is_a_file.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2022/06/16 16:37:43 by apommier #+# #+# */
|
||||||
|
/* Updated: 2022/06/16 16:38:57 by apommier ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "../../includes/Cub3D.h"
|
||||||
|
|
||||||
|
char **fill_tab(char *swap, int count, char **ret, int fd)
|
||||||
|
{
|
||||||
|
while (swap || !count)
|
||||||
|
{
|
||||||
|
swap = get_next_line(fd);
|
||||||
|
if (ft_strlen(swap) >= 1 && swap[ft_strlen(swap) - 1] == '\n')
|
||||||
|
swap[ft_strlen(swap) - 1] = 0;
|
||||||
|
ret[count] = swap;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
char **isafile(char **av, t_data *img)
|
||||||
|
{
|
||||||
|
int fd;
|
||||||
|
char **ret;
|
||||||
|
int count;
|
||||||
|
int pass;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
get_map_size(av[1], img, &count, 0);
|
||||||
|
ret = ft_calloc(sizeof(char *), count);
|
||||||
|
if (!ret)
|
||||||
|
quit_game(img);
|
||||||
|
img->to_be_free.tab = ret;
|
||||||
|
fd = open(av[1], O_RDONLY);
|
||||||
|
if (fd == -1)
|
||||||
|
ft_exit("Error\nBad texture file", img);
|
||||||
|
ret = fill_tab(0, 0, ret, fd);
|
||||||
|
close(fd);
|
||||||
|
pass = check_texture_color(ret, img);
|
||||||
|
check_zero_one(ret + pass, img);
|
||||||
|
transform_map(ret + pass, img);
|
||||||
|
free_double(ret);
|
||||||
|
img->to_be_free.tab = 0;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
@ -6,51 +6,12 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/05/10 17:54:25 by sadjigui #+# #+# */
|
/* Created: 2022/05/10 17:54:25 by sadjigui #+# #+# */
|
||||||
/* Updated: 2022/06/15 23:33:19 by apommier ### ########.fr */
|
/* Updated: 2022/06/16 16:38:05 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
#include "../../includes/Cub3D.h"
|
#include "../../includes/Cub3D.h"
|
||||||
|
|
||||||
void verifie_texture_color(t_data *img)
|
|
||||||
{
|
|
||||||
if (img->map.texture.north == NULL)
|
|
||||||
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
|
||||||
if (img->map.texture.east == NULL)
|
|
||||||
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
|
||||||
if (img->map.texture.south == NULL)
|
|
||||||
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
|
||||||
if (img->map.texture.west == NULL)
|
|
||||||
ft_exit("Error\nTexture isn't loaded properly\n", img);
|
|
||||||
if (img->map.floor.set != 1)
|
|
||||||
ft_exit("Error\nColor not set properly\n", img);
|
|
||||||
if (img->map.sky.set != 1)
|
|
||||||
ft_exit("Error\nColor not set properly\n", img);
|
|
||||||
}
|
|
||||||
|
|
||||||
void error_msg(t_data *img)
|
|
||||||
{
|
|
||||||
if (img->map.error == 1)
|
|
||||||
ft_exit("Error\nMap isn't closed\n", img);
|
|
||||||
if (img->map.error == 2)
|
|
||||||
ft_exit("Error\nMissing player\n", img);
|
|
||||||
if (img->map.error == 3)
|
|
||||||
ft_exit("Error\nToo many players\n", img);
|
|
||||||
if (img->map.error == -1)
|
|
||||||
ft_exit("Error\nBad character in map\n", img);
|
|
||||||
}
|
|
||||||
|
|
||||||
void size_line(char *str, t_data *img)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (str[i])
|
|
||||||
i++;
|
|
||||||
if (i > img->map.x)
|
|
||||||
img->map.x = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *charge_new(t_data *img, char **map, char **tmp_map)
|
char *charge_new(t_data *img, char **map, char **tmp_map)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
@ -90,153 +51,6 @@ int reverse_comp(char *s1, char *s2)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void inter_map(char **split, char **tmp, t_data *img)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (split[i])
|
|
||||||
{
|
|
||||||
j = 0;
|
|
||||||
while (split[i][j])
|
|
||||||
{
|
|
||||||
if (split[i][j] == '3')
|
|
||||||
img->map.error = -1;
|
|
||||||
else if (split[i][j] != ' ')
|
|
||||||
tmp[i + 1][j + 1] = split[i][j];
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void close_or_not(char **tab, int i, int j, t_data *img)
|
|
||||||
{
|
|
||||||
if (tab[i + 1][j] == '3' || tab[i - 1][j] == '3')
|
|
||||||
img->map.error = 1;
|
|
||||||
if (tab[i][j + 1] == '3' || tab[i][j - 1] == '3')
|
|
||||||
img->map.error = 1;
|
|
||||||
if (tab[i + 1][j + 1] == '3' || tab[i + 1][j - 1] == '3')
|
|
||||||
img->map.error = 1;
|
|
||||||
if (tab[i - 1][j + 1] == '3' || tab[i - 1][j - 1] == '3')
|
|
||||||
img->map.error = 1;
|
|
||||||
if (img->map.error != 1)
|
|
||||||
img->map.error = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void find_angle(char c, t_data *img)
|
|
||||||
{
|
|
||||||
if (c == 'N')
|
|
||||||
img->player.angle = 90;
|
|
||||||
if (c == 'E')
|
|
||||||
img->player.angle = 0;
|
|
||||||
if (c == 'S')
|
|
||||||
img->player.angle = 270;
|
|
||||||
if (c == 'W')
|
|
||||||
img->player.angle = 180;
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_inner_utils(char *line, t_data *img)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int player;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
player = 0;
|
|
||||||
while (line[i])
|
|
||||||
{
|
|
||||||
if (line[i] == 'N' || line[i] == 'S'
|
|
||||||
|| line[i] == 'E' || line[i] == 'W')
|
|
||||||
{
|
|
||||||
find_angle(line[i], img);
|
|
||||||
img->player.x = i * 64 - 32;
|
|
||||||
player++;
|
|
||||||
}
|
|
||||||
else if (line[i] != '3' && line[i] != '0' && line[i] != '1')
|
|
||||||
return (100);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
return (player);
|
|
||||||
}
|
|
||||||
|
|
||||||
void check_inner(char **map, t_data *img)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int player;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
player = 0;
|
|
||||||
while (map[i])
|
|
||||||
{
|
|
||||||
player += check_inner_utils(map[i], img);
|
|
||||||
if (player == 1 && !img->player.y)
|
|
||||||
img->player.y = i * 64 - 32;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
if (player == 0)
|
|
||||||
img->map.error = 2;
|
|
||||||
if (player > 1 && player < 100)
|
|
||||||
img->map.error = 3;
|
|
||||||
if (player >= 100)
|
|
||||||
img->map.error = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void check_border(char **tab, t_data *img)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (tab[i])
|
|
||||||
{
|
|
||||||
j = 0;
|
|
||||||
while (tab[i][j])
|
|
||||||
{
|
|
||||||
if (tab[i][j] == '0' || tab[i][j] == 'W' || tab[i][j] == 'N'
|
|
||||||
|| tab[i][j] == 'S' || tab[i][j] == 'E')
|
|
||||||
close_or_not(tab, i, j, img);
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void check_zero_one(char **split, t_data *img)
|
|
||||||
{
|
|
||||||
char **tmp;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (split[i])
|
|
||||||
{
|
|
||||||
if (!ft_strchr(split[i], '1'))
|
|
||||||
ft_exit("Error\nInvalid line in map file\n", img);
|
|
||||||
size_line(split[i], img);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
img->map.y = i;
|
|
||||||
tmp = malloc(sizeof(char *) * (i + 3));
|
|
||||||
if (!tmp)
|
|
||||||
quit_game(img);
|
|
||||||
i = 0;
|
|
||||||
while (i < img->map.y + 2)
|
|
||||||
{
|
|
||||||
tmp[i] = charge_new(img, split, tmp);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
tmp[i] = NULL;
|
|
||||||
inter_map(split, tmp, img);
|
|
||||||
if (img->map.error == -1)
|
|
||||||
{
|
|
||||||
free_double(tmp);
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
check_border(tmp, img);
|
|
||||||
check_inner(tmp, img);
|
|
||||||
free_double(tmp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int is_in_charset(char c, char *charset)
|
int is_in_charset(char c, char *charset)
|
||||||
{
|
{
|
||||||
while (*charset)
|
while (*charset)
|
||||||
@ -266,45 +80,6 @@ int detect_map_line(char *line)
|
|||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char **fill_tab(char *swap, int count, char **ret, int fd)
|
|
||||||
{
|
|
||||||
while (swap || !count)
|
|
||||||
{
|
|
||||||
swap = get_next_line(fd);
|
|
||||||
if (ft_strlen(swap) >= 1 && swap[ft_strlen(swap) - 1] == '\n')
|
|
||||||
swap[ft_strlen(swap) - 1] = 0;
|
|
||||||
ret[count] = swap;
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
return (ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
char **isafile(char **av, t_data *img)
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
char **ret;
|
|
||||||
int count;
|
|
||||||
int pass;
|
|
||||||
|
|
||||||
count = 0;
|
|
||||||
get_map_size(av[1], img, &count, 0);
|
|
||||||
ret = ft_calloc(sizeof(char *), count);
|
|
||||||
if (!ret)
|
|
||||||
quit_game(img);
|
|
||||||
img->to_be_free.tab = ret;
|
|
||||||
fd = open(av[1], O_RDONLY);
|
|
||||||
if (fd == -1)
|
|
||||||
ft_exit("Error\nBad texture file", img);
|
|
||||||
ret = fill_tab(0, 0, ret, fd);
|
|
||||||
close(fd);
|
|
||||||
pass = check_texture_color(ret, img);
|
|
||||||
check_zero_one(ret + pass, img);
|
|
||||||
transform_map(ret + pass, img);
|
|
||||||
free_double(ret);
|
|
||||||
img->to_be_free.tab = 0;
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int check_map(char **av, t_data *img)
|
int check_map(char **av, t_data *img)
|
||||||
{
|
{
|
||||||
img->map.x = 0;
|
img->map.x = 0;
|
||||||
@ -325,6 +100,6 @@ int check_map(char **av, t_data *img)
|
|||||||
error_msg(img);
|
error_msg(img);
|
||||||
quit_game(img);
|
quit_game(img);
|
||||||
}
|
}
|
||||||
verifie_texture_color(img);
|
verify_texture_color(img);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2022/06/15 23:34:49 by apommier #+# #+# */
|
/* Created: 2022/06/15 23:34:49 by apommier #+# #+# */
|
||||||
/* Updated: 2022/06/15 23:38:38 by apommier ### ########.fr */
|
/* Updated: 2022/06/16 16:25:36 by apommier ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
@ -51,3 +51,26 @@ char *transform_map(char **double_map, t_data *img)
|
|||||||
img->map.simple_map = map;
|
img->map.simple_map = map;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void find_angle(char c, t_data *img)
|
||||||
|
{
|
||||||
|
if (c == 'N')
|
||||||
|
img->player.angle = 90;
|
||||||
|
if (c == 'E')
|
||||||
|
img->player.angle = 0;
|
||||||
|
if (c == 'S')
|
||||||
|
img->player.angle = 270;
|
||||||
|
if (c == 'W')
|
||||||
|
img->player.angle = 180;
|
||||||
|
}
|
||||||
|
|
||||||
|
void size_line(char *str, t_data *img)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (str[i])
|
||||||
|
i++;
|
||||||
|
if (i > img->map.x)
|
||||||
|
img->map.x = i;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user