ngx-screen-saver
Version:
Screen saver component for Angular.
45 lines • 7.02 kB
JavaScript
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=