diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-09 20:30:05 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-01-10 11:30:41 -0500 |
| commit | 294c85f91ac5b2ff9e4ad3d99588ed0d1a72e6b7 (patch) | |
| tree | a92c28661e1ab4b15a9ac9e52816cc6a4c2d7b95 /src/entities.cpp | |
| parent | 0a382e78b6cbc77156d78df4e7b0c2854cbb0cd1 (diff) | |
checkpoint - major ECS interface refactor
Diffstat (limited to 'src/entities.cpp')
| -rw-r--r-- | src/entities.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/entities.cpp b/src/entities.cpp index 496874a..91c94d8 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -38,15 +38,16 @@ int64_t EntityType_FindByTypeCode(const char *typeCode) { return -1; } -int64_t EntityType_FindByEntityHandle(EntityHandle handle, int64_t &detailIndex) { +int64_t EntityType_FindByEntity(Entity_Base *entity, int64_t &detailIndex) { + assert(entity != nullptr); for (int64_t i = 0; i < GlobalEntityTypes.Count(); ++i) { for (int64_t k = 0; k < GlobalEntityTypes[i].detailsCount; ++k) { - if (GlobalEntityTypes[i].details[k].entityHandle == handle) { + if (GlobalEntityTypes[i].details[k].entityHandle == entity->handle) { detailIndex = k; return i; } } - if (GlobalEntityTypes[i].entityHandle == handle) { + if (GlobalEntityTypes[i].entityHandle == entity->handle) { detailIndex = -1; return i; } @@ -1152,10 +1153,11 @@ void EntityType_Tick(double delta) { const auto count = EntitiesToBeRemoved.Count(); int64_t detailIndex = -1; for (long i = 0; i < count; ++i) { - if (auto index = EntityType_FindByEntityHandle(EntitiesToBeRemoved[i], detailIndex); index > -1) { - if (auto *grBinds = ECS_GetGrBinds(EntitiesToBeRemoved[i]); grBinds != nullptr) { + if (auto index = EntityType_FindByEntity(EntitiesToBeRemoved[i], detailIndex); index > -1) { + auto &entType = GlobalEntityTypes[index]; + if (auto *grBinds = ECS_GetGrBinds(entType.details[detailIndex].grBindsHandle); grBinds != nullptr) { auto &td = EntityTypesToTeardown.Push(); - td.handle = EntitiesToBeRemoved[i]; + td.handle = EntitiesToBeRemoved[i]->handle; td.ticksToWait = 1; for (long k = 0; k < GlobalEntityTypes[index].detailsCount; ++k) { td.grBinds[k] = grBinds; @@ -1167,13 +1169,13 @@ void EntityType_Tick(double delta) { void EntityType_Tick_Late(double delta) { while (EntitiesWithExcessInstances.Count() != 0) { - auto entHandle = EntitiesWithExcessInstances.Pop(); + auto *entity = EntitiesWithExcessInstances.Pop(); int64_t detailIndex = 0; - auto index = EntityType_FindByEntityHandle(entHandle, detailIndex); + auto index = EntityType_FindByEntity(entity, detailIndex); auto &et = GlobalEntityTypes[index]; auto &etd = GlobalEntityTypes[index].details[detailIndex]; - auto &grBinds = *ECS_GetGrBinds(etd.entityHandle); - EntityType_RolloverInstances(et, grBinds); + auto *grBinds = ECS_GetGrBinds(etd.grBindsHandle); + EntityType_RolloverInstances(et, *grBinds); } for (int64_t i = EntityTypesToTeardown.Count() - 1; i >= 0; --i) { auto &td = EntityTypesToTeardown[i]; |
