fix: Add missing dirtyChunks variable and update rendering logic
This commit is contained in:
@@ -4,29 +4,37 @@ function updateSand(x, y) {
|
||||
if (getPixel(x, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x, y + 1, SAND);
|
||||
return true;
|
||||
}
|
||||
// Try to move down-left or down-right
|
||||
else if (getPixel(x - 1, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x - 1, y + 1, SAND);
|
||||
return true;
|
||||
}
|
||||
else if (getPixel(x + 1, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x + 1, y + 1, SAND);
|
||||
return true;
|
||||
}
|
||||
// Sand can displace water
|
||||
else if (getPixel(x, y + 1) === WATER) {
|
||||
setPixel(x, y, WATER);
|
||||
setPixel(x, y + 1, SAND);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function updateWater(x, y) {
|
||||
let modified = false;
|
||||
|
||||
// Update water color dynamically
|
||||
const metadata = getMetadata(x, y);
|
||||
if (metadata) {
|
||||
if (metadata.waterColorTimer === undefined) {
|
||||
metadata.waterColorTimer = 0;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
metadata.waterColorTimer++;
|
||||
@@ -35,6 +43,7 @@ function updateWater(x, y) {
|
||||
if (metadata.waterColorTimer > 20 && Math.random() < 0.1) {
|
||||
metadata.colorIndex = Math.floor(Math.random() * 10);
|
||||
metadata.waterColorTimer = 0;
|
||||
modified = true;
|
||||
}
|
||||
|
||||
setMetadata(x, y, metadata);
|
||||
@@ -45,17 +54,20 @@ function updateWater(x, y) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x, y + 1, WATER);
|
||||
moveMetadata(x, y, x, y + 1);
|
||||
return true;
|
||||
}
|
||||
// Try to move down-left or down-right
|
||||
else if (getPixel(x - 1, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x - 1, y + 1, WATER);
|
||||
moveMetadata(x, y, x - 1, y + 1);
|
||||
return true;
|
||||
}
|
||||
else if (getPixel(x + 1, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x + 1, y + 1, WATER);
|
||||
moveMetadata(x, y, x + 1, y + 1);
|
||||
return true;
|
||||
}
|
||||
// Try to spread horizontally
|
||||
else {
|
||||
@@ -67,21 +79,25 @@ function updateWater(x, y) {
|
||||
if (goLeft && getPixel(x - 1, y) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x - 1, y, WATER);
|
||||
moved = true;
|
||||
moveMetadata(x, y, x - 1, y);
|
||||
return true;
|
||||
} else if (!goLeft && getPixel(x + 1, y) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x + 1, y, WATER);
|
||||
moved = true;
|
||||
moveMetadata(x, y, x + 1, y);
|
||||
return true;
|
||||
}
|
||||
// Try the other direction if first failed
|
||||
else if (!goLeft && getPixel(x - 1, y) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x - 1, y, WATER);
|
||||
moved = true;
|
||||
moveMetadata(x, y, x - 1, y);
|
||||
return true;
|
||||
} else if (goLeft && getPixel(x + 1, y) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x + 1, y, WATER);
|
||||
moved = true;
|
||||
moveMetadata(x, y, x + 1, y);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -97,15 +113,18 @@ function updateWater(x, y) {
|
||||
if (getPixel(x + dir.dx, y + dir.dy) === FIRE) {
|
||||
setPixel(x + dir.dx, y + dir.dy, EMPTY);
|
||||
removeMetadata(x + dir.dx, y + dir.dy);
|
||||
return true;
|
||||
} else if (getPixel(x + dir.dx, y + dir.dy) === LAVA) {
|
||||
// Water turns lava into stone
|
||||
setPixel(x + dir.dx, y + dir.dy, STONE);
|
||||
removeMetadata(x + dir.dx, y + dir.dy);
|
||||
// Water is consumed in the process
|
||||
setPixel(x, y, EMPTY);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return modified;
|
||||
}
|
||||
|
||||
function updateDirt(x, y) {
|
||||
@@ -113,25 +132,30 @@ function updateDirt(x, y) {
|
||||
if (getPixel(x, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x, y + 1, DIRT);
|
||||
return true;
|
||||
}
|
||||
// Try to move down-left or down-right
|
||||
else if (getPixel(x - 1, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x - 1, y + 1, DIRT);
|
||||
return true;
|
||||
}
|
||||
else if (getPixel(x + 1, y + 1) === EMPTY) {
|
||||
setPixel(x, y, EMPTY);
|
||||
setPixel(x + 1, y + 1, DIRT);
|
||||
return true;
|
||||
}
|
||||
// Dirt can displace water
|
||||
else if (getPixel(x, y + 1) === WATER) {
|
||||
setPixel(x, y, WATER);
|
||||
setPixel(x, y + 1, DIRT);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Dirt can turn into grass if exposed to air above
|
||||
if (getPixel(x, y - 1) === EMPTY && Math.random() < 0.001) {
|
||||
setPixel(x, y, GRASS);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Dirt can randomly spawn seeds if exposed to air above
|
||||
@@ -140,12 +164,17 @@ function updateDirt(x, y) {
|
||||
const seedRoll = Math.random();
|
||||
if (seedRoll < 0.0002) { // Grass blade seed (most common)
|
||||
setPixel(x, y - 1, SEED);
|
||||
return true;
|
||||
} else if (seedRoll < 0.00025) { // Flower seed (less common)
|
||||
setPixel(x, y - 1, SEED);
|
||||
// Mark this seed as a flower seed (will be handled in updateSeed)
|
||||
setMetadata(x, y - 1, { type: 'flower' });
|
||||
return true;
|
||||
} else if (seedRoll < 0.00026) { // Tree seed (rare)
|
||||
setPixel(x, y - 1, TREE_SEED);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user