import { useEffect, useState } from "react"; import Particles, { initParticlesEngine } from "@tsparticles/react"; import { loadSlim } from "@tsparticles/slim"; import type { AtmosphereState } from "../lib/atmosphereTypes"; import { getRainConfig, getEmbersConfig } from "../lib/particleConfigs"; // Module-level singleton so the engine is only initialised once let enginePromise: Promise | null = null; function ensureEngine(): Promise { if (!enginePromise) { enginePromise = initParticlesEngine(async (engine) => { await loadSlim(engine); }); } return enginePromise; } interface ParticleOverlayProps { atmosphere: AtmosphereState; } export default function ParticleOverlay({ atmosphere }: ParticleOverlayProps) { const [ready, setReady] = useState(false); useEffect(() => { ensureEngine().then(() => setReady(true)); }, []); if (!ready) return null; const { rain, embers } = atmosphere; return ( <> {rain.active && ( )} {embers.active && ( )} ); }