iterator erase fix and improved readability

This commit is contained in:
Argore 2024-11-05 17:00:17 +01:00
parent ccacb3088f
commit 261b2540e0

View File

@ -39,13 +39,15 @@ void Planet::Update(glm::vec3 cameraPos)
{ {
numChunks++; numChunks++;
if (!(*it->second).ready) Chunk& chunk = *it->second;
if (!chunk.ready)
chunksLoading++; chunksLoading++;
int chunkX = (*it->second).chunkPos.x; int chunkX = chunk.chunkPos.x;
int chunkY = (*it->second).chunkPos.y; int chunkY = chunk.chunkPos.y;
int chunkZ = (*it->second).chunkPos.z; int chunkZ = chunk.chunkPos.z;
if ((*it->second).ready && (abs(chunkX - camChunkX) > renderDistance || if ( chunk.ready && (abs(chunkX - camChunkX) > renderDistance ||
abs(chunkY - camChunkY) > renderDistance || abs(chunkY - camChunkY) > renderDistance ||
abs(chunkZ - camChunkZ) > renderDistance)) abs(chunkZ - camChunkZ) > renderDistance))
{ {
@ -60,13 +62,13 @@ void Planet::Update(glm::vec3 cameraPos)
chunkDataDeleteQueue.push({ chunkX, chunkY, chunkZ - 1 }); chunkDataDeleteQueue.push({ chunkX, chunkY, chunkZ - 1 });
// Delete chunk // Delete chunk
delete it->second; delete it->second; // &chunk
it = chunks.erase(it); it = chunks.erase(it);
} }
else else
{ {
numChunksRendered++; numChunksRendered++;
(*it->second).Render(solidShader, billboardShader); chunk.Render(solidShader, billboardShader);
++it; ++it;
} }
} }
@ -75,11 +77,13 @@ void Planet::Update(glm::vec3 cameraPos)
waterShader->use(); waterShader->use();
for (auto it = chunks.begin(); it != chunks.end(); ) for (auto it = chunks.begin(); it != chunks.end(); )
{ {
int chunkX = (*it->second).chunkPos.x; Chunk& chunk = *it->second;
int chunkY = (*it->second).chunkPos.y;
int chunkZ = (*it->second).chunkPos.z;
(*it->second).RenderWater(waterShader); int chunkX = chunk.chunkPos.x;
int chunkY = chunk.chunkPos.y;
int chunkZ = chunk.chunkPos.z;
chunk.RenderWater(waterShader);
++it; ++it;
} }
@ -102,11 +106,14 @@ void Planet::ChunkThreadUpdate()
chunks.find({ pos.x, pos.y, pos.z + 1 }) == chunks.end() && chunks.find({ pos.x, pos.y, pos.z + 1 }) == chunks.end() &&
chunks.find({ pos.x, pos.y, pos.z - 1 }) == chunks.end()) chunks.find({ pos.x, pos.y, pos.z - 1 }) == chunks.end())
{ {
delete chunkData.at(pos); delete it->second;
chunkData.erase(pos); it = chunkData.erase( it );
} }
else
{
++it; ++it;
} }
}
// Check if camera moved to new chunk // Check if camera moved to new chunk
if (camChunkX != lastCamX || camChunkY != lastCamY || camChunkZ != lastCamZ) if (camChunkX != lastCamX || camChunkY != lastCamY || camChunkZ != lastCamZ)