feat: add some ketchup *
also fix the 4th ketchup still image
This commit is contained in:
parent
a7deecf072
commit
ea59cdd8a6
22 changed files with 733 additions and 556 deletions
|
|
@ -6,20 +6,22 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/11 16:02:29 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 17:37:34 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 16:05:09 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
const t_spritemeta g_spritesmap[NB_SPRITES] = {
|
||||
{WALL_BORDER, 1, 50, 50, ANIMATION},
|
||||
{FLOOR_1, 1, 50, 50, ANIMATION},
|
||||
{FLOOR_2, 1, 50, 50, ANIMATION},
|
||||
{OBJECT_SNAS, 0, 50, 50, CHARACTER_STILL},
|
||||
{OBJECT_SNAS_DOWN, 1, 50, 50, ANIMATION},
|
||||
{OBJECT_SNAS_UP, 1, 50, 50, ANIMATION},
|
||||
{OBJECT_SNAS_LEFT, 1, 50, 50, ANIMATION},
|
||||
{OBJECT_SNAS_RIGHT, 1, 50, 50, ANIMATION},
|
||||
{WALL_INNER, 1, 50, 50, ANIMATION},
|
||||
{WALL_BORDER, 50, 50, ANIMATION, 1, 1},
|
||||
{FLOOR_1, 50, 50, ANIMATION, 1, 1},
|
||||
{FLOOR_2, 50, 50, ANIMATION, 1, 1},
|
||||
{OBJECT_SNAS, 50, 50, CHARACTER_STILL, 0, 0},
|
||||
{OBJECT_SNAS_DOWN, 50, 50, ANIMATION, 1, 1},
|
||||
{OBJECT_SNAS_UP, 50, 50, ANIMATION, 1, 1},
|
||||
{OBJECT_SNAS_LEFT, 50, 50, ANIMATION, 1, 1},
|
||||
{OBJECT_SNAS_RIGHT, 50, 50, ANIMATION, 1, 1},
|
||||
{WALL_INNER, 50, 50, ANIMATION, 1, 1},
|
||||
{OBJECT_KETCHUP_STILL_1, 50, 50, ANIMATION, 4, 4},
|
||||
{OBJECT_KETCHUP_FADE_1, 50, 50, ANIMATION_ONCE, 3, 1},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/07 22:28:52 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 18:02:35 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 15:56:09 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -21,17 +21,26 @@ t_sprite sprite_init(t_spritesmap_id id)
|
|||
return (r);
|
||||
}
|
||||
|
||||
void sprite_draw(int x, int y, t_sprite *spr)
|
||||
bool sprite_draw(int x, int y, t_sprite *spr)
|
||||
{
|
||||
display_draw(
|
||||
x - spr->meta->origin_x, y - spr->meta->origin_y,
|
||||
spr->meta->first_frame + spr->index);
|
||||
if (spr->meta->type == ANIMATION)
|
||||
if (spr->meta->type == ANIMATION || spr->meta->type == ANIMATION_ONCE)
|
||||
{
|
||||
display_draw(
|
||||
x - spr->meta->origin_x, y - spr->meta->origin_y,
|
||||
spr->meta->first_frame + spr->index / spr->meta->delay_frame);
|
||||
spr->index++;
|
||||
if (spr->index >= spr->meta->nb_frames)
|
||||
if (spr->index >= spr->meta->nb_frames * spr->meta->delay_frame)
|
||||
{
|
||||
if (spr->meta->type == ANIMATION_ONCE)
|
||||
return (false);
|
||||
spr->index = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
display_draw(
|
||||
x - spr->meta->origin_x, y - spr->meta->origin_y,
|
||||
spr->meta->first_frame + spr->index);
|
||||
return (true);
|
||||
}
|
||||
|
||||
void sprite_character_set_direction(t_sprite *spr, t_direction value)
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/02/26 15:28:34 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 18:04:18 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 16:08:07 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -52,6 +52,7 @@ int main(void)
|
|||
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);
|
||||
mlx_expose_hook(g_env.win, expose_hook, NULL);
|
||||
mlx_hook(g_env.win, DestroyNotify, StructureNotifyMask, close_hook, NULL);
|
||||
|
|
|
|||
49
src/room/object_ketchup.c
Normal file
49
src/room/object_ketchup.c
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* object_ketchup.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/03 16:10:39 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
static t_point ketchup_loop(t_object *obj, t_point pos)
|
||||
{
|
||||
(void)obj;
|
||||
(void)pos;
|
||||
return (point_init(0, 0));
|
||||
}
|
||||
|
||||
static void ketchup_draw(t_object *obj, int x, int y)
|
||||
{
|
||||
sprite_draw(x, y, &((t_wall_data *)obj->data)->spr);
|
||||
}
|
||||
|
||||
static bool ketchup_walk_through(t_character *character, t_point pos)
|
||||
{
|
||||
(void)character;
|
||||
g_env.ketchup++;
|
||||
tf_printf("Ketchup level: %i\n", g_env.ketchup);
|
||||
visual_addtoroom(SPR_KETCHUP_FADE, pos);
|
||||
return (true);
|
||||
}
|
||||
|
||||
t_object ketchup_init(t_memclass mc)
|
||||
{
|
||||
static const t_objecttype type
|
||||
= {loop: ketchup_loop, draw: ketchup_draw,
|
||||
walk_through: ketchup_walk_through};
|
||||
t_object r;
|
||||
t_wall_data *data;
|
||||
|
||||
r.type = type;
|
||||
data = mem_alloc(error_err, mc, sizeof(t_wall_data));
|
||||
data->spr = sprite_init(SPR_KETCHUP);
|
||||
r.data = data;
|
||||
return (r);
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 18:02:48 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 15:16:56 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -39,7 +39,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};
|
||||
= {loop: snas_loop, draw: snas_draw, walk_through: NULL};
|
||||
static const t_character_sprites sprites = {
|
||||
still: SPR_SNAS,
|
||||
walk_left: SPR_SNAS_LEFT,
|
||||
|
|
@ -54,6 +54,5 @@ t_object snas_init(t_memclass mc)
|
|||
data = mem_alloc(error_err, mc, sizeof(t_snas_data));
|
||||
data->character = character_init((t_character_sprites *)&sprites);
|
||||
r.data = data;
|
||||
r.solid = true;
|
||||
return (r);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 18:02:25 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 15:17:07 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};
|
||||
= {loop: wall_loop, draw: wall_draw, walk_through: NULL};
|
||||
t_object r;
|
||||
t_wall_data *data;
|
||||
|
||||
|
|
@ -35,6 +35,5 @@ t_object wall_init(t_memclass mc)
|
|||
data = mem_alloc(error_err, mc, sizeof(t_wall_data));
|
||||
data->spr = sprite_init(SPR_WALL);
|
||||
r.data = data;
|
||||
r.solid = true;
|
||||
return (r);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/07 23:31:22 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 18:28:28 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 15:43:44 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -59,6 +59,11 @@ t_room room_fromfile(t_const_string path)
|
|||
* sizeof(t_sprite));
|
||||
r.objects = mem_alloc(error_err, r.mc, r.width * r.height
|
||||
* sizeof(t_object *));
|
||||
r.visuals = mem_alloc(error_err, r.mc, r.width * r.height
|
||||
* sizeof(t_visual *));
|
||||
i = -1;
|
||||
while (++i < r.width * r.height)
|
||||
r.visuals[i] = NULL;
|
||||
i = 0;
|
||||
while (room_fromfile2(fd, path, &i, &r))
|
||||
;
|
||||
|
|
@ -89,6 +94,7 @@ void room_draw(t_room room)
|
|||
obj = room.objects[y * room.width + x];
|
||||
if (obj)
|
||||
obj->type.draw(obj, x * 50, y * 50);
|
||||
visual_loop(&room.visuals[y * room.width + x], x * 50, y * 50);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/07 23:31:22 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 17:44:12 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 16:10:23 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -20,10 +20,12 @@ t_object *room_getobjectfaced(
|
|||
return (room.objects[pos.y * room.width + pos.x]);
|
||||
}
|
||||
|
||||
// if this returns true, then character *must* walk forward.
|
||||
bool room_canwalk(t_room room, t_character *character, t_point pos)
|
||||
{
|
||||
t_point after;
|
||||
t_object *obj;
|
||||
bool r;
|
||||
|
||||
after = pos;
|
||||
point_addto(&after, point_fromdirection(character->direction));
|
||||
|
|
@ -31,5 +33,10 @@ bool room_canwalk(t_room room, t_character *character, t_point pos)
|
|||
|| after.x <= 0 || after.x >= room.width - 1)
|
||||
return (false);
|
||||
obj = room_getobjectfaced(room, character, pos);
|
||||
return (!obj || !obj->solid);
|
||||
r = (!obj || (
|
||||
obj->type.walk_through
|
||||
&& obj->type.walk_through(character, after)));
|
||||
if (r)
|
||||
mem_free(obj);
|
||||
return (r);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/13 16:26:28 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/02 17:58:59 by mcolonna ### ########.fr */
|
||||
/* Updated: 2024/04/03 13:35:35 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
|
@ -17,6 +17,7 @@ static t_roomcase g_roomcases[] = {
|
|||
{c: '0', object: NULL},
|
||||
{c: '1', object: wall_init},
|
||||
{c: 'P', object: snas_init},
|
||||
{c: 'K', object: ketchup_init},
|
||||
{c: '\0'}
|
||||
};
|
||||
|
||||
|
|
|
|||
35
src/room/visual.c
Normal file
35
src/room/visual.c
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* visual.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/04/03 15:35:28 by mcolonna #+# #+# */
|
||||
/* Updated: 2024/04/03 16:01:04 by mcolonna ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
void visual_loop(t_visual **visual, int x, int y)
|
||||
{
|
||||
if (!(*visual))
|
||||
return ;
|
||||
if (!sprite_draw(x, y, &(*visual)->spr))
|
||||
{
|
||||
mem_free(*visual);
|
||||
*visual = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void visual_addtoroom(t_spritesmap_id sprid, t_point pos)
|
||||
{
|
||||
t_visual *visual;
|
||||
t_sprite spr;
|
||||
|
||||
visual = mem_alloc(error_err, g_env.room.mc, sizeof(t_visual));
|
||||
spr = sprite_init(sprid);
|
||||
visual->spr = spr;
|
||||
g_env.room.visuals[pos.y * g_env.room.width + pos.x] = visual;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue