#include "Manager.h" #include #include #include "Constants.h" #include "Entity.h" void Manager::refresh() { for (auto i(0u); i < MAX_GROUPS; i++) { auto& v(entitiesByGroup[i]); v.erase( std::remove_if(std::begin(v), std::end(v), [i](Entity* mEntity) { return !mEntity->isActive() || !mEntity->hasGroup(i); }), std::end(v)); } entities.erase(std::remove_if(std::begin(entities), std::end(entities), [](const std::unique_ptr& mEntity) { return !mEntity->isActive(); }), std::end(entities)); } void Manager::update() { for (auto& e : entities) e->update(); } void Manager::addToGroup(Entity* mEntity, Group mGroup) { entitiesByGroup.at(mGroup).emplace_back(mEntity); } std::vector& Manager::getGroup(Group mGroup) { return entitiesByGroup.at(mGroup); } std::vector Manager::getAll() { std::vector entity_vec; for (auto& entity_ptr : entities) { entity_vec.emplace_back(entity_ptr.get()); } return entity_vec; } Entity& Manager::addEntity() { Entity* e = new Entity(*this); std::unique_ptr uPtr{ e }; entities.emplace_back(std::move(uPtr)); return *e; }