feat: Ensure stone layer chunks always render and remain visible

This commit is contained in:
Kacper Kostka (aider) 2025-04-05 15:45:13 +02:00
parent 883c3d9a08
commit d87105baad
3 changed files with 19 additions and 4 deletions

View File

@ -78,6 +78,15 @@ function simulationLoop(timestamp) {
// Update physics with timestamp for rate limiting
updatePhysics(timestamp);
// Force stone layer chunks to be rendered every frame
const visibleChunks = getVisibleChunks();
for (const { chunkX, chunkY, isVisible } of visibleChunks) {
if (isVisible && chunkY === 1) {
// Mark stone layer chunks as dirty to ensure they're always rendered
dirtyChunks.add(getChunkKey(chunkX, chunkY));
}
}
// Render
render();

View File

@ -13,8 +13,9 @@ function render() {
const key = getChunkKey(chunkX, chunkY);
// Skip rendering if the chunk hasn't changed and isn't marked as dirty
if (!dirtyChunks.has(key) && !worldMoved) {
// Always render stone layer (chunkY = 1) chunks, even if they're not dirty
// For other chunks, only render if they're dirty or the world moved
if (chunkY !== 1 && !dirtyChunks.has(key) && !worldMoved) {
continue;
}

View File

@ -527,9 +527,14 @@ function generateChunksAroundPlayer() {
const chunkY = 1; // The chunk at y = 1 (moved from y = -1)
const key = getChunkKey(chunkX, chunkY);
// Always generate and mark as dirty to ensure rendering
// Always generate stone layer chunks
getOrCreateChunk(chunkX, chunkY);
dirtyChunks.add(key);
// Mark as dirty only if it's a new chunk or if it's visible
if (!chunks.has(key) || visibleChunks.some(chunk =>
chunk.chunkX === chunkX && chunk.chunkY === chunkY && chunk.isVisible)) {
dirtyChunks.add(key);
}
}
// Generate visible chunks first