}
void EntityManager::reset() {
+ for (Entity entity : entities_for_debugging()) entity.destroy();
for (BasePool *pool : component_pools_) {
if (pool) delete pool;
}
ComponentHandle<C> assign(Entity::Id id, Args && ... args) {
assert_valid(id);
const BaseComponent::Family family = C::family();
+ assert(!entity_component_mask_[id.index()].test(family));
// Placement new into the component pool.
Pool<C> *pool = accomodate_component<C>();
class Pool : public BasePool {
public:
Pool() : BasePool(sizeof(T), ChunkSize) {}
- virtual ~Pool() {}
+ virtual ~Pool() {
+ // Component destructors *must* be called by owner.
+ }
virtual void destroy(std::size_t n) override {
assert(n < size_);