feat: Increase gravity strength for falling elements

This commit is contained in:
Kacper Kostka (aider) 2025-04-05 16:17:02 +02:00
parent ebb96846ed
commit ba4fa3eb37
3 changed files with 108 additions and 27 deletions

View File

@ -1,11 +1,24 @@
// Basic element behaviors (sand, water, dirt) // Basic element behaviors (sand, water, dirt)
function updateSand(x, y) { function updateSand(x, y) {
// Try to move down // Try to move down with stronger gravity (up to 3 pixels at once)
if (getPixel(x, y + 1) === EMPTY) { let maxFall = 3;
let newY = y;
// Check how far down we can fall
for (let i = 1; i <= maxFall; i++) {
if (getPixel(x, y + i) === EMPTY) {
newY = y + i;
} else {
break;
}
}
if (newY > y) {
// Fall straight down as far as possible
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x, y + 1, SAND); setPixel(x, newY, SAND);
return true; return true;
} }
// Try to move down-left or down-right // Try to move down-left or down-right
else if (getPixel(x - 1, y + 1) === EMPTY) { else if (getPixel(x - 1, y + 1) === EMPTY) {
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
@ -49,13 +62,26 @@ function updateWater(x, y) {
setMetadata(x, y, metadata); setMetadata(x, y, metadata);
} }
// Try to move down // Try to move down with stronger gravity (up to 2 pixels at once)
if (getPixel(x, y + 1) === EMPTY) { let maxFall = 2;
let newY = y;
// Check how far down we can fall
for (let i = 1; i <= maxFall; i++) {
if (getPixel(x, y + i) === EMPTY) {
newY = y + i;
} else {
break;
}
}
if (newY > y) {
// Fall straight down as far as possible
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x, y + 1, WATER); setPixel(x, newY, WATER);
moveMetadata(x, y, x, y + 1); moveMetadata(x, y, x, newY);
return true; return true;
} }
// Try to move down-left or down-right // Try to move down-left or down-right
else if (getPixel(x - 1, y + 1) === EMPTY) { else if (getPixel(x - 1, y + 1) === EMPTY) {
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
@ -128,12 +154,25 @@ function updateWater(x, y) {
} }
function updateDirt(x, y) { function updateDirt(x, y) {
// Try to move down // Try to move down with stronger gravity (up to 3 pixels at once)
if (getPixel(x, y + 1) === EMPTY) { let maxFall = 3;
let newY = y;
// Check how far down we can fall
for (let i = 1; i <= maxFall; i++) {
if (getPixel(x, y + i) === EMPTY) {
newY = y + i;
} else {
break;
}
}
if (newY > y) {
// Fall straight down as far as possible
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x, y + 1, DIRT); setPixel(x, newY, DIRT);
return true; return true;
} }
// Try to move down-left or down-right // Try to move down-left or down-right
else if (getPixel(x - 1, y + 1) === EMPTY) { else if (getPixel(x - 1, y + 1) === EMPTY) {
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);

View File

@ -1,11 +1,25 @@
// Plant element behaviors (grass, seeds, trees) // Plant element behaviors (grass, seeds, trees)
function updateGrass(x, y) { function updateGrass(x, y) {
// Grass behaves like dirt for physics // Grass behaves like dirt for physics with stronger gravity
if (getPixel(x, y + 1) === EMPTY) { let maxFall = 3;
let newY = y;
// Check how far down we can fall
for (let i = 1; i <= maxFall; i++) {
if (getPixel(x, y + i) === EMPTY) {
newY = y + i;
} else {
break;
}
}
if (newY > y) {
// Fall straight down as far as possible
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x, y + 1, GRASS); setPixel(x, newY, GRASS);
return true; return true;
} }
// Try to move down-left or down-right
else if (getPixel(x - 1, y + 1) === EMPTY) { else if (getPixel(x - 1, y + 1) === EMPTY) {
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x - 1, y + 1, GRASS); setPixel(x - 1, y + 1, GRASS);
@ -46,13 +60,27 @@ function updateGrass(x, y) {
} }
function updateSeed(x, y) { function updateSeed(x, y) {
// Seeds fall like sand // Seeds fall like sand with stronger gravity
if (getPixel(x, y + 1) === EMPTY) { let maxFall = 3;
let newY = y;
// Check how far down we can fall
for (let i = 1; i <= maxFall; i++) {
if (getPixel(x, y + i) === EMPTY) {
newY = y + i;
} else {
break;
}
}
if (newY > y) {
// Fall straight down as far as possible
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x, y + 1, SEED); setPixel(x, newY, SEED);
moveMetadata(x, y, x, y + 1); moveMetadata(x, y, x, newY);
return true; return true;
} }
// Try to move down-left or down-right
else if (getPixel(x - 1, y + 1) === EMPTY) { else if (getPixel(x - 1, y + 1) === EMPTY) {
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x - 1, y + 1, SEED); setPixel(x - 1, y + 1, SEED);

View File

@ -1,12 +1,26 @@
// Tree element behaviors // Tree element behaviors
function updateTreeSeed(x, y) { function updateTreeSeed(x, y) {
// Tree seeds fall like other seeds // Tree seeds fall like other seeds with stronger gravity
if (getPixel(x, y + 1) === EMPTY) { let maxFall = 3;
let newY = y;
// Check how far down we can fall
for (let i = 1; i <= maxFall; i++) {
if (getPixel(x, y + i) === EMPTY) {
newY = y + i;
} else {
break;
}
}
if (newY > y) {
// Fall straight down as far as possible
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x, y + 1, TREE_SEED); setPixel(x, newY, TREE_SEED);
moveMetadata(x, y, x, y + 1); moveMetadata(x, y, x, newY);
return true; return true;
} }
// Try to move down-left or down-right
else if (getPixel(x - 1, y + 1) === EMPTY) { else if (getPixel(x - 1, y + 1) === EMPTY) {
setPixel(x, y, EMPTY); setPixel(x, y, EMPTY);
setPixel(x - 1, y + 1, TREE_SEED); setPixel(x - 1, y + 1, TREE_SEED);