diff --git a/Makefile b/Makefile index 67f2544..54f8490 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ INCLUDES = includes/ CODE = main error env \ data_assets data_sprites \ display1 display2 display_utils sprite \ - room room_utils + room room_utils object LIBRARIES = mlx libtf LIBRARIES_FILES = libtf/libtf.a LIBRARIES_LINK = mlx diff --git a/includes/data_sprites.h b/includes/data_sprites.h index c80146d..dbeadd2 100644 --- a/includes/data_sprites.h +++ b/includes/data_sprites.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/11 15:56:31 by mcolonna #+# #+# */ -/* Updated: 2024/03/11 16:31:33 by mcolonna ### ########.fr */ +/* Updated: 2024/03/15 18:49:12 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,7 +15,7 @@ # include "data_assets.h" -# define NB_SPRITES 2 +# define NB_SPRITES 3 typedef struct s_spriteinfo { @@ -30,7 +30,8 @@ extern const t_spriteinfo g_spritesmap[NB_SPRITES]; typedef enum e_spriteid { CASE_WALL, - CASE_FLOOR + CASE_FLOOR, + SPR_SNAS_DOWN } t_spriteid; #endif diff --git a/includes/object.h b/includes/object.h new file mode 100644 index 0000000..841085f --- /dev/null +++ b/includes/object.h @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* object.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mcolonna +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/03/15 14:58:25 by mcolonna #+# #+# */ +/* Updated: 2024/03/15 20:06:45 by mcolonna ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef OBJECT_H +# define OBJECT_H + +# include "point.h" +# include "data_assets.h" +# include "libtf.h" +# include "display.h" +# include "sprite.h" + +typedef struct s_object t_object; + +typedef struct s_objecttype +{ + t_point (*loop)(t_object *, t_point pos); + void (*draw)(t_object *, int x, int y); +} t_objecttype; + +typedef struct s_object +{ + t_objecttype type; + void *data; +} t_object; + +typedef struct s_snas_data +{ + t_direction direction; + t_sprite spr; +} t_snas_data; + +typedef t_object (*t_object_init)(t_memclass); + +t_object snas_init(t_memclass mc); + +#endif diff --git a/includes/point.h b/includes/point.h new file mode 100644 index 0000000..7e4f83d --- /dev/null +++ b/includes/point.h @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* point.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mcolonna +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/03/15 15:05:03 by mcolonna #+# #+# */ +/* Updated: 2024/03/15 19:38:46 by mcolonna ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef POINT_H +# define POINT_H + +typedef struct s_point +{ + int x; + int y; +} t_point; + +/* +t_point point_init(int x, int y); +void point_addto(t_point *dest, t_point src); +*/ + +#endif diff --git a/includes/room.h b/includes/room.h index eb6fbb5..b9863ff 100644 --- a/includes/room.h +++ b/includes/room.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/07 23:00:45 by mcolonna #+# #+# */ -/* Updated: 2024/03/13 14:11:13 by mcolonna ### ########.fr */ +/* Updated: 2024/03/15 18:51:14 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,11 +15,7 @@ # include "sprite.h" # include "libtf.h" - -typedef struct s_object -{ - t_sprite spr; -} t_object; +# include "object.h" typedef struct s_room { @@ -32,9 +28,10 @@ typedef struct s_room typedef struct s_roomcase { - char c; - t_spriteid surface_spr; -} t_roomcase; + char c; + t_spriteid surface_spr; + t_object_init object; +} t_roomcase; t_room room_fromfile(t_const_string path); diff --git a/includes/sprite.h b/includes/sprite.h index 0143ddc..dbf9f8c 100644 --- a/includes/sprite.h +++ b/includes/sprite.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/07 22:13:20 by mcolonna #+# #+# */ -/* Updated: 2024/03/11 16:26:48 by mcolonna ### ########.fr */ +/* Updated: 2024/03/15 19:55:46 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/libtf/include/read_line_utils.h b/libtf/include/read_line_utils.h index 7bca919..5f4b140 100644 --- a/libtf/include/read_line_utils.h +++ b/libtf/include/read_line_utils.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/10/30 15:36:49 by mcolonna #+# #+# */ -/* Updated: 2024/02/23 14:17:46 by mcolonna ### ########.fr */ +/* Updated: 2024/03/25 14:21:52 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,9 +23,10 @@ typedef struct s_buf { - int size; - char str[BUFFER_SIZE]; -} t_buf; + t_memclass mc; + int size; + char str[BUFFER_SIZE]; +} t_buf; typedef struct s_string2 { diff --git a/libtf/src/read_line.c b/libtf/src/read_line.c index 9a69433..7be62c0 100644 --- a/libtf/src/read_line.c +++ b/libtf/src/read_line.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/10/30 15:39:50 by mcolonna #+# #+# */ -/* Updated: 2024/02/23 14:16:55 by mcolonna ### ########.fr */ +/* Updated: 2024/03/25 14:29:49 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,7 +65,7 @@ static void *free_and_return( { if (buf) { - mem_free(*buf); + mem_freeall((*buf)->mc); *buf = NULL; } if (string) diff --git a/libtf/src/read_line_utils.c b/libtf/src/read_line_utils.c index 37f73b6..f83972b 100644 --- a/libtf/src/read_line_utils.c +++ b/libtf/src/read_line_utils.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/11/06 14:28:19 by mcolonna #+# #+# */ -/* Updated: 2024/02/23 14:18:00 by mcolonna ### ########.fr */ +/* Updated: 2024/03/25 14:53:04 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,12 +15,14 @@ int create_empty_buf(t_buf **result) { - const t_errmc errmc = setget_errmc(NULL, NULL); + const t_errmc errmc = setget_errmc(NULL, NULL); + const t_memclass mc = mem_newclass(errmc.err); - *result = mem_alloc(errmc.err, errmc.mc, sizeof(t_buf)); + *result = mem_alloc(errmc.err, mc, sizeof(t_buf)); if (!*result) return (0); (*result)->size = 0; + (*result)->mc = mc; return (1); } diff --git a/room/room.ber b/room/room.ber index e87449e..7b2d1c6 100644 --- a/room/room.ber +++ b/room/room.ber @@ -1,5 +1,5 @@ 11111 -10011 +1P011 11111 10001 11111 diff --git a/src/data_sprites.c b/src/data_sprites.c index f00e0f5..f58b15a 100644 --- a/src/data_sprites.c +++ b/src/data_sprites.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/11 16:02:29 by mcolonna #+# #+# */ -/* Updated: 2024/03/11 16:37:05 by mcolonna ### ########.fr */ +/* Updated: 2024/03/15 15:31:48 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,5 +14,6 @@ const t_spriteinfo g_spritesmap[NB_SPRITES] = { {WALL_BORDER, 1, 50, 50}, -{FLOOR_1, 1, 50, 50} +{FLOOR_1, 1, 50, 50}, +{OBJECT_SNAS_DOWN, 1, 50, 50} }; diff --git a/src/object.c b/src/object.c new file mode 100644 index 0000000..30cdb31 --- /dev/null +++ b/src/object.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* object.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mcolonna +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */ +/* Updated: 2024/03/15 20:00:25 by mcolonna ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "object.h" +#include "error.h" +#include "sprite.h" + +static t_point snas_loop(t_object *obj, t_point pos) +{ + const t_point r = {0, 0}; + + (void)((void)obj, pos); + return (r); +} + +static void snas_draw(t_object *obj, int x, int y) +{ + sprite_draw(x, y, &((t_snas_data *)obj->data)->spr); +} + +t_object snas_init(t_memclass mc) +{ + static const t_objecttype type = {loop: snas_loop, draw: snas_draw}; + t_object r; + t_snas_data *data; + + r.type = type; + data = mem_alloc(err, mc, sizeof(t_snas_data)); + data->direction = DOWN; + data->spr = sprite_init(SPR_SNAS_DOWN); + r.data = data; + return (r); +} diff --git a/src/point.c b/src/point.c new file mode 100644 index 0000000..76b0daa --- /dev/null +++ b/src/point.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* point.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: mcolonna +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/03/15 15:24:37 by mcolonna #+# #+# */ +/* Updated: 2024/03/15 15:26:34 by mcolonna ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "point.h" + +t_point point_init(int x, int y) +{ + const t_point r = {x, y}; + + return (r); +} + +void point_addto(t_point *dest, t_point src) +{ + dest->x += src.x; + dest->y += src.y; +} diff --git a/src/room.c b/src/room.c index cd91fd0..113879f 100644 --- a/src/room.c +++ b/src/room.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/07 23:31:22 by mcolonna #+# #+# */ -/* Updated: 2024/03/13 16:37:06 by mcolonna ### ########.fr */ +/* Updated: 2024/03/25 14:42:55 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,9 +18,11 @@ #include "room_utils.h" static bool room_fromfile2( - int fd, t_memclass mc, t_const_string path, t_sprite **surface) + int fd, t_const_string path, int *i, t_room *room) { t_const_string line; + t_roomcase *roomcase; + const t_memclass mc = mem_subclass(err, g_env.mc); line = read_line(err_remember, mc, fd); if (err_get()) @@ -29,10 +31,19 @@ static bool room_fromfile2( return (false); while (*line && *line != '\n') { - **surface = sprite_init(getroomcase(path, *line)->surface_spr); + roomcase = getroomcase(path, *line); + room->surfaces[*i] = sprite_init(roomcase->surface_spr); + if (roomcase->object) + { + room->objects[*i] = mem_alloc(err, room->mc, sizeof(t_object)); + *(room->objects[*i]) = roomcase->object(room->mc); + } + else + room->objects[*i] = NULL; line++; - (*surface)++; + (*i)++; } + mem_freeall(mc); return (true); } @@ -40,18 +51,18 @@ t_room room_fromfile(t_const_string path) { t_room r; int fd; - t_sprite *surface; const t_memclass mc = mem_subclass(err, g_env.mc); + int i; room_getsize(mc, &r, path); r.mc = mem_subclass(err, g_env.mc); - r.surfaces = mem_alloc(err, r.mc, r.width * r.height * sizeof(t_sprite)); fd = open(path, O_RDONLY); if (fd == -1) err_perror(path); - surface = r.surfaces; - while (surface - r.surfaces < r.width * r.height - && room_fromfile2(fd, mc, path, &surface)) + r.surfaces = mem_alloc(err, r.mc, r.width * r.height * sizeof(t_sprite)); + r.objects = mem_alloc(err, r.mc, r.width * r.height * sizeof(t_object *)); + i = 0; + while (room_fromfile2(fd, path, &i, &r)) ; mem_freeall(mc); return (r); @@ -59,16 +70,26 @@ t_room room_fromfile(t_const_string path) void room_draw(t_room room) { - int x; - int y; + int x; + int y; + t_object *obj; y = -1; while (++y < room.height) { x = -1; while (++x < room.width) - { sprite_draw(x * 50, y * 50, room.surfaces + y * room.width + x); + } + y = -1; + while (++y < room.height) + { + x = -1; + while (++x < room.width) + { + obj = room.objects[y * room.width + x]; + if (obj) + obj->type.draw(obj, x * 50, y * 50); } } } diff --git a/src/room_utils.c b/src/room_utils.c index fd5130a..01e0c32 100644 --- a/src/room_utils.c +++ b/src/room_utils.c @@ -6,17 +6,19 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/13 16:26:28 by mcolonna #+# #+# */ -/* Updated: 2024/03/13 16:55:56 by mcolonna ### ########.fr */ +/* Updated: 2024/03/15 18:55:48 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ #include #include "room_utils.h" #include "error.h" +#include "object.h" static t_roomcase g_roomcases[] = { -{c: '0', surface_spr: CASE_FLOOR}, -{c: '1', surface_spr: CASE_WALL}, +{c: '0', surface_spr: CASE_FLOOR, object: NULL}, +{c: '1', surface_spr: CASE_WALL, object: NULL}, +{c: 'P', surface_spr: CASE_FLOOR, object: snas_init}, {c: '\0'} };