UNPKG

ngx-screen-saver

Version:
68 lines 10.7 kB
import { randomHslFromRange } from '../../utils/random-hsl-from-range'; import { reverseLoop } from '../../utils/reverse-loop'; import { Particle } from './particle'; export class Firework { constructor(p5, posX, maxHeight) { this.p5 = p5; this.posX = posX; this.maxHeight = maxHeight; this.pos = this.p5.createVector(this.posX, 0); this.vel = this.p5.createVector(0, this.p5.random(1.5, 2.5)); this.randomHue = this.p5.random(0, 360); this.phase = 'fly'; this.explosionParticlesCreated = false; this.fireParticles = []; this.explosionParticles = []; } update() { this.p5.push(); this.p5.colorMode(this.p5.HSL); if (this.phase === 'fly') { this.pos.add(this.vel); this.fireParticles.push(new Particle(this.p5, this.p5.createVector(this.pos.x + this.p5.random(-2, 2), this.pos.y + this.p5.random(-2, 2)), this.p5.createVector(0, 0), 3, randomHslFromRange(this.p5, 30, 20))); if (this.fireParticles.length > 30) { this.fireParticles.splice(0, 1); } if (this.pos.y >= this.maxHeight) { this.phase = 'explode'; } } if (this.phase === 'explode') { if (this.fireParticles.length > 0) { this.fireParticles.splice(0, 1); } if (this.explosionParticlesCreated === false) { for (let i = 0; i < 150; i++) { const newParticle = new Particle(this.p5, this.pos.copy(), this.p5.createVector(1, 0), 5, randomHslFromRange(this.p5, this.randomHue, 20), this.p5.random(0, 360)); this.explosionParticles.push(newParticle); } this.explosionParticlesCreated = true; } if (this.explosionParticles.length <= 0) { this.phase = 'dispose'; } } this.p5.pop(); } draw() { this.p5.noStroke(); if (this.fireParticles.length > 0) { reverseLoop(this.fireParticles, (particle, idx) => { particle.update(); particle.draw(); }); } if (this.explosionParticles.length > 0) { reverseLoop(this.explosionParticles, (particle, idx) => { if (this.pos.dist(particle.pos) <= 50) { particle.update(); particle.draw(); } else { this.explosionParticles.splice(idx, 1); } }); } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2NyZWVuLXNhdmVyL3NyYy9saWIvc2NyZWVuLXNhdmVycy9maXJld29ya3MvZmlyZXdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdEMsTUFBTSxPQUFPLFFBQVE7SUFDbkIsWUFBb0IsRUFBTSxFQUFTLElBQVksRUFBUyxTQUFpQjtRQUFyRCxPQUFFLEdBQUYsRUFBRSxDQUFJO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFFekUsUUFBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBRyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxjQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5DLFVBQUssR0FBa0MsS0FBSyxDQUFDO1FBRTdDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUUzQyxrQkFBYSxHQUFlLEVBQUUsQ0FBQztRQUMvQix1QkFBa0IsR0FBZSxFQUFFLENBQUM7SUFYd0MsQ0FBQztJQWE3RSxNQUFNO1FBQ0osSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksUUFBUSxDQUNWLElBQUksQ0FBQyxFQUFFLEVBQ1AsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDbkMsRUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzFCLENBQUMsRUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDcEMsQ0FDRixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqQztZQUVELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7YUFDeEI7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNqQztZQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixLQUFLLEtBQUssRUFBRTtnQkFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxRQUFRLENBQzlCLElBQUksQ0FBQyxFQUFFLEVBQ1AsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFDZixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQzFCLENBQUMsRUFDRCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQy9DLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDdkIsQ0FBQztvQkFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMzQztnQkFFRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO2FBQ3ZDO1lBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7YUFDeEI7U0FDRjtRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNoRCxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN0QyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNyRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3JDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEIsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNqQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDeEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHA1IGZyb20gJ3A1JztcclxuaW1wb3J0IHsgcmFuZG9tSHNsRnJvbVJhbmdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmFuZG9tLWhzbC1mcm9tLXJhbmdlJztcclxuaW1wb3J0IHsgcmV2ZXJzZUxvb3AgfSBmcm9tICcuLi8uLi91dGlscy9yZXZlcnNlLWxvb3AnO1xyXG5pbXBvcnQgeyBQYXJ0aWNsZSB9IGZyb20gJy4vcGFydGljbGUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpcmV3b3JrIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHA1OiBwNSwgcHVibGljIHBvc1g6IG51bWJlciwgcHVibGljIG1heEhlaWdodDogbnVtYmVyKSB7fVxyXG5cclxuICBwb3MgPSB0aGlzLnA1LmNyZWF0ZVZlY3Rvcih0aGlzLnBvc1gsIDApO1xyXG4gIHZlbCA9IHRoaXMucDUuY3JlYXRlVmVjdG9yKDAsIHRoaXMucDUucmFuZG9tKDEuNSwgMi41KSk7XHJcbiAgcmFuZG9tSHVlID0gdGhpcy5wNS5yYW5kb20oMCwgMzYwKTtcclxuXHJcbiAgcGhhc2U6ICdmbHknIHwgJ2V4cGxvZGUnIHwgJ2Rpc3Bvc2UnID0gJ2ZseSc7XHJcblxyXG4gIGV4cGxvc2lvblBhcnRpY2xlc0NyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgZmlyZVBhcnRpY2xlczogUGFydGljbGVbXSA9IFtdO1xyXG4gIGV4cGxvc2lvblBhcnRpY2xlczogUGFydGljbGVbXSA9IFtdO1xyXG5cclxuICB1cGRhdGUoKSB7XHJcbiAgICB0aGlzLnA1LnB1c2goKTtcclxuICAgIHRoaXMucDUuY29sb3JNb2RlKHRoaXMucDUuSFNMKTtcclxuXHJcbiAgICBpZiAodGhpcy5waGFzZSA9PT0gJ2ZseScpIHtcclxuICAgICAgdGhpcy5wb3MuYWRkKHRoaXMudmVsKTtcclxuXHJcbiAgICAgIHRoaXMuZmlyZVBhcnRpY2xlcy5wdXNoKFxyXG4gICAgICAgIG5ldyBQYXJ0aWNsZShcclxuICAgICAgICAgIHRoaXMucDUsXHJcbiAgICAgICAgICB0aGlzLnA1LmNyZWF0ZVZlY3RvcihcclxuICAgICAgICAgICAgdGhpcy5wb3MueCArIHRoaXMucDUucmFuZG9tKC0yLCAyKSxcclxuICAgICAgICAgICAgdGhpcy5wb3MueSArIHRoaXMucDUucmFuZG9tKC0yLCAyKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHRoaXMucDUuY3JlYXRlVmVjdG9yKDAsIDApLFxyXG4gICAgICAgICAgMyxcclxuICAgICAgICAgIHJhbmRvbUhzbEZyb21SYW5nZSh0aGlzLnA1LCAzMCwgMjApXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmlyZVBhcnRpY2xlcy5sZW5ndGggPiAzMCkge1xyXG4gICAgICAgIHRoaXMuZmlyZVBhcnRpY2xlcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBvcy55ID49IHRoaXMubWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5waGFzZSA9ICdleHBsb2RlJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBoYXNlID09PSAnZXhwbG9kZScpIHtcclxuICAgICAgaWYgKHRoaXMuZmlyZVBhcnRpY2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5maXJlUGFydGljbGVzLnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZXhwbG9zaW9uUGFydGljbGVzQ3JlYXRlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE1MDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdQYXJ0aWNsZSA9IG5ldyBQYXJ0aWNsZShcclxuICAgICAgICAgICAgdGhpcy5wNSxcclxuICAgICAgICAgICAgdGhpcy5wb3MuY29weSgpLFxyXG4gICAgICAgICAgICB0aGlzLnA1LmNyZWF0ZVZlY3RvcigxLCAwKSxcclxuICAgICAgICAgICAgNSxcclxuICAgICAgICAgICAgcmFuZG9tSHNsRnJvbVJhbmdlKHRoaXMucDUsIHRoaXMucmFuZG9tSHVlLCAyMCksXHJcbiAgICAgICAgICAgIHRoaXMucDUucmFuZG9tKDAsIDM2MClcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy5leHBsb3Npb25QYXJ0aWNsZXMucHVzaChuZXdQYXJ0aWNsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmV4cGxvc2lvblBhcnRpY2xlc0NyZWF0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5leHBsb3Npb25QYXJ0aWNsZXMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICB0aGlzLnBoYXNlID0gJ2Rpc3Bvc2UnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wNS5wb3AoKTtcclxuICB9XHJcblxyXG4gIGRyYXcoKSB7XHJcbiAgICB0aGlzLnA1Lm5vU3Ryb2tlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZmlyZVBhcnRpY2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldmVyc2VMb29wKHRoaXMuZmlyZVBhcnRpY2xlcywgKHBhcnRpY2xlLCBpZHgpID0+IHtcclxuICAgICAgICBwYXJ0aWNsZS51cGRhdGUoKTtcclxuICAgICAgICBwYXJ0aWNsZS5kcmF3KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4cGxvc2lvblBhcnRpY2xlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldmVyc2VMb29wKHRoaXMuZXhwbG9zaW9uUGFydGljbGVzLCAocGFydGljbGUsIGlkeCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnBvcy5kaXN0KHBhcnRpY2xlLnBvcykgPD0gNTApIHtcclxuICAgICAgICAgIHBhcnRpY2xlLnVwZGF0ZSgpO1xyXG4gICAgICAgICAgcGFydGljbGUuZHJhdygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGxvc2lvblBhcnRpY2xlcy5zcGxpY2UoaWR4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=