From 46ed1046b3d8e9dfbb9438552582898c3c79a9f5 Mon Sep 17 00:00:00 2001
From: JozanLeClerc <bousset.rudy@gmail.com>
Date: Wed, 4 Mar 2020 00:17:54 +0100
Subject: Chelou maps work, now sides check

---
 src/ft_check_map_line.c | 12 ++++++------
 src/ft_get_map.c        | 41 ++++++++++++++---------------------------
 src/ft_get_map_dims.c   | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/ft_init_map.c       |  1 +
 src/ft_parse_map.c      |  8 +++++---
 5 files changed, 74 insertions(+), 36 deletions(-)
 create mode 100644 src/ft_get_map_dims.c

(limited to 'src')

diff --git a/src/ft_check_map_line.c b/src/ft_check_map_line.c
index c5b4cdc..2d69545 100644
--- a/src/ft_check_map_line.c
+++ b/src/ft_check_map_line.c
@@ -71,7 +71,7 @@ size_t
 static int8_t
 	ft_check_side_walls(char *line, size_t i, t_cub *clist)
 {
-	if (line[0] != '1' || line[i - 1] != '1')
+	if ((line [0] != ' ' && line[0] != '1') || line[i - 1] != '1')
 	{
 		ft_sprintf(clist->errmsg, FT_ERR_MAP_WALLS);
 		return (-1);
@@ -100,10 +100,10 @@ int8_t
 	}
 	if (ft_check_side_walls(line, i, clist) < 0)
 		return (-1);
-	if (ft_get_line_len(line) != clist->mlist.map_w)
-	{
-		ft_sprintf(clist->errmsg, FT_ERR_MAP_LEN);
-		return (-1);
-	}
+	/* if (ft_get_line_len(line) != clist->mlist.map_w) */
+	/* { */
+	/* 	ft_sprintf(clist->errmsg, FT_ERR_MAP_LEN); */
+	/* 	return (-1); */
+	/* } */
 	return (0);
 }
diff --git a/src/ft_get_map.c b/src/ft_get_map.c
index fb8e0f2..08c9734 100644
--- a/src/ft_get_map.c
+++ b/src/ft_get_map.c
@@ -12,20 +12,10 @@
 
 #include <libft.h>
 #include <cub3d.h>
+#include <stdlib.h>
 #include <stddef.h>
 #include <stdint.h>
 
-static size_t
-	ft_get_map_h(char **map)
-{
-	size_t	i;
-
-	i = 0;
-	while (map[i])
-		i++;
-	return (i);
-}
-
 static void
 	ft_linecpy(char *line, char *mapl, size_t start)
 {
@@ -38,8 +28,6 @@ static void
 	slen = ft_strlen(line);
 	while (i < slen && line[i])
 	{
-		while (line[i] == ' ')
-			i++;
 		mapl[j] = line[i];
 		i++;
 		j++;
@@ -48,16 +36,19 @@ static void
 }
 
 static int8_t
-	ft_cat_mapl(char *line, size_t i, t_cub *clist)
+	ft_cat_mapl(char *line, t_cub *clist)
 {
-	if (!(clist->mlist.mapl = (char *)ft_nrealloc(clist->mlist.mapl,
-				((clist->mlist.map_w + 1) * i) * sizeof(char),
-				((clist->mlist.map_w + 1) * (i + 1)) * sizeof(char))))
+	if (!line[0] ||
+		!(clist->mlist.mapl = (char *)ft_nrealloc(clist->mlist.mapl,
+			clist->mlist.mapl_len * sizeof(char),
+			(clist->mlist.mapl_len + ft_strlen(line) + 1) * sizeof(char))))
 	{
 		ft_sprintf(clist->errmsg, FT_ERR_ALLOCATE);
 		return (-1);
 	}
-	ft_linecpy(line, clist->mlist.mapl, (clist->mlist.map_w + 1) * i);
+	ft_linecpy(line, clist->mlist.mapl,
+			clist->mlist.mapl_len);
+	clist->mlist.mapl_len += ft_strlen(line) + 1;
 	return (0);
 }
 
@@ -68,18 +59,16 @@ int
 	if (!line[0])
 	{
 		ft_memdel((void**)&line);
-		ft_sprintf(clist->errmsg, "%s", FT_ERR_READ);
+		ft_sprintf(clist->errmsg, FT_ERR_READ);
 		return (-1);
 	}
-	clist->mlist.map_w = ft_get_line_len(line);
 	if (ft_check_map_line(line, 1, clist) < 0)
 	{
 		ft_memdel((void**)&line);
-		ft_sprintf(clist->errmsg, "%s", FT_ERR_READ);
 		return (-1);
 	}
 	ft_memdel((void**)&clist->mlist.mapl);
-	if (ft_cat_mapl(line, 0, clist) < 0)
+	if (ft_cat_mapl(line, clist) < 0)
 	{
 		ft_memdel((void**)&line);
 		return (-1);
@@ -92,16 +81,14 @@ int
 	ft_get_map_core(int fd, t_cub *clist)
 {
 	int		ret;
-	size_t	i;
 	char	*line;
 
-	i = 1;
 	ret = 1;
 	while ((ret = get_next_line(fd, &line)) > 0)
 	{
 		clist->mlist.line_chk += 1;
 		if (!line[0] || ft_check_map_line(line, 0, clist) < 0
-			|| ft_cat_mapl(line, i, clist) < 0)
+			|| ft_cat_mapl(line, clist) < 0)
 		{
 			if (!line[0])
 				ft_sprintf(clist->errmsg, FT_ERR_MAP_EMPL);
@@ -109,13 +96,13 @@ int
 			return (-1);
 		}
 		ft_memdel((void**)&line);
-		i++;
 	}
 	ft_memdel((void**)&line);
-	clist->mlist.mapl[((clist->mlist.map_w + 1) * i) - 1] = '\0';
+	clist->mlist.mapl[clist->mlist.mapl_len - 1] = '\0';
 	ft_free_words(clist->mlist.map);
 	clist->mlist.map = ft_split(clist->mlist.mapl, '\n');
 	clist->mlist.map_h = ft_get_map_h(clist->mlist.map);
+	clist->mlist.map_w = ft_get_map_w(clist->mlist.map);
 	ft_memdel((void**)&clist->mlist.mapl);
 	return (0);
 }
diff --git a/src/ft_get_map_dims.c b/src/ft_get_map_dims.c
new file mode 100644
index 0000000..a26a891
--- /dev/null
+++ b/src/ft_get_map_dims.c
@@ -0,0 +1,48 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_get_map_dims.c                                  :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: rbousset <marvin@42.fr>                    +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   Created: 2020/02/14 17:28:47 by rbousset          #+#    #+#             */
+/*   Updated: 2020/02/14 17:28:47 by rbousset         ###   ########lyon.fr   */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include <libft.h>
+#include <cub3d.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdint.h>
+
+size_t
+	ft_get_map_h(char **map)
+{
+	size_t	i;
+
+	i = 0;
+	while (map[i])
+		i++;
+	return (i);
+}
+
+size_t
+	ft_get_map_w(char **map)
+{
+	size_t	i;
+	size_t	big;
+	size_t	tmp;
+
+	i = 0;
+	big = 0;
+	tmp = 0;
+	while (map[i])
+	{
+		tmp = ft_strlen(map[i]);
+		if (tmp > big)
+			big = tmp;
+		i++;
+	}
+	return (big);
+}
diff --git a/src/ft_init_map.c b/src/ft_init_map.c
index a6704b6..e2cfa21 100644
--- a/src/ft_init_map.c
+++ b/src/ft_init_map.c
@@ -42,6 +42,7 @@ int8_t
 	mlist->map[1] = 0;
 	mlist->map_w = 0;
 	mlist->map_h = 0;
+	mlist->mapl_len = 0;
 	mlist->x_step = 0;
 	mlist->y_step = 0;
 	mlist->line_chk = 0;
diff --git a/src/ft_parse_map.c b/src/ft_parse_map.c
index 256d131..0d54c6f 100644
--- a/src/ft_parse_map.c
+++ b/src/ft_parse_map.c
@@ -29,9 +29,11 @@ static void
 	while (ml->map[i])
 		i++;
 	j = 0;
-	while (ml->map[i - 1][j])
+	i -= 1;
+	while (ml->map[i][j])
 	{
-		if (ml->map[i - 1][j] != '1' && ml->map[i - 1][j] != '\0')
+		if (ml->map[i][j] != '1' && ml->map[i][j] != ' ' &&
+			ml->map[i][j] != '\0')
 			ft_map_error(FT_ERR_MAP_L_L, clist);
 		j++;
 	}
@@ -112,11 +114,11 @@ void
 	if (ft_get_map_core(fd, clist) < 0)
 		ft_map_error(clist->errmsg, clist);
 	ft_check_map_last_line(clist);
+	ft_print_map(&clist->mlist);
 	ft_get_player_spawn(&clist->plist, clist);
 	ft_get_nlvl_pos(&clist->mlist);
 	ft_check_missing(clist);
 	ft_set_minimap_scale(clist);
-	ft_print_map(&clist->mlist);
 	clist->currlvl += 1;
 	close(fd);
 }
-- 
cgit v1.2.3