#include "entitymanager.h" EntityManager::EntityManager() { } void EntityManager::SetCollisionMethod(CollisionUpdateEvent collisionsEvent) { this->collisionsEvent = collisionsEvent; } void EntityManager::AddEntity(std::string name, Entity* entity) { std::unordered_map::const_iterator found = this->entities.find(name); while(found != this->entities.end()) { name += "0"; found = this->entities.find(name); } this->entities.insert(std::make_pair(name, entity)); } Entity* EntityManager::Get(std::string name) { std::unordered_map::const_iterator found = this->entities.find(name); if(found != this->entities.end()) { return found->second; } return NULL; } void EntityManager::Update() { std::vector toRemove; for (auto& iterator : this->entities) { if (iterator.second != NULL) { if (this->collisionsEvent != NULL) { for (auto& iterator2 : this->entities) { if (iterator != iterator2) { if(iterator.second->Collision(iterator2.second)) { this->collisionsEvent(iterator.second, iterator2.second); } } } } if (iterator.second->Active()) { iterator.second->Update(); } else { toRemove.push_back(iterator.first); } } } while (toRemove.size() > 0) { this->entities.erase(toRemove[toRemove.size() - 1]); toRemove.pop_back(); } toRemove.clear(); } void EntityManager::Render(sf::RenderWindow* window, Camera *camera) { for(auto& iterator : this->entities) { if(iterator.second != NULL && iterator.second->Active() && camera->IsOnScreen(window, iterator.second)) { window->draw(*iterator.second); } } } EntityManager::~EntityManager() { for (auto& iterator : this->entities) { delete iterator.second; } this->entities.clear(); }