fix: Add missing dirtyChunks variable and update rendering logic
This commit is contained in:
72
js/world.js
72
js/world.js
@@ -6,12 +6,19 @@ let worldOffsetYBeforeDrag = 0;
|
||||
let chunks = new Map(); // Map to store chunks with key "x,y"
|
||||
let metadata = new Map(); // Map to store metadata for pixels
|
||||
let generatedChunks = new Set(); // Set to track which chunks have been generated
|
||||
let dirtyChunks = new Set(); // Set to track which chunks need rendering
|
||||
let lastPhysicsTime = 0; // Last time physics was updated
|
||||
let physicsUpdateRate = 16; // Update physics every 16ms (approx 60fps)
|
||||
let worldMoved = false; // Track if the world has moved for rendering
|
||||
|
||||
function moveWorld(dx, dy) {
|
||||
worldOffsetX += dx;
|
||||
worldOffsetY += dy;
|
||||
updateCoordinatesDisplay();
|
||||
|
||||
// Mark that the world has moved for rendering
|
||||
worldMoved = true;
|
||||
|
||||
// Generate terrain for chunks around the current view
|
||||
generateChunksAroundPlayer();
|
||||
}
|
||||
@@ -383,32 +390,38 @@ function setPixel(worldX, worldY, type) {
|
||||
const chunk = getOrCreateChunk(chunkX, chunkY);
|
||||
const index = localY * CHUNK_SIZE + localX;
|
||||
|
||||
chunk[index] = type;
|
||||
|
||||
// Assign random color index for natural elements
|
||||
if (type === DIRT || type === GRASS || type === STONE || type === WOOD || type === LEAF) {
|
||||
const colorIndex = Math.floor(Math.random() * 10);
|
||||
setMetadata(worldX, worldY, { ...getMetadata(worldX, worldY) || {}, colorIndex });
|
||||
}
|
||||
else if (type === WATER) {
|
||||
const colorIndex = Math.floor(Math.random() * 10);
|
||||
setMetadata(worldX, worldY, { ...getMetadata(worldX, worldY) || {}, colorIndex, waterColorTimer: 0 });
|
||||
}
|
||||
else if (type === TREE_SEED) {
|
||||
// Initialize tree seed metadata
|
||||
setMetadata(worldX, worldY, {
|
||||
age: Math.floor(Math.random() * 50), // Random initial age
|
||||
growthStage: 0,
|
||||
type: Math.random() < 0.8 ? 'oak' : 'pine' // 80% oak, 20% pine
|
||||
});
|
||||
}
|
||||
else if (type === SEED) {
|
||||
// Initialize flower seed metadata
|
||||
setMetadata(worldX, worldY, {
|
||||
age: Math.floor(Math.random() * 30),
|
||||
growthStage: 0,
|
||||
flowerType: Math.floor(Math.random() * 5) // Different flower types
|
||||
});
|
||||
// Only update if the pixel type is changing
|
||||
if (chunk[index] !== type) {
|
||||
chunk[index] = type;
|
||||
|
||||
// Mark chunk as dirty for rendering
|
||||
dirtyChunks.add(getChunkKey(chunkX, chunkY));
|
||||
|
||||
// Assign random color index for natural elements
|
||||
if (type === DIRT || type === GRASS || type === STONE || type === WOOD || type === LEAF) {
|
||||
const colorIndex = Math.floor(Math.random() * 10);
|
||||
setMetadata(worldX, worldY, { ...getMetadata(worldX, worldY) || {}, colorIndex });
|
||||
}
|
||||
else if (type === WATER) {
|
||||
const colorIndex = Math.floor(Math.random() * 10);
|
||||
setMetadata(worldX, worldY, { ...getMetadata(worldX, worldY) || {}, colorIndex, waterColorTimer: 0 });
|
||||
}
|
||||
else if (type === TREE_SEED) {
|
||||
// Initialize tree seed metadata
|
||||
setMetadata(worldX, worldY, {
|
||||
age: Math.floor(Math.random() * 50), // Random initial age
|
||||
growthStage: 0,
|
||||
type: Math.random() < 0.8 ? 'oak' : 'pine' // 80% oak, 20% pine
|
||||
});
|
||||
}
|
||||
else if (type === SEED) {
|
||||
// Initialize flower seed metadata
|
||||
setMetadata(worldX, worldY, {
|
||||
age: Math.floor(Math.random() * 30),
|
||||
growthStage: 0,
|
||||
flowerType: Math.floor(Math.random() * 5) // Different flower types
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,6 +461,13 @@ function moveMetadata(fromX, fromY, toX, toY) {
|
||||
if (data) {
|
||||
setMetadata(toX, toY, data);
|
||||
removeMetadata(fromX, fromY);
|
||||
|
||||
// Mark chunks as dirty for rendering
|
||||
const { chunkX: fromChunkX, chunkY: fromChunkY } = getChunkCoordinates(fromX, fromY);
|
||||
const { chunkX: toChunkX, chunkY: toChunkY } = getChunkCoordinates(toX, toY);
|
||||
|
||||
dirtyChunks.add(getChunkKey(fromChunkX, fromChunkY));
|
||||
dirtyChunks.add(getChunkKey(toChunkX, toChunkY));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user