42_so_long/src/room/object_snas.c
2024-04-08 17:18:27 +02:00

62 lines
2 KiB
C

/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* object_snas.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mcolonna <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/03/15 15:27:03 by mcolonna #+# #+# */
/* Updated: 2024/04/08 17:11:46 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)
{
t_point r;
r = character_loop(&((t_snas_data *)obj->data)->character, pos, snas_brain);
if (r.x || r.y)
g_env.moves++;
return (r);
}
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);
}