Firepit
The firepit simulation creates a warm campfire effect with flickering flames, rising embers, and a soft ambient glow. Each ember rises with a unique trajectory and fades out naturally.
Examples
Campfire
A cozy campfire with default settings.
<template>
<EffectDemo>
<canvas ref="canvasRef"></canvas>
</EffectDemo>
</template>
<script
setup
lang="ts">
import { onMounted, onUnmounted, ref } from 'vue';
import { createFirepit } from '@basmilius/sparkle';
const canvasRef = ref<HTMLCanvasElement>();
let sim: ReturnType<typeof createFirepit> | null = null;
onMounted(() => {
if (canvasRef.value) {
sim = createFirepit();
sim.mount(canvasRef.value).start();
}
});
onUnmounted(() => {
sim?.destroy();
sim = null;
});
</script>Intense blaze
A roaring fire with more embers and taller flames.
<template>
<EffectDemo>
<canvas ref="canvasRef"></canvas>
</EffectDemo>
</template>
<script
setup
lang="ts">
import { onMounted, onUnmounted, ref } from 'vue';
import { createFirepit } from '@basmilius/sparkle';
const canvasRef = ref<HTMLCanvasElement>();
let sim: ReturnType<typeof createFirepit> | null = null;
onMounted(() => {
if (canvasRef.value) {
sim = createFirepit({
embers: 120,
intensity: 1.5,
flameHeight: 0.45
});
sim.mount(canvasRef.value).start();
}
});
onUnmounted(() => {
sim?.destroy();
sim = null;
});
</script>Configuration
All options are passed via a config object:
typescript
import { createFirepit } from '@basmilius/sparkle';
const firepit = createFirepit({
embers: 60,
flameWidth: 0.4,
flameHeight: 0.35,
intensity: 1,
scale: 1
});
firepit.mount(canvas).start();Embers
Control the number of rising ember particles:
typescript
// Subtle, few embers
createFirepit({ embers: 20 });
// Lots of sparks
createFirepit({ embers: 150 });Intensity
Scale the overall brightness and activity:
typescript
// Dying fire
createFirepit({ intensity: 0.4 });
// Blazing bonfire
createFirepit({ intensity: 2 });Flame Size
Control the flame dimensions (as fraction of canvas):
typescript
// Narrow, tall flame
createFirepit({ flameWidth: 0.2, flameHeight: 0.5 });
// Wide, short flame
createFirepit({ flameWidth: 0.6, flameHeight: 0.2 });