diff --git a/dev/TODO.md b/dev/TODO.md index 9c27915..2b61a4b 100644 --- a/dev/TODO.md +++ b/dev/TODO.md @@ -6,4 +6,3 @@ - rectangular - walls all around - a possible way to exit -- Program takes the map file diff --git a/includes/main/main.h b/includes/main/main.h index 0842b28..3c252dc 100644 --- a/includes/main/main.h +++ b/includes/main/main.h @@ -6,13 +6,13 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/02 13:39:54 by mcolonna #+# #+# */ -/* Updated: 2024/04/02 14:39:40 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:45:55 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef MAIN_H # define MAIN_H -int main(void); +int main(int argc, t_const_string *argv); #endif diff --git a/includes/room/object.h b/includes/room/object.h index 08f326a..065bd30 100644 --- a/includes/room/object.h +++ b/includes/room/object.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/15 14:58:25 by mcolonna #+# #+# */ -/* Updated: 2024/04/08 15:35:33 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:34:13 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,8 +16,11 @@ typedef struct s_object t_object; typedef struct s_character t_character; +typedef t_object (*t_object_init)(t_memclass); + typedef struct s_objecttype { + t_object_init init; t_point (*loop)(t_object *, t_point pos); void (*draw)(t_object *, int x, int y); // Called when a character want to walk through this object. @@ -32,6 +35,4 @@ typedef struct s_object void *data; } t_object; -typedef t_object (*t_object_init)(t_memclass); - #endif diff --git a/includes/room/room.h b/includes/room/room.h index c70a0ad..8d05fb2 100644 --- a/includes/room/room.h +++ b/includes/room/room.h @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/07 23:00:45 by mcolonna #+# #+# */ -/* Updated: 2024/04/08 15:17:12 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:22:51 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,7 +23,7 @@ typedef struct s_room t_memclass mc; } t_room; -t_room room_fromfile(t_const_string path); +void room_init(t_const_string path); void room_loop(t_room room); diff --git a/src/main/main.c b/src/main/main.c index 5deaa49..805c706 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/02/26 15:28:34 by mcolonna #+# #+# */ -/* Updated: 2024/04/09 14:16:56 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:46:08 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -39,26 +39,24 @@ int loop_hook(void) return (0); } -int main(void) +int main(int argc, t_const_string *argv) { - g_env.max_ketchup = 0; - g_env.moves = 0; + if (argc != 2) + error_str("so_long", "takes 1 argument"); + g_env.mc = mem_newclass(error_err); g_env.mlx = mlx_init(); if (!g_env.mlx) error_err("mlx_init() failed"); - g_env.mc = mem_newclass(error_err); + mlx_do_key_autorepeatoff(g_env.mlx); display_init(); g_env.win = mlx_new_window(g_env.mlx, WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE); if (!g_env.win) error_err("mlx_new_window() failed"); - g_env.room = room_fromfile("room/room.ber"); - g_env.ketchup = 0; - room_draw(g_env.room); + room_init(argv[1]); mlx_expose_hook(g_env.win, expose_hook, NULL); mlx_hook(g_env.win, DestroyNotify, StructureNotifyMask, close_hook, NULL); mlx_loop_hook(g_env.mlx, loop_hook, NULL); - mlx_do_key_autorepeatoff(g_env.mlx); mlx_hook(g_env.win, KeyPress, KeyPressMask, key_press_hook, NULL); mlx_hook(g_env.win, KeyRelease, KeyReleaseMask, key_release_hook, NULL); mlx_loop(g_env.mlx); diff --git a/src/room/object_exit.c b/src/room/object_exit.c index 8c6ae34..44251b3 100644 --- a/src/room/object_exit.c +++ b/src/room/object_exit.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/08 15:01:16 by mcolonna #+# #+# */ -/* Updated: 2024/04/08 15:36:22 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:35:20 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,7 +47,8 @@ static bool exit_walk_through( t_object exit_init(t_memclass mc) { static const t_objecttype type - = {loop: exit_loop, draw: exit_draw, walk_through: exit_walk_through}; + = {init: exit_init, loop: exit_loop, draw: exit_draw, + walk_through: exit_walk_through}; t_object r; t_exit_data *data; diff --git a/src/room/object_ketchup.c b/src/room/object_ketchup.c index f287478..670f7a8 100644 --- a/src/room/object_ketchup.c +++ b/src/room/object_ketchup.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */ -/* Updated: 2024/04/08 15:36:10 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:35:36 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -37,7 +37,7 @@ static bool ketchup_walk_through( t_object ketchup_init(t_memclass mc) { static const t_objecttype type - = {loop: ketchup_loop, draw: ketchup_draw, + = {init: ketchup_init, loop: ketchup_loop, draw: ketchup_draw, walk_through: ketchup_walk_through}; t_object r; t_wall_data *data; @@ -46,6 +46,5 @@ t_object ketchup_init(t_memclass mc) data = mem_alloc(error_err, mc, sizeof(t_wall_data)); data->spr = sprite_init(SPR_KETCHUP); r.data = data; - g_env.max_ketchup++; return (r); } diff --git a/src/room/object_snas.c b/src/room/object_snas.c index 06aebc9..a354ea6 100644 --- a/src/room/object_snas.c +++ b/src/room/object_snas.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */ -/* Updated: 2024/04/08 17:11:46 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:35:48 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,7 +43,7 @@ static void snas_draw(t_object *obj, int x, int y) t_object snas_init(t_memclass mc) { static const t_objecttype type - = {loop: snas_loop, draw: snas_draw, walk_through: NULL}; + = {init: snas_init, loop: snas_loop, draw: snas_draw, walk_through: NULL}; static const t_character_sprites sprites = { still: SPR_SNAS, walk_left: SPR_SNAS_WALK_LEFT, diff --git a/src/room/object_wall.c b/src/room/object_wall.c index 5d35816..537d084 100644 --- a/src/room/object_wall.c +++ b/src/room/object_wall.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */ -/* Updated: 2024/04/03 15:17:07 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:36:04 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,7 +27,7 @@ static void wall_draw(t_object *obj, int x, int y) t_object wall_init(t_memclass mc) { static const t_objecttype type - = {loop: wall_loop, draw: wall_draw, walk_through: NULL}; + = {init: wall_init, loop: wall_loop, draw: wall_draw, walk_through: NULL}; t_object r; t_wall_data *data; diff --git a/src/room/room1.c b/src/room/room1.c index 05c4d69..e91aa04 100644 --- a/src/room/room1.c +++ b/src/room/room1.c @@ -6,7 +6,7 @@ /* By: mcolonna +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/07 23:31:22 by mcolonna #+# #+# */ -/* Updated: 2024/04/08 15:13:16 by mcolonna ### ########.fr */ +/* Updated: 2024/04/09 14:40:32 by mcolonna ### ########.fr */ /* */ /* ************************************************************************** */ @@ -43,7 +43,7 @@ static bool room_fromfile2( return (true); } -t_room room_fromfile(t_const_string path) +static t_room room_fromfile(t_const_string path) { t_room r; int fd; @@ -72,6 +72,20 @@ t_room room_fromfile(t_const_string path) return (r); } +void room_init(t_const_string path) +{ + int i; + + g_env.room = room_fromfile(path); + g_env.moves = 0; + g_env.ketchup = 0; + g_env.max_ketchup = 0; + i = -1; + while (++i < g_env.room.width * g_env.room.height) + if (g_env.room.objects[i] && g_env.room.objects[i]->type.init == ketchup_init) + g_env.max_ketchup++; +} + void room_draw(t_room room) { int x;