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))
/* 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
{
double y;
} t_vector;
+typedef struct s_ivector
+{
+ int x;
+ int y;
+} t_ivector;
+
typedef struct s_player
{
t_vector position;
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;
} 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);
--- /dev/null
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* 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);
+}