Skip to content

Commit

Permalink
Merge branch 'dev' into feature/RB-56-checkDeads
Browse files Browse the repository at this point in the history
  • Loading branch information
guillaumeAbel committed Oct 3, 2023
2 parents e883a93 + aead903 commit e623b10
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 7 deletions.
1 change: 1 addition & 0 deletions src/ECS/Registry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ void Registry::clear()
_data.clear();
_addComponentPlaceFunctions.clear();
_removeComponentFunctions.clear();
_getExistingsId.clear();
_entitiesNb = 0;
}

Expand Down
31 changes: 24 additions & 7 deletions src/ECS/SparseArray.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,9 @@ class SparseArray {
throw std::runtime_error(
"SparseArrays::erase: ID out of bounds!");
}
if (_sparse[id] != -1) {
auto it = _dense.begin();
std::advance(it, _sparse[id]);
_dense.erase(it);
auto revIt = _revSparse.begin();
std::advance(revIt, _sparse[id]);
_revSparse.erase(revIt);
std::size_t sparseValue = _sparse[id];
if (sparseValue != -1) {
removeDenses(id, sparseValue);
}
auto it = _sparse.begin();
std::advance(it, id);
Expand Down Expand Up @@ -101,6 +97,27 @@ class SparseArray {
}

private:
void removeDenses(std::size_t id, std::size_t sparseValue)
{
auto it = _dense.begin();
std::advance(it, sparseValue);
_dense.erase(it);
auto revIt = _revSparse.begin();
std::advance(revIt, sparseValue);
_revSparse.erase(revIt);
for (auto revIt2 = _revSparse.begin(); revIt2 != _revSparse.end();
revIt2++) {
if (*revIt2 > id) {
(*revIt2)--;
}
}
for (auto it2 = _sparse.begin(); it2 != _sparse.end(); it2++) {
if (*it2 > sparseValue) {
(*it2)--;
}
}
}

void throwIfDontExist(std::size_t id)
{
if (!exist(id)) {
Expand Down

0 comments on commit e623b10

Please sign in to comment.