From 88e85573ed8f9a9b6605ccdaaf84d353379a9e63 Mon Sep 17 00:00:00 2001 From: Zack Mulgrew Date: Sat, 27 Feb 2016 02:03:50 -0800 Subject: Trigger ComponentRemovedEvent on Entity::destroy --- entityx/Entity.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/entityx/Entity.h b/entityx/Entity.h index c4e4ac5..06854e3 100644 --- a/entityx/Entity.h +++ b/entityx/Entity.h @@ -331,10 +331,15 @@ struct ComponentRemovedEvent : public Event> { class BaseComponentHelper { public: virtual ~BaseComponentHelper() {} + virtual void remove_component(Entity e) = 0; }; template class ComponentHelper : public BaseComponentHelper { +public: + void remove_component(Entity e) override { + e.remove(); + } }; /** @@ -569,12 +574,12 @@ class EntityManager : entityx::help::NonCopyable { assert_valid(entity); uint32_t index = entity.index(); auto mask = entity_component_mask_[entity.index()]; - event_manager_.emit(Entity(this, entity)); - for (size_t i = 0; i < component_pools_.size(); i++) { - BasePool *pool = component_pools_[i]; - if (pool && mask.test(i)) - pool->destroy(index); + for (size_t i = 0; i < component_helpers_.size(); i++) { + BaseComponentHelper *helper = component_helpers_[i]; + if (helper && mask.test(i)) + helper->remove_component(Entity(this, entity)); } + event_manager_.emit(Entity(this, entity)); entity_component_mask_[index].reset(); entity_version_[index]++; free_list_.push_back(index); -- cgit v1.2.3