{
const frameDuration = 60;
let lastUpdate;
const { width, height } = dimensions;
console.log(dimensions.width, dimensions.height);
const ctx = DOM.context2d(width, height, 1);
const n = 20;
let fishes = [];
for (let i = 0; i < n; i++) {
fishes.push(randomFish(width, height));
}
function updateAndDrawFishes(t) {
if (!lastUpdate) {
lastUpdate = t;
}
const elapsedFrames = Math.floor((t - lastUpdate) / frameDuration);
if (elapsedFrames > 0) {
ctx.clearRect(0, 0, width, height);
lastUpdate = t;
}
let replaceFish = [];
fishes.forEach((fish, i) => {
fish.tick(elapsedFrames);
fish.draw(ctx);
if (fish.x > width + 100) {
replaceFish.push(i);
}
});
replaceFish.forEach((idx) =>
fishes.splice(idx, 1, randomFish(width, height, -100))
);
const id = requestAnimationFrame((t) => updateAndDrawFishes(t));
invalidation.then(() => cancelAnimationFrame(id));
}
const id = requestAnimationFrame(updateAndDrawFishes);
invalidation.then(() => cancelAnimationFrame(id));
ctx.canvas.style.background =
"linear-gradient(20deg, lightblue 0%, beige 50%, white 100%)";
return ctx.canvas;
}