void Map::CalculateLights(bool firstTime) { if (!firstTime) { for (int i = minX; i < maxX; i++) { for (int j = minY; j < maxY; j++) { blocks[i][j].lightValue = 0; } } } for (int i = minX; i < maxX; i++) { for (int j = minY; j < maxY; j++) { if (blocks[i][j].lightSource > 0) { UpdateLight(i, j, blocks[i][j].lightSource); } } } Entity* entity; for (std::vector<Entity*>::iterator it = entities.begin(); it != entities.end(); ++it) { entity = (*it); if (entity->GetLight() > 0) UpdateLight((int) entity->shape->GetCenterX(), (int) entity->shape->GetCenterY(), entity->GetLight()); } }
void Map::Update() { for (std::vector<Entity*>::iterator it = entities.begin(); it != entities.end();) { if ((*it)->active) ++it; else { delete *it; it = entities.erase(it); } } HandleCollision(); HandleEvents(); Entity* entity; for (std::vector<Entity*>::iterator it = entities.begin(); it != entities.end(); ++it) { entity = (*it); if (entity->OnScreen == false) continue; if (entity->GetLight() > 0 && ((int) entity->shape->GetCenterX() != (int) (entity->prevPos.x + entity->GetSize().x / 2.0) || (int) entity->shape->GetCenterY() != (int) (entity->prevPos.y + entity->GetSize().y / 2.0))) lightDirty = true; } skyManager->Update(); }