RogueLife/src/enemies.c

54 lines
1.2 KiB
C
Raw Normal View History

2021-06-15 17:27:30 +02:00
#include "enemies.h"
#include <stdlib.h>
static enemy_t const slime = {
.name = "Slime",
.hitbox = (frect_t){ -FIX(3)/16, FIX(4)/16, -FIX(2)/16, FIX(3)/16 },
.sprite = (frect_t){ -FIX(5)/16, FIX(5)/16, -FIX(4)/16, FIX(3)/16 },
.anim_idle = {
anim_slime_idle_down,
anim_slime_idle_down,
anim_slime_idle_down,
anim_slime_idle_down,
},
.movement_params = {
.max_speed = FIX(1),
.propulsion = FIX(12),
},
};
static enemy_t const * const enemies[] = {
[ENEMY_SLIME] = &slime,
};
entity_t *enemy_spawn(int enemy_id)
{
if(enemy_id < 0 || (size_t)enemy_id >= sizeof enemies / sizeof *enemies)
return NULL;
entity_t *e = malloc(sizeof *e);
if(!e) return NULL;
enemy_t const *data = enemies[enemy_id];
/* These will probably be overridden by the caller */
e->movement.x = 0;
e->movement.y = 0;
e->movement.vx = 0;
e->movement.vy = 0;
e->movement.facing = DOWN;
e->movement.dash = 0;
e->movement.dash_facing = DOWN;
e->movement_params = &data->movement_params;
entity_set_anim(e, (anim_frame_t **)data->anim_idle);
e->hitbox = data->hitbox;
e->sprite = data->sprite;
e->identity = enemy_id;
return e;
}