#include "World.hpp"
#include "WorldCollision.hpp"
-#include "../graphics/BlockLighting.hpp"
-#include "../graphics/DirectionalLighting.hpp"
+#include "../graphics/Viewport.hpp"
#include <iostream>
#include <limits>
Resolve(entity, col);
}
}
+ for (auto iter = entities.begin(), end = entities.end(); iter != end;) {
+ if (iter->CanRemove()) {
+ iter = entities.erase(iter);
+ } else {
+ ++iter;
+ }
+ }
chunks.Rebase(player->ChunkCoords());
chunks.Update(dt);
}
}
-void World::Render(BlockLighting &chunk_prog, DirectionalLighting &entity_prog) {
- chunk_prog.Activate();
+void World::Render(Viewport &viewport) {
+ viewport.WorldPosition(player->Transform(player->ChunkCoords()));
+
+ BlockLighting &chunk_prog = viewport.ChunkProgram();
chunk_prog.SetFogDensity(fog_density);
- chunk_prog.SetView(glm::inverse(player->Transform(player->ChunkCoords())));
for (Chunk &chunk : chunks.Loaded()) {
glm::mat4 m(chunk.Transform(player->ChunkCoords()));
}
}
- entity_prog.Activate();
+ DirectionalLighting &entity_prog = viewport.EntityProgram();
entity_prog.SetLightDirection(light_direction);
entity_prog.SetFogDensity(fog_density);
- entity_prog.SetView(glm::inverse(player->Transform(player->ChunkCoords())));
for (Entity &entity : entities) {
if (entity.HasShape()) {