assert_valid(entity);
uint32_t index = entity.index();
auto mask = entity_component_mask_[entity.index()];
- event_manager_.emit<EntityDestroyedEvent>(Entity(this, entity));
for (size_t i = 0; i < component_pools_.size(); i++) {
BasePool *pool = component_pools_[i];
- if (pool && mask.test(i))
+ if (pool && mask.test(i)) {
+ pool->removeComponent(Entity(this, entity));
pool->destroy(index);
+ }
}
+ event_manager_.emit<EntityDestroyedEvent>(Entity(this, entity));
entity_component_mask_[index].reset();
entity_version_[index]++;
free_list_.push_back(index);
#include <cassert>
#include <vector>
+#include "entityx/EntityClass.h"
+
namespace entityx {
/**
}
virtual void destroy(std::size_t n) = 0;
+ virtual void removeComponent(Entity entity) = 0;
protected:
std::vector<char *> blocks_;
T *ptr = static_cast<T*>(get(n));
ptr->~T();
}
+
+ virtual void removeComponent(Entity entity) override {
+ entity.remove<T>();
+ }
};
} // namespace entityx
#include <vector>
#include "entityx/3rdparty/catch.hpp"
#include "entityx/help/Pool.h"
+#include "entityx/Entity.h"
-struct Position {
+struct Position : public entityx::Component<Position> {
explicit Position(int *ptr = nullptr) : ptr(ptr) {
if (ptr) (*ptr)++;
}