diff options
| author | Dominik Kaiser | 2024-05-10 15:53:31 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-05-10 15:53:31 +0200 |
| commit | 69765e686473bbd920221eda728b2cb83a6e516d (patch) | |
| tree | c5cb3c2cc9e0c76a7c2fe36907a84f1048ecb834 | |
| parent | 18c61f3119e468e9a9418aef8aaeadcef090895c (diff) | |
| download | so_long-69765e686473bbd920221eda728b2cb83a6e516d.tar.gz so_long-69765e686473bbd920221eda728b2cb83a6e516d.zip | |
Add tilemap.c and read map size
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | include/so_long.h | 31 | ||||
| -rw-r--r-- | src/tilemap.c | 67 |
3 files changed, 96 insertions, 4 deletions
@@ -6,7 +6,7 @@ HEADERS = -Iinclude -Ilibft -IMLX42/include LIBS = -Llibft -lft -lm -LMLX42/build -lmlx42 -ldl -lglfw -pthread VPATH := src -SRC = main.c init.c loop.c input.c draw.c +SRC = main.c init.c loop.c input.c draw.c tilemap.c OBJ_DIR := obj OBJ := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o)) diff --git a/include/so_long.h b/include/so_long.h index d66e355..ce481ef 100644 --- a/include/so_long.h +++ b/include/so_long.h @@ -6,16 +6,28 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/05/08 14:14:02 by dkaiser #+# #+# */ -/* Updated: 2024/05/10 12:24:12 by dkaiser ### ########.fr */ +/* Updated: 2024/05/10 14:55:46 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef SO_LONG_H # define SO_LONG_H -# define PLAYER_MOVE_SPEED 250 # include "MLX42/MLX42.h" # include "libft.h" +# include "unistd.h" +# include "fcntl.h" + +# define PLAYER_MOVE_SPEED 250 + +enum e_tile +{ + EMPTY = '0', + WALL = '1', + COLLECTIBLE = 'C', + EXIT = 'E', + PLAYER_START = 'P' +}; enum e_direction { @@ -32,6 +44,12 @@ typedef struct s_vector double y; } t_vector; +typedef struct s_ivector +{ + int x; + int y; +} t_ivector; + typedef struct s_player { t_vector position; @@ -40,6 +58,13 @@ typedef struct s_player mlx_image_t *img; } t_player; +typedef struct s_tilemap +{ + t_ivector grid_size; + t_ivector tile_size; + char **tiles; +} t_tilemap; + typedef struct s_game { mlx_t *mlx; @@ -49,7 +74,7 @@ typedef struct s_game } t_game; int init(t_game *game); -void loop(void *game); +void loop(void *params); int draw(t_game *game); void on_key_input(mlx_key_data_t event, void *params); diff --git a/src/tilemap.c b/src/tilemap.c new file mode 100644 index 0000000..c0c0524 --- /dev/null +++ b/src/tilemap.c @@ -0,0 +1,67 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* tilemap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/10 14:47:01 by dkaiser #+# #+# */ +/* Updated: 2024/05/10 15:51:50 by dkaiser ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "get_next_line.h" +#include "so_long.h" + +static t_ivector get_map_size_from_file(int fd); +static int get_line_len(char *line); + +int load_map_from_file(t_tilemap *tilemap, char *filename) +{ + int fd; + + fd = open(filename, O_RDONLY); + if (fd < 0) + return (1); + tilemap->grid_size = get_map_size_from_file(fd); + close(fd); + if (tilemap->grid_size.x < 0 || tilemap->grid_size.y < 0) + return (1); + return (0); +} + +static t_ivector get_map_size_from_file(int fd) +{ + t_ivector result; + char *next_line; + + result.x = 0; + result.y = 0; + next_line = get_next_line(fd); + while (next_line) + { + if (!result.x) + result.x = get_line_len(next_line); + else if (result.x != get_line_len(next_line)) + { + free(next_line); + result.x = -1; + result.y = -1; + return (result); + } + result.y++; + free(next_line); + next_line = get_next_line(fd); + } + return (result); +} + +static int get_line_len(char *line) +{ + int len; + + len = 0; + while (line[len] && line[len] != '\n') + len++; + return (len); +} |
