#ifndef PIXELDEFENSE_ENTITY_MAP_H #define PIXELDEFENSE_ENTITY_MAP_H #include #include #include "components.h" typedef struct EntityMapIndex { i32 minX, minY; i32 maxX, maxY; } EntityMapIndex; typedef struct EntityMapEntry { ecs_entity_t entity; i32 queryIdx; i32 entryIdx; EntityMapIndex index; } EntityMapEntry; typedef i32 EntityMapCell; typedef struct EntityMap { EntityMapEntry *entities; EntityMapCell *cells; i32 width; i32 height; i32 cellResolution; i32 cellDepth; i32 queryCount; } EntityMap; typedef struct EntityMapDesc { i32 maxWidth; i32 maxHeight; i32 cellResolution; i32 cellDepth; } EntityMapDesc; typedef struct EntityMapIter { EntityMap *entityMap; i32 queryIdx; EntityMapEntry entry; EntityMapIndex index; i32 x; i32 y; i32 cellIdx; } EntityMapIter; EntityMap entityMapCreate(const EntityMapDesc *desc); void entityMapDestroy(EntityMap *entityMap); EntityMapEntry entityMapInsert(EntityMap *entityMap, ecs_entity_t entity, Position pos, Size size); EntityMapEntry entityMapUpdate(EntityMap *entityMap, EntityMapEntry entry, Position pos, Size size); void entityMapRemove(EntityMap *entityMap, EntityMapEntry entry); void entityMapRemoveIdx(EntityMap *entityMap, i32 entryID); EntityMapIter entityMapQueryIter(EntityMap *entityMap, Position pos, Size size); bool entityMapQueryNext(EntityMapIter *it); #endif //PIXELDEFENSE_ENTITY_MAP_H