You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
78 lines
2.1 KiB
#include "entitymanager.h" |
|
|
|
EntityManager::EntityManager() { |
|
} |
|
|
|
void EntityManager::SetCollisionMethod(CollisionUpdateEvent collisionsEvent) { |
|
this->collisionsEvent = collisionsEvent; |
|
} |
|
|
|
void EntityManager::AddEntity(std::string name, Entity* entity) { |
|
std::unordered_map<std::string, Entity*>::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<std::string, Entity*>::const_iterator found = this->entities.find(name); |
|
if(found != this->entities.end()) { |
|
return found->second; |
|
} |
|
|
|
return NULL; |
|
} |
|
|
|
void EntityManager::Update() { |
|
std::vector<std::string> 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(); |
|
}
|
|
|