Skip to content

Commit

Permalink
Merge pull request #41 from X-R-G-B/fix/RB-70-fix-remove-entity
Browse files Browse the repository at this point in the history
ECS: Fix remove entity function
  • Loading branch information
TTENSHII authored Oct 3, 2023
2 parents b8d5e2a + 63b4aa7 commit c68ebe5
Showing 1 changed file with 24 additions and 7 deletions.
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 c68ebe5

Please sign in to comment.