Call constructors & destructors in ecs attach/detach
This commit is contained in:
parent
e6f5fc17a4
commit
802bb1a74d
1 changed files with 16 additions and 1 deletions
|
|
@ -448,7 +448,11 @@ namespace psemek::ecs
|
||||||
for (auto const & column : data.table->columns())
|
for (auto const & column : data.table->columns())
|
||||||
uuid_helper_.push_back(column->uuid());
|
uuid_helper_.push_back(column->uuid());
|
||||||
|
|
||||||
((data.table->column(std::remove_cvref_t<Components>::uuid()) ? 0 : (uuid_helper_.push_back(std::remove_cvref_t<Components>::uuid()), 0)), ...);
|
bool archetype_changed = false;
|
||||||
|
((data.table->column(std::remove_cvref_t<Components>::uuid()) ? 0 : (archetype_changed = true, uuid_helper_.push_back(std::remove_cvref_t<Components>::uuid()), 0)), ...);
|
||||||
|
|
||||||
|
if (archetype_changed)
|
||||||
|
data.table->trigger_destructors(*this, data.row);
|
||||||
|
|
||||||
auto table = table_container_.get(uuid_helper_);
|
auto table = table_container_.get(uuid_helper_);
|
||||||
|
|
||||||
|
|
@ -479,6 +483,9 @@ namespace psemek::ecs
|
||||||
((accessor.get<std::remove_cvref_t<Components>>() = std::forward<Components>(components)), ...);
|
((accessor.get<std::remove_cvref_t<Components>>() = std::forward<Components>(components)), ...);
|
||||||
|
|
||||||
uuid_helper_.clear();
|
uuid_helper_.clear();
|
||||||
|
|
||||||
|
if (archetype_changed)
|
||||||
|
table->trigger_constructors(*this, data.row);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ... Components>
|
template <typename ... Components>
|
||||||
|
|
@ -493,8 +500,13 @@ namespace psemek::ecs
|
||||||
if (!uuid_set_helper_.contains(column->uuid()))
|
if (!uuid_set_helper_.contains(column->uuid()))
|
||||||
uuid_helper_.push_back(column->uuid());
|
uuid_helper_.push_back(column->uuid());
|
||||||
|
|
||||||
|
bool const archetype_changed = sizeof...(Components) > 0;
|
||||||
|
|
||||||
auto table = table_container_.get(uuid_helper_);
|
auto table = table_container_.get(uuid_helper_);
|
||||||
|
|
||||||
|
if (archetype_changed)
|
||||||
|
data.table->trigger_destructors(*this, data.row);
|
||||||
|
|
||||||
if (!table)
|
if (!table)
|
||||||
{
|
{
|
||||||
std::vector<std::unique_ptr<detail::column>> columns;
|
std::vector<std::unique_ptr<detail::column>> columns;
|
||||||
|
|
@ -519,6 +531,9 @@ namespace psemek::ecs
|
||||||
|
|
||||||
uuid_set_helper_.clear();
|
uuid_set_helper_.clear();
|
||||||
uuid_helper_.clear();
|
uuid_helper_.clear();
|
||||||
|
|
||||||
|
if (archetype_changed)
|
||||||
|
table->trigger_constructors(*this, data.row);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ... Components>
|
template <typename ... Components>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue