Add update method to entity map

This commit is contained in:
2023-11-15 19:11:39 +01:00
parent 4c37622240
commit 1ceacd2e62
3 changed files with 26 additions and 7 deletions

View File

@@ -81,7 +81,7 @@ EntityMapEntry entityMapInsert(EntityMap *entityMap, ecs_entity_t entity, Positi
entry.index = mapIndex;
i32 entryIdx = bzArraySize(entityMap->entities);
entry.entryID = entryIdx;
entry.entryIdx = entryIdx;
bzArrayPush(entityMap->entities, entry);
bool wasInserted = true;
@@ -90,6 +90,7 @@ EntityMapEntry entityMapInsert(EntityMap *entityMap, ecs_entity_t entity, Positi
for (i32 x = mapIndex.minX; x <= mapIndex.maxX; x++) {
wasInserted &= insertMapEntry(entityMap, entryIdx, x, y);
if (!wasInserted) {
entityMapRemoveIdx(entityMap, entryIdx);
return (EntityMapEntry) {
.entity = 0,
};
@@ -99,10 +100,27 @@ EntityMapEntry entityMapInsert(EntityMap *entityMap, ecs_entity_t entity, Positi
return entry;
}
void entityMapRemove(EntityMap *entityMap, EntityMapEntry entry) {
entityMapRemoveID(entityMap, entry.entryID);
EntityMapEntry entityMapUpdate(EntityMap *entityMap, EntityMapEntry entry, Position pos, Size size) {
EntityMapEntry check = bzArrayGet(entityMap->entities, entry.entity);
BZ_ASSERT(check.entity == entry.entity);
EntityMapIndex mapIndex = calculateMapIndex(entityMap, pos, size);
if (entry.index.minX == mapIndex.minX &&
entry.index.minY == mapIndex.minY &&
entry.index.maxX == mapIndex.maxX &&
entry.index.maxY == mapIndex.maxY) {
return entry;
}
// TODO: Has room for optimization
entityMapRemoveIdx(entityMap, entry.entryIdx);
entityMapInsert(entityMap, entry.entity, pos, size);
}
void entityMapRemoveID(EntityMap *entityMap, i32 entryID) {
void entityMapRemove(EntityMap *entityMap, EntityMapEntry entry) {
entityMapRemoveIdx(entityMap, entry.entryIdx);
}
void entityMapRemoveIdx(EntityMap *entityMap, i32 entryID) {
EntityMapEntry entry = bzArrayGet(entityMap->entities, entryID);
EntityMapIndex index = entry.index;

View File

@@ -14,7 +14,7 @@ typedef struct EntityMapIndex {
typedef struct EntityMapEntry {
ecs_entity_t entity;
i32 queryIdx;
i32 entryID;
i32 entryIdx;
EntityMapIndex index;
} EntityMapEntry;
@@ -49,8 +49,9 @@ 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 entityMapRemoveID(EntityMap *entityMap, i32 entryID);
void entityMapRemoveIdx(EntityMap *entityMap, i32 entryID);
EntityMapIter entityMapQueryIter(EntityMap *entityMap, Position pos, Size size);
bool entityMapQueryNext(EntityMapIter *it);

View File

@@ -97,7 +97,7 @@ bool init(void *userData) {
.maxWidth=game->map.width * game->map.tileWidth,
.maxHeight=game->map.height * game->map.tileHeight,
.cellResolution=game->map.tileWidth,
.cellDepth=10
.cellDepth=16
});
bzTileMapOverrideLayer(&game->map, LAYER_BUILDING_OWNER, initBuildingsLayer);