From 55c8a14a7e2b2dadf0def3e09f970818164366f5 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Thu, 18 Jun 2015 12:14:05 -0400 Subject: Now displaying player character --- src/entity_manager.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/entity_manager.cpp (limited to 'src/entity_manager.cpp') diff --git a/src/entity_manager.cpp b/src/entity_manager.cpp new file mode 100644 index 0000000..4bdfe8a --- /dev/null +++ b/src/entity_manager.cpp @@ -0,0 +1,38 @@ +#ifndef ENTITY_MANAGER_CPP_42D78C22 +#define ENTITY_MANAGER_CPP_42D78C22 + +#include "entity_manager.h" + +template <> +std::set EntityManager::getEntitiesWithComponents<>(std::set& componentTypes) +{ + if (cachedComponents.count(componentTypes) == 1) + { + return cachedComponents[componentTypes]; + } + + std::set& cache = cachedComponents[componentTypes]; + for (auto& entity : entities) + { + EntityData& data = entity.second; + bool cacheEntity = true; + + for (auto& componentType : componentTypes) + { + if (data.components.count(componentType) == 0) + { + cacheEntity = false; + break; + } + } + + if (cacheEntity) + { + cache.insert(entity.first); + } + } + + return cache; +} + +#endif /* end of include guard: ENTITY_MANAGER_CPP_42D78C22 */ -- cgit 1.4.1