From 3eccd38e989012ff35ee5376670aabc338c52008 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Sun, 12 Feb 2017 17:07:55 -0500 Subject: locked EM.each, arenas --- entityx/Entity.cc | 4 +++- entityx/Entity.h | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'entityx') diff --git a/entityx/Entity.cc b/entityx/Entity.cc index ddb8df7..adac3de 100644 --- a/entityx/Entity.cc +++ b/entityx/Entity.cc @@ -31,7 +31,8 @@ std::bitset Entity::component_mask() const { return manager_->component_mask(id_); } -EntityManager::EntityManager(EventManager &event_manager) : event_manager_(event_manager) { +EntityManager::EntityManager(EventManager &event_manager) + : event_manager_(event_manager) { } EntityManager::~EntityManager() { @@ -46,6 +47,7 @@ void EntityManager::reset() { for (BaseComponentHelper *helper : component_helpers_) { if (helper) delete helper; } + component_pools_.clear(); component_helpers_.clear(); entity_component_mask_.clear(); diff --git a/entityx/Entity.h b/entityx/Entity.h index 3217ae5..a423f8f 100644 --- a/entityx/Entity.h +++ b/entityx/Entity.h @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -462,8 +463,11 @@ class EntityManager : entityx::help::NonCopyable { template struct identity { typedef T type; }; void each(typename identity>::type f) { + static std::mutex locked; + locked.lock(); for (auto it : *this) f(it, *(it.template component().get())...); + locked.unlock(); } private: -- cgit v1.2.3