42_so_long/src/room/object_snas.c
mcolonna 6ad613d4bb feat: add walk animations *
also fix walk animation displaying
2024-04-05 19:47:59 +02:00

58 lines
2 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* object_snas.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */
/* Updated: 2024/04/04 16:08:52 by mcolonna ### ########.fr */
/* */
/* ************************************************************************** */
#include "includes.h"
static t_direction snas_brain(void)
{
if (g_env.input[UP] && !g_env.input[DOWN])
return (UP);
if (g_env.input[DOWN] && !g_env.input[UP])
return (DOWN);
if (g_env.input[LEFT] && !g_env.input[RIGHT])
return (LEFT);
if (g_env.input[RIGHT] && !g_env.input[LEFT])
return (RIGHT);
return (NO_DIRECTION);
}
static t_point snas_loop(t_object *obj, t_point pos)
{
return (character_loop(
&((t_snas_data *)obj->data)->character, pos, snas_brain));
}
static void snas_draw(t_object *obj, int x, int y)
{
return (character_draw(&((t_snas_data *)obj->data)->character, x, y));
}
t_object snas_init(t_memclass mc)
{
static const t_objecttype type
= {loop: snas_loop, draw: snas_draw, walk_through: NULL};
static const t_character_sprites sprites = {
still: SPR_SNAS,
walk_left: SPR_SNAS_WALK_LEFT,
walk_right: SPR_SNAS_WALK_RIGHT,
walk_up: SPR_SNAS_WALK_UP,
walk_down: SPR_SNAS_WALK_DOWN,
};
t_object r;
t_snas_data *data;
r.type = type;
data = mem_alloc(error_err, mc, sizeof(t_snas_data));
data->character = character_init((t_character_sprites *)&sprites);
r.data = data;
return (r);
}