diff --git a/engine/breeze/util/object_pool.c b/engine/breeze/util/object_pool.c index 9809745..25ef9ea 100644 --- a/engine/breeze/util/object_pool.c +++ b/engine/breeze/util/object_pool.c @@ -42,6 +42,16 @@ void bzObjectPoolDestroy(BzObjectPool *pool) { bzFree(pool); } +size_t bzObjectPoolCalcNumFree(BzObjectPool *pool) { + size_t count = 0; + i32 idx = pool->firstFree; + while (idx != -1) { + count++; + i32 *object = bzObjectPoolGetObject(pool, idx); + idx = *object; + } + return count; +} void *bzObjectPool(BzObjectPool *pool) { if (pool->firstFree == -1) return NULL; diff --git a/engine/breeze/util/object_pool.h b/engine/breeze/util/object_pool.h index 2cb69d7..f33a4a2 100644 --- a/engine/breeze/util/object_pool.h +++ b/engine/breeze/util/object_pool.h @@ -13,6 +13,7 @@ typedef struct BzObjectPoolDesc { BzObjectPool *bzObjectPoolCreate(const BzObjectPoolDesc *desc); void bzObjectPoolDestroy(BzObjectPool *pool); +size_t bzObjectPoolCalcNumFree(BzObjectPool *pool); void *bzObjectPool(BzObjectPool *pool); void *bzObjectPoolGetObject(BzObjectPool *pool, i32 idx); i32 bzObjectPoolGetIdx(BzObjectPool *pool, void *object); diff --git a/game/main.c b/game/main.c index 7e3eaa2..810b43a 100644 --- a/game/main.c +++ b/game/main.c @@ -191,7 +191,7 @@ void update(float dt, void *userData) { snprintf(titleBuf, sizeof(titleBuf), "FPS: %d | %.2f ms", GetFPS(), GetFrameTime() * 1000); SetWindowTitle(titleBuf); - updatePlayerInput(NULL); + updatePlayerInput(NULL); } void render(float dt, void *userData) { @@ -224,6 +224,7 @@ void imguiRender(float dt, void *userData) { igSetNextWindowSize((ImVec2){300, 400}, ImGuiCond_FirstUseEver); igBegin("Debug Menu", NULL, 0); + igText("Num paths from pool available: %llu", bzObjectPoolCalcNumFree(game->pools.pathData)); const char *inputState = "NONE"; switch (input->state) { case INPUT_NONE: diff --git a/game/pathfinding.c b/game/pathfinding.c index 937ca1f..9275cee 100644 --- a/game/pathfinding.c +++ b/game/pathfinding.c @@ -84,7 +84,6 @@ static void smoothPath(BzTileMap *map, PathData *pathData, BzObjectPool *pool) { prevIdx++; nextIdx++; - bzLogInfo("%llu,%llu", prevIdx, nextIdx); if (prevIdx >= currPathLen) { prevPath = prevPath->next; diff --git a/game/systems.h b/game/systems.h index dc6fb51..25be265 100644 --- a/game/systems.h +++ b/game/systems.h @@ -43,6 +43,7 @@ void entityUpdateSpatialID(ecs_iter_t *it); void entityUpdateKinematic(ecs_iter_t *it); /* + * 0: Game (singleton) for object pool * 1: Position * 2: Rotation * 3: Velocity diff --git a/game/systems_entity.c b/game/systems_entity.c index 8b16c6c..e8a02d4 100644 --- a/game/systems_entity.c +++ b/game/systems_entity.c @@ -78,6 +78,7 @@ void entityUpdateKinematic(ecs_iter_t *it) { } void entityFollowPath(ecs_iter_t *it) { + const Game *game = ecs_singleton_get(ECS, Game); Position *position = ecs_field(it, Position, 1); Rotation *rotation = ecs_field(it, Rotation, 2); Velocity *velocity = ecs_field(it, Velocity, 3); @@ -95,6 +96,8 @@ void entityFollowPath(ecs_iter_t *it) { path[i].curWaypoint++; if (path[i].curWaypoint >= path[i].paths->numWaypoints) { path[i].curWaypoint = 0; + PathData *oldPath = path[i].paths; + bzObjectPoolRelease(game->pools.pathData, oldPath); path[i].paths = path[i].paths->next; if (!path[i].paths) ecs_remove(ECS, it->entities[i], Path); }