Files
PixelDefense/game/entity_map.h

64 lines
1.5 KiB
C

#ifndef PIXELDEFENSE_ENTITY_MAP_H
#define PIXELDEFENSE_ENTITY_MAP_H
#include <breeze.h>
#include <flecs.h>
#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