neoboxels/js/conway.js
2024-02-28 11:59:54 -05:00

49 lines
No EOL
1.2 KiB
JavaScript

/*
Conway's Game of Life.
*/
let queuedChanges = [];
function life(event, liveTile, deadTile) {
if (event.type != 'tick') return;
let cx = event.data[0];
let cy = event.data[1];
let chunks = event.canvas;
let neighbors = 0;
let currBlock = chunks.getBlock(cx, cy);
liveTile = mainTiles.resolveID(liveTile[0], liveTile[1]);
deadTile = mainTiles.resolveID(deadTile[0], deadTile[1]);
for (let x = -1; x <= 1; x++) {
for (let y = -1; y <= 1; y++) {
if (x == 0 && y == 0) continue;
let blok = chunks.getBlock(cx + x, cy + y);
neighbors += (blok == liveTile) ? 1 : 0;
}
}
if (currBlock == -1 || (currBlock != liveTile && currBlock != deadTile)) return;
if ((neighbors < 2 || neighbors > 3) && currBlock != deadTile) {
chunks.queuedChanges.push([cx, cy, deadTile])
}
if (neighbors == 3 && currBlock != liveTile) {
chunks.queuedChanges.push([cx, cy, liveTile])
}
return true;
}
Tile.prototype.life = function (liveTile, deadTile) {
this.interactions.push(function (event) {
life(event, liveTile, deadTile)
});
return this;
}