From 649bd1928719b1a4aded574e0ba9bf17f2ef9b55 Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Tue, 3 Feb 2026 08:00:57 +0100 Subject: [PATCH] streak: replace burst flame with rising particle effect Rework the burst mode in FireEffect to use 24 data-driven particles instead of the old scale-and-pop flame. Each particle has unique position, size, delay, and duration for an organic rising effect. Latch burst state in StreakAura so the animation plays its full duration regardless of when the parent resets the prop. --- src/lib/components/FireEffect.svelte | 90 ++++++++++++++++++++++------ src/lib/components/StreakAura.svelte | 14 ++++- 2 files changed, 85 insertions(+), 19 deletions(-) diff --git a/src/lib/components/FireEffect.svelte b/src/lib/components/FireEffect.svelte index 492857e..90934b0 100644 --- a/src/lib/components/FireEffect.svelte +++ b/src/lib/components/FireEffect.svelte @@ -6,9 +6,51 @@ } let { holy = false, burst = false }: Props = $props(); + + const burstParticles = [ + { x: 10, y: 0, size: 8, delay: 0, dur: 1.6 }, + { x: 25, y: 5, size: 10, delay: 0.05, dur: 1.8 }, + { x: 40, y: 10, size: 12, delay: 0.02, dur: 2.0 }, + { x: 55, y: 3, size: 7, delay: 0.1, dur: 1.7 }, + { x: 70, y: 8, size: 9, delay: 0.08, dur: 1.9 }, + { x: 85, y: 2, size: 11, delay: 0.12, dur: 1.6 }, + { x: 15, y: 15, size: 6, delay: 0.15, dur: 1.5 }, + { x: 35, y: 20, size: 10, delay: 0.18, dur: 1.8 }, + { x: 50, y: 12, size: 8, delay: 0.07, dur: 2.0 }, + { x: 65, y: 18, size: 7, delay: 0.22, dur: 1.7 }, + { x: 80, y: 25, size: 9, delay: 0.1, dur: 1.9 }, + { x: 20, y: 30, size: 11, delay: 0.25, dur: 1.6 }, + { x: 45, y: 22, size: 6, delay: 0.03, dur: 1.8 }, + { x: 60, y: 28, size: 10, delay: 0.2, dur: 2.0 }, + { x: 75, y: 15, size: 8, delay: 0.14, dur: 1.5 }, + { x: 30, y: 35, size: 12, delay: 0.28, dur: 1.7 }, + { x: 5, y: 10, size: 7, delay: 0.06, dur: 1.9 }, + { x: 90, y: 20, size: 9, delay: 0.16, dur: 1.6 }, + { x: 48, y: 32, size: 8, delay: 0.3, dur: 2.0 }, + { x: 22, y: 8, size: 10, delay: 0.11, dur: 1.8 }, + { x: 68, y: 35, size: 6, delay: 0.23, dur: 1.5 }, + { x: 38, y: 5, size: 11, delay: 0.04, dur: 1.7 }, + { x: 82, y: 30, size: 7, delay: 0.26, dur: 1.9 }, + { x: 52, y: 18, size: 9, delay: 0.09, dur: 1.6 }, + ]; -
+{#if burst} +
+ {#each burstParticles as p} +
+ {/each} +
+{:else} +
@@ -28,6 +70,7 @@
+{/if}