Skip to content

Particle Emitter

The ParticleEmitter component creates particle effects using Love2D's particle system.

Quick Start

teal
local gfx = require("tecs2d.gfx")

-- Define emitter configuration
local fireConfig = gfx.ParticleEmitterConfig({
    texture = love.graphics.newImage("particle.png"),
    bufferSize = 500,
    emissionRate = 50,
    lifetime = {0.5, 1.5},
    speed = {50, 100},
    spread = math.pi / 4,
    colors = {
        {1, 0.8, 0.2, 1},    -- Start: yellow
        {1, 0.3, 0.1, 0.5},  -- Mid: orange
        {0.2, 0.1, 0.1, 0}   -- End: fade out
    },
    sizes = {1, 0.5, 0},
    rotation = {0, math.pi * 2},
    spin = {-math.pi, math.pi}
})

-- Spawn emitter at position
world:spawn(
    tecs.builtins.Transform(200, 300, 5),
    gfx.ParticleEmitter(fireConfig)
)

Configuration

PropertyTypeDescription
textureTextureParticle texture
bufferSizeintegerMaximum particle count
emissionRatenumberParticles per second
lifetime{min, max}Particle lifetime range (seconds)
speed{min, max}Initial speed range (pixels/second)
spreadnumberEmission angle spread (radians)
directionnumberBase emission direction (radians)
colorsarray of {r,g,b,a}Color gradient over lifetime
sizes{number...}Size gradient over lifetime (0-1)
rotation{min, max}Initial rotation range (radians)
spin{min, max}Rotation speed range (radians/second)
acceleration{x, y}Linear acceleration (pixels/second²)
radialAcceleration{min, max}Radial acceleration
tangentialAcceleration{min, max}Tangential acceleration

Emitter Control

teal
local emitter = world:get(entityId, gfx.ParticleEmitter)
local ps = emitter.system

-- Start/stop emission
ps:start()
ps:stop()

-- Check if emitting
if ps:isActive() then ... end

-- Get current particle count
local count = ps:getCount()