context = {
let ctx;
if (this) {
ctx = this;
if (ctx.interval) clearInterval(ctx.interval);
} else {
ctx = DOM.context2d(width, height);
ctx.canvas.width = width;
ctx.canvas.height = height;
ctx.canvas.id = "canvas";
ctx.canvas.style.width = "100%";
ctx.canvas.style.imageRendering = "pixelated";
if (!ctx.canvas.style.imageRendering) {
ctx.canvas.style.imageRendering = "crisp-edges";
}
}
function animate() {
pixels.forEach(spreadFire);
let color = ctx.getImageData(0, 0, width, height);
pixels.slice(width).forEach((p, i) => {
let pixel = palette[p];
let offset = i * 4;
color.data[offset + 0] = pixel.r;
color.data[offset + 1] = pixel.g;
color.data[offset + 2] = pixel.b;
color.data[offset + 3] = 255;
});
ctx.putImageData(color, 0, 0);
}
ctx.interval = setInterval(animate, framedelay);
return ctx;
}