import {global} from "./index"; export interface Particle { x: number, y: number, lifetime: number, timer: number, startSize: number, finalSize: number, startRotation: number, finalRotation: number, startOpacity: number, endOpacity: number, startR: number, endR: number, startG: number, endG: number, startB: number, endB: number, velocity_x: number, velocity_y: number } let particles: Particle[] = []; export function createParticle(particle: Particle) { particles.push(particle); } function lerp(start: number, end: number, time: number): number { return start + time * (end - start); } export function drawParticle(particle: Particle) { let t = particle.timer / particle.lifetime; let size = lerp(particle.startSize, particle.finalSize, t); let rotation = lerp(particle.startRotation, particle.finalRotation, t); global.context.save(); global.context.translate(particle.x - global.me!.x, particle.y - global.me!.y); global.context.rotate(rotation); let opacity = Math.trunc(lerp(particle.startOpacity, particle.endOpacity, t)); let r = Math.trunc(lerp(particle.startR, particle.endR, t)); let g = Math.trunc(lerp(particle.startG, particle.endG, t)); let b = Math.trunc(lerp(particle.startB, particle.endB, t)); global.context.fillStyle = `rgb(${r} ${g} ${b} / ${opacity}%)`; global.context.fillRect(-size/2, -size/2, size, size); global.context.restore(); } export function drawParticles() { for (let i = 0; i < particles.length; i++) { drawParticle(particles[i]); } } export function tickParticles(delta: number) { let keptParticles = [] for (let i = 0; i < particles.length; i++) { particles[i].timer += delta; particles[i].x += particles[i].velocity_x * delta; particles[i].y += particles[i].velocity_y * delta; if (!(particles[i].timer > particles[i].lifetime)) { keptParticles.push(particles[i]); } } particles = keptParticles; } export function tickAndDrawParticles(delta: number) { tickParticles(delta); drawParticles(); }