#include #include #include "vga.h" #include "map.h" #include "data.h" #include "entities.h" #include "effect.h" #define MAX_ENTITY 16 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->ox = e->x; e->oy = e->y; e->update(e); } } void entities_draw() { Rect dst = { 0, 0, 16, 16 }; Entity *e = entities; for (uint8_t i = 0; i < last; i++, e++) if (e->erase) { dst.x = e->ox; dst.y = e->oy + MAP_OFFS_Y; blit_copy(&dst); e->erase = 0; } e = entities; for (uint8_t i = 0; i < last; i++, e++) if (e->used) { dst.x = e->x; dst.y = e->y + MAP_OFFS_Y; blitrc(binary_sprites_start, &e->frames[e->dir * 4 + e->frame], &dst); e->erase = 1; } } void entities_warp_out_all() { Entity *e = entities; for (uint8_t i = 0; i < last; i++, e++) if (e->used) effect_out_init(e); }