feat: engine finished (i think)
This commit is contained in:
parent
8076487071
commit
3abc6cbfd6
15 changed files with 207 additions and 41 deletions
2
Makefile
2
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
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
|
|
46
includes/object.h
Normal file
46
includes/object.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* object.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
27
includes/point.h
Normal file
27
includes/point.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* point.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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
|
||||
{
|
||||
|
@ -34,6 +30,7 @@ typedef struct s_roomcase
|
|||
{
|
||||
char c;
|
||||
t_spriteid surface_spr;
|
||||
t_object_init object;
|
||||
} t_roomcase;
|
||||
|
||||
t_room room_fromfile(t_const_string path);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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,6 +23,7 @@
|
|||
|
||||
typedef struct s_buf
|
||||
{
|
||||
t_memclass mc;
|
||||
int size;
|
||||
char str[BUFFER_SIZE];
|
||||
} t_buf;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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)
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
@ -16,11 +16,13 @@
|
|||
int create_empty_buf(t_buf **result)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
11111
|
||||
10011
|
||||
1P011
|
||||
11111
|
||||
10001
|
||||
11111
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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}
|
||||
};
|
||||
|
|
42
src/object.c
Normal file
42
src/object.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* object.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
}
|
26
src/point.c
Normal file
26
src/point.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* point.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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;
|
||||
}
|
43
src/room.c
43
src/room.c
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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);
|
||||
line++;
|
||||
(*surface)++;
|
||||
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++;
|
||||
(*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);
|
||||
|
@ -61,15 +72,25 @@ void room_draw(t_room room)
|
|||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,17 +6,19 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* 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 <fcntl.h>
|
||||
#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'}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue