OptionalenabledConsulted on every update tick; a false return pauses emission while the target
is off-screen or paused, without consumer bookkeeping. Particles already alive
still finish their lives, and an explicit burst() always fires - the callback
gates the tick, not the call.
Optionaloffsetadded to the target position on every sync
OptionaloffsetOptionalvisibleConsulted on every update tick; a false return hides the emitter and every particle
it has in the air, so a fog-of-war gate keeps an aura's spray out of unexplored
space without the consumer re-placing visible every frame. Drawing only: the
simulation keeps stepping behind the invisibility, emission keeps following
enabled, and detach() stops consulting the hook and leaves the emitter visible.
options for ParticleEmitter.attach