Merge pull request #1291 from eliwhitfield-dot/patch-2
Create black_hole.js
This commit is contained in:
commit
b1cd7e2700
|
|
@ -0,0 +1,43 @@
|
|||
elements.black_hole = {
|
||||
color: "#000000",
|
||||
tick: function(pixel) {
|
||||
// Attract other pixels within a 9-pixel radius
|
||||
for (let dx = -9; dx <= 9; dx++) {
|
||||
for (let dy = -9; dy <= 9; dy++) {
|
||||
let x = pixel.x + dx;
|
||||
let y = pixel.y + dy;
|
||||
|
||||
// Ignore out-of-bounds
|
||||
if (!isEmpty(x, y, true)) {
|
||||
let other = pixelMap[x]?.[y];
|
||||
if (other && other.element !== "black_hole") {
|
||||
// Attraction: move other pixel towards the black hole
|
||||
let stepX = Math.sign(pixel.x - other.x);
|
||||
let stepY = Math.sign(pixel.y - other.y);
|
||||
tryMove(other, other.x + stepX, other.y + stepY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Convert touching pixels into black holes
|
||||
const dirs = [
|
||||
[1, 0], [-1, 0], [0, 1], [0, -1],
|
||||
[1, 1], [-1, -1], [1, -1], [-1, 1]
|
||||
];
|
||||
for (let d of dirs) {
|
||||
let nx = pixel.x + d[0];
|
||||
let ny = pixel.y + d[1];
|
||||
if (isEmpty(nx, ny, true)) continue;
|
||||
|
||||
let touching = pixelMap[nx]?.[ny];
|
||||
if (touching && touching.element !== "black_hole") {
|
||||
changePixel(touching, "black_hole");
|
||||
}
|
||||
}
|
||||
},
|
||||
category: "special",
|
||||
state: "solid",
|
||||
density: 99999, // Very dense (optional)
|
||||
hardness: 1, // Can't be destroyed easily
|
||||
};
|
||||
Loading…
Reference in New Issue