#include #include #include "vga.h" #include "map.h" #include "data.h" #include "entities.h" #define MAX_ENTITY 32 static Entity entities[MAX_ENTITY]; static uint8_t last; void entities_init() { memset(entities, 0, sizeof(Entity) * MAX_ENTITY); last = 0; } Entity *entities_new() { for (uint8_t i = 0; i < MAX_ENTITY; i++) { if (entities[i].used == 0) { memset(&entities[i], 0, sizeof(Entity)); entities[i].used = 1; if (i >= last) last = i + 1; return &entities[i]; } } return NULL; } void entities_update() { Entity *e = entities; for (uint8_t i = 0; i < last; i++, e++) if (e->used) e->update(e); } void entities_erase() { Entity *e = entities + last - 1; for (uint8_t i = 0; i < last; i++, e--) if (e->used) { Rect dst = { e->x, e->y + MAP_OFFS_Y, 16, 16 }; blit(e->bg, &dst); } } void entities_draw() { Entity *e = entities; for (uint8_t i = 0; i < last; i++, e++) if (e->used) { Rect dst = { e->x, e->y + MAP_OFFS_Y, 16, 16 }; read_buffer(e->bg, &dst); blitrc(binary_sprites_start, &e->frames[e->dir * 4 + e->frame], &dst); } }