ParticleStorage class Particles

Structure-of-arrays storage for one emitter's live particles, with an O(1) free pool.

Each particle property is its own tightly packed Float32List column (posX, velX, ...) rather than a List<Particle> of objects, so the per-frame update loop sweeps contiguous memory and never allocates or pressures the GC. Live particles always occupy the dense prefix [0, aliveCount); spawn appends at the end and kill fills the freed slot with the last live particle (swap-with-last compaction), so the live set stays packed at the cost of not preserving order (rendering re-sorts anyway).

Color is stored as four floats per particle (matching the billboard instance buffer's float32x4 color attribute and the over-life color math). A packed RGBA8 column is a later memory optimization.

Constructors

ParticleStorage(int capacity)
Allocates storage for up to capacity simultaneous particles.

Properties

age Float32List
Seconds since the particle was spawned.
final
aliveCount int
The number of live particles. They occupy columns [0, aliveCount).
no setter
angularVelocity Float32List
In-plane rotation (radians) and its rate of change (radians/second).
final
axisX Float32List
Unit 3D rotation axis, set to a uniformly random direction at spawn. Billboards ignore it (their rotation is in-plane); mesh particles tumble around it by rotation.
final
axisY Float32List
Unit 3D rotation axis, set to a uniformly random direction at spawn. Billboards ignore it (their rotation is in-plane); mesh particles tumble around it by rotation.
final
axisZ Float32List
Unit 3D rotation axis, set to a uniformly random direction at spawn. Billboards ignore it (their rotation is in-plane); mesh particles tumble around it by rotation.
final
baseSize Float32List
Current rendered size (world units) and the size set at spawn, which size-over-life scales.
final
capacity int
The maximum number of simultaneous particles.
final
colorA Float32List
Current linear RGBA color (premultiplication happens in the shader).
final
colorB Float32List
Current linear RGBA color (premultiplication happens in the shader).
final
colorG Float32List
Current linear RGBA color (premultiplication happens in the shader).
final
colorR Float32List
Current linear RGBA color (premultiplication happens in the shader).
final
frame Float32List
Flipbook frame index (fractional values round to the nearest cell). Left at zero unless a module (or spawn code) writes it.
final
hashCode int
The hash code for this object.
no setterinherited
isFull bool
Whether the pool is at capacity.
no setter
lifetime Float32List
Total lifetime in seconds; the particle dies once age exceeds it.
final
posX Float32List
World-space position (in the emitter node's local space).
final
posY Float32List
World-space position (in the emitter node's local space).
final
posZ Float32List
World-space position (in the emitter node's local space).
final
random01 Float32List
Per-particle random in [0, 1), written at spawn. Distributions sample against it (directly, or via randomFor for an independent stream) so a particle's randomized properties are stable for its whole life.
final
rotation Float32List
In-plane rotation (radians) and its rate of change (radians/second).
final
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
size Float32List
Current rendered size (world units) and the size set at spawn, which size-over-life scales.
final
velX Float32List
Linear velocity, world units per second.
final
velY Float32List
Linear velocity, world units per second.
final
velZ Float32List
Linear velocity, world units per second.
final

Methods

clear() → void
Removes every particle.
kill(int index) → void
Removes the particle at index by moving the last live particle into its slot and shrinking the live set. The moved particle's index changes, so a reverse iteration (for (var i = aliveCount - 1; i >= 0; i--)) visits every particle exactly once even while killing.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
randomFor(int index, int salt) double
Derives an independent random in [0, 1) for particle index from its stored random01 and a salt, so different randomized properties (size, rotation, color) do not all share one stream and correlate.
spawn() int
Reserves a slot for a new particle and returns its index, or -1 when the pool is full. The caller initializes the columns at that index (including random01).
toString() String
A string representation of this object.
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited