Skip to content

Systems

Pixi render systems run in a fixed chain. Transform groups are allocated before sprite and text nodes are created. Concrete nodes are created before generic transform, size, and pivot synchronization.

The transform hot path queries only PixiTransformGroup and canonical transform/layout components. Each group resolves directly to a dense array of PixiJS Container objects, so one transform update can be applied to every render role without an entity lookup or concrete node-type branch.

Adding another PixiJS Container implementation requires:

  1. Define a serializable render-intent component that requires PixiTransformGroup.
  2. Add a role for the concrete PixiJS node to the existing registry group.
  3. Increment PixiTransformGroup.revision.
  4. Synchronize role-specific properties through the registry role.
  5. Remove the role synchronously from a component-removal callback.

The revision change causes the existing generic systems to apply current transform, Size, and Pivot values to a newly attached node even when those values did not otherwise change.

Every system of the chain but the last is in the system set PixiSyncSet, and the last, which draws the frame, in PixiDrawSet. A system of another package that places nodes itself is registered in Schedule.Render with .after(PixiSyncSet).before(PixiDrawSet).

Cleanup is role-specific. Removing Sprite destroys only the sprite, while removing Text destroys only the text. Group removal and world/scene teardown destroy every remaining node exactly once without waiting for another render tick.