UNPKG

ngx-screen-saver

Version:
45 lines 7.02 kB
import { reverseLoop } from '../../utils/reverse-loop'; import { Firework } from './firework'; export const fireworks = (p5) => { const WIDTH = p5.windowWidth; const HEIGHT = p5.windowHeight; const MAX_FIREWORKS = 10; const SAFE_MARGIN = 40; const SAFE_SPACE = { xStart: SAFE_MARGIN, xEnd: WIDTH - SAFE_MARGIN, yStart: 0, yEnd: HEIGHT - SAFE_MARGIN, }; const fireworksArr = []; let backgroundImg; // PRELOAD p5.preload = () => { backgroundImg = p5.loadImage('assets/ngx-screen-saver/fireworks_bg.jpg'); }; // SETUP p5.setup = () => { p5.createCanvas(WIDTH, HEIGHT).addClass('ngx-screen-saver'); p5.angleMode(p5.DEGREES); backgroundImg.resize(WIDTH, HEIGHT); for (let i = 0; i < MAX_FIREWORKS; i++) { fireworksArr.push(new Firework(p5, p5.random(SAFE_SPACE.xStart, SAFE_SPACE.xEnd), p5.random(SAFE_SPACE.yStart, SAFE_SPACE.yEnd))); } }; // DRAW p5.draw = () => { const heightOffset = HEIGHT - backgroundImg.height; p5.image(backgroundImg, 0, heightOffset); p5.translate(0, HEIGHT); // moves the origin to bottom left p5.scale(1, -1); // flips the y values so y increases "up" reverseLoop(fireworksArr, (firework, idx) => { firework.update(); firework.draw(); if (firework.phase === 'dispose') { fireworksArr.splice(idx, 1); fireworksArr.push(new Firework(p5, p5.random(SAFE_SPACE.xStart, SAFE_SPACE.xEnd), p5.random(SAFE_SPACE.yStart, SAFE_SPACE.yEnd))); } }); }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXdvcmtzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNjcmVlbi1zYXZlci9zcmMvbGliL3NjcmVlbi1zYXZlcnMvZmlyZXdvcmtzL2ZpcmV3b3Jrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0QyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxFQUFNLEVBQUUsRUFBRTtJQUNsQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO0lBQzdCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7SUFDL0IsTUFBTSxhQUFhLEdBQVcsRUFBRSxDQUFDO0lBRWpDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN2QixNQUFNLFVBQVUsR0FBRztRQUNqQixNQUFNLEVBQUUsV0FBVztRQUNuQixJQUFJLEVBQUUsS0FBSyxHQUFHLFdBQVc7UUFDekIsTUFBTSxFQUFFLENBQUM7UUFDVCxJQUFJLEVBQUUsTUFBTSxHQUFHLFdBQVc7S0FDM0IsQ0FBQztJQUVGLE1BQU0sWUFBWSxHQUFlLEVBQUUsQ0FBQztJQUVwQyxJQUFJLGFBQXVCLENBQUM7SUFFNUIsVUFBVTtJQUNWLEVBQUUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1FBQ2hCLGFBQWEsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDO0lBRUYsUUFBUTtJQUNSLEVBQUUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2QsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDNUQsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxZQUFZLENBQUMsSUFBSSxDQUNmLElBQUksUUFBUSxDQUNWLEVBQUUsRUFDRixFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUM3QyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUNGLENBQUM7U0FDSDtJQUNILENBQUMsQ0FBQztJQUVGLE9BQU87SUFDUCxFQUFFLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRTtRQUNiLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBRW5ELEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUV6QyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUMzRCxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMseUNBQXlDO1FBRTFELFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDMUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVoQixJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFO2dCQUNoQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFNUIsWUFBWSxDQUFDLElBQUksQ0FDZixJQUFJLFFBQVEsQ0FDVixFQUFFLEVBQ0YsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFDN0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FDOUMsQ0FDRixDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwNSBmcm9tICdwNSc7XHJcbmltcG9ydCB7IHJldmVyc2VMb29wIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmV2ZXJzZS1sb29wJztcclxuaW1wb3J0IHsgRmlyZXdvcmsgfSBmcm9tICcuL2ZpcmV3b3JrJztcclxuXHJcbmV4cG9ydCBjb25zdCBmaXJld29ya3MgPSAocDU6IHA1KSA9PiB7XHJcbiAgY29uc3QgV0lEVEggPSBwNS53aW5kb3dXaWR0aDtcclxuICBjb25zdCBIRUlHSFQgPSBwNS53aW5kb3dIZWlnaHQ7XHJcbiAgY29uc3QgTUFYX0ZJUkVXT1JLUzogbnVtYmVyID0gMTA7XHJcblxyXG4gIGNvbnN0IFNBRkVfTUFSR0lOID0gNDA7XHJcbiAgY29uc3QgU0FGRV9TUEFDRSA9IHtcclxuICAgIHhTdGFydDogU0FGRV9NQVJHSU4sXHJcbiAgICB4RW5kOiBXSURUSCAtIFNBRkVfTUFSR0lOLFxyXG4gICAgeVN0YXJ0OiAwLFxyXG4gICAgeUVuZDogSEVJR0hUIC0gU0FGRV9NQVJHSU4sXHJcbiAgfTtcclxuXHJcbiAgY29uc3QgZmlyZXdvcmtzQXJyOiBGaXJld29ya1tdID0gW107XHJcblxyXG4gIGxldCBiYWNrZ3JvdW5kSW1nOiBwNS5JbWFnZTtcclxuXHJcbiAgLy8gUFJFTE9BRFxyXG4gIHA1LnByZWxvYWQgPSAoKSA9PiB7XHJcbiAgICBiYWNrZ3JvdW5kSW1nID0gcDUubG9hZEltYWdlKCdhc3NldHMvbmd4LXNjcmVlbi1zYXZlci9maXJld29ya3NfYmcuanBnJyk7XHJcbiAgfTtcclxuXHJcbiAgLy8gU0VUVVBcclxuICBwNS5zZXR1cCA9ICgpID0+IHtcclxuICAgIHA1LmNyZWF0ZUNhbnZhcyhXSURUSCwgSEVJR0hUKS5hZGRDbGFzcygnbmd4LXNjcmVlbi1zYXZlcicpO1xyXG4gICAgcDUuYW5nbGVNb2RlKHA1LkRFR1JFRVMpO1xyXG5cclxuICAgIGJhY2tncm91bmRJbWcucmVzaXplKFdJRFRILCBIRUlHSFQpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTUFYX0ZJUkVXT1JLUzsgaSsrKSB7XHJcbiAgICAgIGZpcmV3b3Jrc0Fyci5wdXNoKFxyXG4gICAgICAgIG5ldyBGaXJld29yayhcclxuICAgICAgICAgIHA1LFxyXG4gICAgICAgICAgcDUucmFuZG9tKFNBRkVfU1BBQ0UueFN0YXJ0LCBTQUZFX1NQQUNFLnhFbmQpLFxyXG4gICAgICAgICAgcDUucmFuZG9tKFNBRkVfU1BBQ0UueVN0YXJ0LCBTQUZFX1NQQUNFLnlFbmQpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIERSQVdcclxuICBwNS5kcmF3ID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaGVpZ2h0T2Zmc2V0ID0gSEVJR0hUIC0gYmFja2dyb3VuZEltZy5oZWlnaHQ7XHJcblxyXG4gICAgcDUuaW1hZ2UoYmFja2dyb3VuZEltZywgMCwgaGVpZ2h0T2Zmc2V0KTtcclxuXHJcbiAgICBwNS50cmFuc2xhdGUoMCwgSEVJR0hUKTsgLy8gbW92ZXMgdGhlIG9yaWdpbiB0byBib3R0b20gbGVmdFxyXG4gICAgcDUuc2NhbGUoMSwgLTEpOyAvLyBmbGlwcyB0aGUgeSB2YWx1ZXMgc28geSBpbmNyZWFzZXMgXCJ1cFwiXHJcblxyXG4gICAgcmV2ZXJzZUxvb3AoZmlyZXdvcmtzQXJyLCAoZmlyZXdvcmssIGlkeCkgPT4ge1xyXG4gICAgICBmaXJld29yay51cGRhdGUoKTtcclxuICAgICAgZmlyZXdvcmsuZHJhdygpO1xyXG5cclxuICAgICAgaWYgKGZpcmV3b3JrLnBoYXNlID09PSAnZGlzcG9zZScpIHtcclxuICAgICAgICBmaXJld29ya3NBcnIuc3BsaWNlKGlkeCwgMSk7XHJcblxyXG4gICAgICAgIGZpcmV3b3Jrc0Fyci5wdXNoKFxyXG4gICAgICAgICAgbmV3IEZpcmV3b3JrKFxyXG4gICAgICAgICAgICBwNSxcclxuICAgICAgICAgICAgcDUucmFuZG9tKFNBRkVfU1BBQ0UueFN0YXJ0LCBTQUZFX1NQQUNFLnhFbmQpLFxyXG4gICAgICAgICAgICBwNS5yYW5kb20oU0FGRV9TUEFDRS55U3RhcnQsIFNBRkVfU1BBQ0UueUVuZClcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9O1xyXG59O1xyXG4iXX0=