diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-01-24 17:57:20 +0100 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-01-24 17:57:20 +0100 |
commit | 6776a1f3491663c85480326e0d01f9a6c5455bbd (patch) | |
tree | 035435a20e933c43b192552a5b3f766fe55131e5 /src | |
parent | ft_split redone (diff) | |
download | 42-cub3d-6776a1f3491663c85480326e0d01f9a6c5455bbd.tar.gz 42-cub3d-6776a1f3491663c85480326e0d01f9a6c5455bbd.tar.bz2 42-cub3d-6776a1f3491663c85480326e0d01f9a6c5455bbd.tar.xz 42-cub3d-6776a1f3491663c85480326e0d01f9a6c5455bbd.tar.zst 42-cub3d-6776a1f3491663c85480326e0d01f9a6c5455bbd.zip |
Tons of changes
Diffstat (limited to '')
-rw-r--r-- | src/ft_drawsquare.c | 3 | ||||
-rw-r--r-- | src/ft_exit.c | 18 | ||||
-rw-r--r-- | src/ft_free_words.c | 15 | ||||
-rw-r--r-- | src/ft_get_res.c | 27 | ||||
-rw-r--r-- | src/ft_get_tex.c | 77 | ||||
-rw-r--r-- | src/ft_init_lists.c | 6 | ||||
-rw-r--r-- | src/ft_key_events.c | 7 | ||||
-rw-r--r-- | src/ft_map_error.c | 4 | ||||
-rw-r--r-- | src/ft_parse_map.c | 7 | ||||
-rw-r--r-- | src/main.c | 18 |
10 files changed, 138 insertions, 44 deletions
diff --git a/src/ft_drawsquare.c b/src/ft_drawsquare.c index b37dc77..78ebd8c 100644 --- a/src/ft_drawsquare.c +++ b/src/ft_drawsquare.c @@ -2,12 +2,11 @@ #include <cub3d.h> void -ft_drawsquare(t_win *wlist, t_cub *clist, int a, int b) +ft_drawsquare(t_win *wlist, int a, int b) { int x; int y; - (void)clist; x = a; y = b; while (x > a - 40) diff --git a/src/ft_exit.c b/src/ft_exit.c index 5a4ef73..165c3d9 100644 --- a/src/ft_exit.c +++ b/src/ft_exit.c @@ -1,13 +1,29 @@ #include <libft.h> +#include <cub3d.h> #include <stdlib.h> #include <inttypes.h> +static void +ft_free_lists(t_win *wlist) +{ + ft_memdel(wlist->clist->no_tex_path); + ft_memdel(wlist->clist->so_tex_path); + ft_memdel(wlist->clist->ea_tex_path); + ft_memdel(wlist->clist->we_tex_path); + ft_memdel(wlist->clist->sprite_path); + ft_memdel(wlist->clist); + ft_memdel(wlist->winptr); + ft_memdel(wlist->wlx); + ft_memdel(wlist); +} + int -ft_exit(uint8_t exit_code) +ft_exit(uint8_t exit_code, t_win *wlist) { ft_printf("Exiting program\n"); if (exit_code < 0 || exit_code > 0) ft_printf("Exit code: %hhu\n", exit_code); + ft_free_lists(wlist); exit(exit_code); return (0); } diff --git a/src/ft_free_words.c b/src/ft_free_words.c new file mode 100644 index 0000000..3231791 --- /dev/null +++ b/src/ft_free_words.c @@ -0,0 +1,15 @@ +#include <libft.h> + +void +ft_free_words(char **words) +{ + size_t i; + + i = 0; + while (words[i]) + { + ft_memdel(words[i]); + i++; + } + ft_memdel(words); +} diff --git a/src/ft_get_res.c b/src/ft_get_res.c index 92e0890..79df8a3 100644 --- a/src/ft_get_res.c +++ b/src/ft_get_res.c @@ -2,21 +2,7 @@ #include <cub3d.h> static void -ft_free_words(char **words) -{ - size_t i; - - i = 0; - while (words[i]) - { - ft_memdel(words[i]); - i++; - } - ft_memdel(words); -} - -static void -ft_checkdigit(const char *word) +ft_checkdigit(const char *word, t_win *wlist) { size_t i; @@ -24,7 +10,7 @@ ft_checkdigit(const char *word) while (ft_isdigit(word[i])) i++; if (i != ft_strlen(word)) - ft_map_error(1); + ft_map_error(1, wlist); } int @@ -33,15 +19,14 @@ ft_get_res(int fd, t_win *wlist) char *line; char **words; - (void)wlist; get_next_line(fd, &line); if (!(words = ft_split(line, ' '))) - return (ft_exit(5)); + return (ft_exit(5, wlist)); if (!(*words) || ft_strcmp(*words, "R") || !(*(words + 1)) || !(*(words + 2)) || (*(words + 3))) - ft_map_error(1); - ft_checkdigit(words[1]); - ft_checkdigit(words[2]); + return (ft_map_error(1, wlist)); + ft_checkdigit(words[1], wlist); + ft_checkdigit(words[2], wlist); wlist->x_size = ft_atoi(words[1]); wlist->y_size = ft_atoi(words[2]); ft_free_words(words); diff --git a/src/ft_get_tex.c b/src/ft_get_tex.c index d38e494..5bd7a4f 100644 --- a/src/ft_get_tex.c +++ b/src/ft_get_tex.c @@ -1,7 +1,82 @@ #include <libft.h> #include <cub3d.h> +#include <stdlib.h> + +static int +ft_get_tex_no(int fd, t_win *wlist) +{ + char *line; + char **words; + size_t len; + + get_next_line(fd, &line); + if (!(words = ft_split(line, ' '))) + return (ft_exit(5, wlist)); + if (!(*words) || ft_strcmp(*words, "NO") + || !(*(words + 1)) || (*(words + 2))) + return (ft_map_error(2, wlist)); + ft_memdel(wlist->clist->no_tex_path); + len = ft_strlen(*(words + 1)); + if (!(wlist->clist->no_tex_path = (char*)malloc((len + 1) * sizeof(char)))) + return (-1); + ft_strlcpy(wlist->clist->no_tex_path, *(words + 1), len + 1); + ft_free_words(words); + ft_memdel(line); + return (0); +} + +static int +ft_get_tex_so(int fd, t_win *wlist) +{ + char *line; + char **words; + size_t len; + + get_next_line(fd, &line); + if (!(words = ft_split(line, ' '))) + return (ft_exit(5, wlist)); + if (!(*words) || ft_strcmp(*words, "SO") + || !(*(words + 1)) || (*(words + 2))) + return (ft_map_error(3, wlist)); + ft_memdel(wlist->clist->so_tex_path); + len = ft_strlen(*(words + 1)); + if (!(wlist->clist->so_tex_path = (char*)malloc((len + 1) * sizeof(char)))) + return (-1); + ft_strlcpy(wlist->clist->so_tex_path, *(words + 1), len + 1); + ft_free_words(words); + ft_memdel(line); + return (0); +} + +static int +ft_get_tex_we(int fd, t_win *wlist) +{ + char *line; + char **words; + size_t len; + + get_next_line(fd, &line); + if (!(words = ft_split(line, ' '))) + return (ft_exit(5, wlist)); + if (!(*words) || ft_strcmp(*words, "WE") + || !(*(words + 1)) || (*(words + 2))) + return (ft_map_error(4, wlist)); + ft_memdel(wlist->clist->we_tex_path); + len = ft_strlen(*(words + 1)); + if (!(wlist->clist->we_tex_path = (char*)malloc((len + 1) * sizeof(char)))) + return (-1); + ft_strlcpy(wlist->clist->we_tex_path, *(words + 1), len + 1); + ft_free_words(words); + ft_memdel(line); + return (0); +} int -ft_get_tex(int fd, t_cub *clist) +ft_get_tex(int fd, t_win *wlist) { + if (ft_get_tex_no(fd, wlist) < 0 || + ft_get_tex_so(fd, wlist) < 0 || + ft_get_tex_we(fd, wlist) < 0) + return (-1); + return (0); } diff --git a/src/ft_init_lists.c b/src/ft_init_lists.c index 126843c..4aa2d81 100644 --- a/src/ft_init_lists.c +++ b/src/ft_init_lists.c @@ -21,5 +21,11 @@ t_cub if (!(clist = (t_cub*)malloc(sizeof(t_cub)))) return (NULL); + if (!(clist->no_tex_path = (char*)ft_calloc(1, 1)) || + !(clist->so_tex_path = (char*)ft_calloc(1, 1)) || + !(clist->ea_tex_path = (char*)ft_calloc(1, 1)) || + !(clist->we_tex_path = (char*)ft_calloc(1, 1)) || + !(clist->sprite_path = (char*)ft_calloc(1, 1))) + return (NULL); return (clist); } diff --git a/src/ft_key_events.c b/src/ft_key_events.c index 74d6346..8c8167a 100644 --- a/src/ft_key_events.c +++ b/src/ft_key_events.c @@ -46,11 +46,6 @@ ft_key_event(int keycode, void *param) (keycode == FT_D_KEY) ? (keycode = 3) : 0; (keycode <= 3) ? ((*fun_ptr[keycode])()) : 0; if (keycode == FT_ESC_KEY) - { - ft_memdel(((t_win*)param)->winptr); - ft_memdel(((t_win*)param)->wlx); - ft_memdel((t_win*)param); - ft_exit(0); - } + ft_exit(0, ((t_win*)param)); return (0); } diff --git a/src/ft_map_error.c b/src/ft_map_error.c index dae08e9..6af5438 100644 --- a/src/ft_map_error.c +++ b/src/ft_map_error.c @@ -3,9 +3,9 @@ #include <unistd.h> int -ft_map_error(unsigned int line) +ft_map_error(unsigned int line, t_win *wlist) { ft_dprintf(STDERR_FILENO, "Error\n"); ft_dprintf(STDERR_FILENO, "\033[1;31mMap error: line %d\033[0m\n", line); - return (ft_exit(1)); + return (ft_exit(1, wlist)); } diff --git a/src/ft_parse_map.c b/src/ft_parse_map.c index 60726a2..f4eb4f0 100644 --- a/src/ft_parse_map.c +++ b/src/ft_parse_map.c @@ -9,17 +9,18 @@ */ void -ft_parse_map(t_win *wlist, t_cub *clist, const char *map_path) +ft_parse_map(t_win *wlist, const char *map_path) { int fd; - (void)clist; fd = open(map_path, O_RDONLY); if (fd < 0) { ft_dprintf(STDERR_FILENO, "Error\n"); ft_dprintf(STDERR_FILENO, "\033[31;1mNo map\033[0m\n"); - ft_exit(2); + ft_exit(2, wlist); } ft_get_res(fd, wlist); + if (ft_get_tex(fd, wlist) < 0) + return ; } @@ -7,17 +7,19 @@ int main(void) { t_win *wlist; - t_cub *clist; - if (!(wlist = ft_init_win()) - || !(clist = ft_init_cub())) - return (ft_exit(4)); - ft_parse_map(wlist, clist, "map/map_one.cub"); + if (!(wlist = ft_init_win())) + return (1); + if (!(wlist->clist = ft_init_cub())) + { + ft_memdel(wlist); + return (1); + } + ft_parse_map(wlist, "map/map_one.cub"); if (ft_init_winlx(wlist) < 0) - return (ft_exit(3)); + return (ft_exit(3, wlist)); mlx_key_hook(wlist->winptr, ft_key_event, wlist); - ft_drawsquare(wlist, clist, 80, 80); + ft_drawsquare(wlist, 80, 80); mlx_loop(wlist->wlx); - ft_memdel(clist); return (0); } |