From bdd68cc2933bb50f05c85e1ac34c5570607b572a 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 492857eb..90934b00 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}