Skip to content

SortGroupComponent

Defined in: packages/renderer/src/SortGroupComponent.ts:156

Renders an entity’s subtree of visuals as a single depth unit.

Under a layer sort (e.g. ySort) every sprite is otherwise a flat child of the layer with its own independent depth key, so a multi-part entity — a body plus an offset held item, or a parent plus child entities — can be split when an unrelated entity’s key falls between its parts. A SortGroupComponent gives the entity its own Pixi sub-container: the members sort within the group, and the group sorts as one unit against the rest of the layer (keyed off the group-owning entity’s own sprite, falling back to its Transform position when it has no sprite of its own).

The group container is kept at identity/origin, so members hold their normal world transforms — adding a group changes paint order only, never position, rotation, or scale (those stay composed by the ECS Transform).

class Knight extends Entity {
setup() {
this.add(new Transform({ position: { x: 200, y: 200 } }));
this.add(new SortGroupComponent({ layer: "world" }));
this.add(new SpriteComponent({ texture: "knight-body", layer: "world" }));
// Child sprites on the "world" layer join the group automatically:
this.spawnChild("weapon", Weapon); // a sprite offset toward the camera
this.spawnChild("plume", Plume);
}
}

Add the component before the visuals it should capture (it also re-homes any already-present subtree visuals when added late, and after save/load). A SortGroupComponent on a descendant entity starts its own independent unit rather than nesting inside the ancestor’s.

  • Component

new SortGroupComponent(options?): SortGroupComponent

Defined in: packages/renderer/src/SortGroupComponent.ts:167

SortGroupComponentOptions

SortGroupComponent

Component.constructor

readonly container: Container

Defined in: packages/renderer/src/SortGroupComponent.ts:158

The group’s Pixi container. Kept at identity; holds the member visuals.


enabled: boolean

Defined in: packages/core/dist/index.d.ts:1872

Whether this component is active. Disabled components are skipped by ComponentUpdateSystem.

Component.enabled


entity: Entity

Defined in: packages/core/dist/index.d.ts:1870

Back-reference to the owning entity. Set by the engine when the component is added to an entity. Do not set manually.

Component.entity


innerSort: LayerSortFn | undefined

Defined in: packages/renderer/src/SortGroupComponent.ts:162

Depth key for intra-group member order, or undefined for insertion order.


readonly layer: string

Defined in: packages/renderer/src/SortGroupComponent.ts:160

Layer this group renders into.

get context(): EngineContext

Defined in: packages/core/dist/index.d.ts:1885

Access the EngineContext from the entity’s scene. Throws if the entity is not in a scene.

EngineContext

Component.context


get scene(): Scene

Defined in: packages/core/dist/index.d.ts:1880

Access the entity’s scene. Throws if the entity is not in a scene. Prefer this over threading through this.entity.scene in component code.

Scene

Component.scene

_runCleanups(): void

Defined in: packages/core/dist/index.d.ts:1926

Internal

Run and clear all registered cleanups. Called by Entity.remove() and Entity._performDestroy() before onRemove/onDestroy.

void

Component._runCleanups


protected addCleanup(fn): void

Defined in: packages/core/dist/index.d.ts:1920

Register a cleanup function to run when this component is removed or destroyed.

() => void

void

Component.addCleanup


afterRestore(): void

Defined in: packages/renderer/src/SortGroupComponent.ts:189

Re-home the subtree once parent/child links exist (save/load restore).

void

Component.afterRestore


optional fixedUpdate(dt): void

Defined in: packages/core/dist/index.d.ts:1936

Called every fixed timestep by the built-in ComponentUpdateSystem.

number

void

Component.fixedUpdate


protected listen<T>(entity, token, handler): void

Defined in: packages/core/dist/index.d.ts:1912

Subscribe to events on any entity, auto-unsubscribe on removal.

T

Entity

EventToken<T>

(data) => void

void

Component.listen


protected listenScene<T>(token, handler): void

Defined in: packages/core/dist/index.d.ts:1918

Subscribe to scene-level events, auto-unsubscribe on removal. Handlers fire for bubbled entity events (entity = source) and scene.emit events (entity = undefined).

T

EventToken<T>

(data, entity?) => void

void

Component.listenScene


onAdd(): void

Defined in: packages/renderer/src/SortGroupComponent.ts:178

Called when the component is added to an entity.

void

Component.onAdd


onDestroy(): void

Defined in: packages/renderer/src/SortGroupComponent.ts:193

Called when the component is destroyed (entity destroyed or component removed).

void

Component.onDestroy


optional onRemove(): void

Defined in: packages/core/dist/index.d.ts:1930

Called when the component is removed from an entity.

void

Component.onRemove


resolveSortKey(sort): number

Defined in: packages/renderer/src/SortGroupComponent.ts:217

Internal

Compute this group’s depth key under the layer sort. Samples the group-owning entity’s own visual (so ySort/ySortBy read a real sprite’s position and offset); falls back to a proxy at the entity’s Transform world position when the owner renders nothing itself.

Called by DisplaySystem each Render phase.

LayerSortFn

number


serialize(): SortGroupData

Defined in: packages/renderer/src/SortGroupComponent.ts:270

Return a JSON-serializable snapshot of this component’s state. Used by the save system.

SortGroupData

Component.serialize


protected service<T>(key): T

Defined in: packages/core/dist/index.d.ts:1902

Lazy proxy-based service resolution. Can be used at field-declaration time:

readonly input = this.service(InputManagerKey);

The actual resolution is deferred until first property access.

T extends object

ServiceKey<T>

T

Component.service


protected sibling<C>(cls): C

Defined in: packages/core/dist/index.d.ts:1910

Lazy proxy-based sibling component resolution. Can be used at field-declaration time:

readonly anim = this.sibling(AnimatedSpriteComponent);

The actual resolution is deferred until first property access.

C extends Component

ComponentClass<C>

C

Component.sibling


optional update(dt): void

Defined in: packages/core/dist/index.d.ts:1934

Called every frame by the built-in ComponentUpdateSystem.

number

void

Component.update


protected use<T>(key): T

Defined in: packages/core/dist/index.d.ts:1893

Resolve a service by key, cached after first lookup. Scene-scoped values (registered via scene._registerScoped) take precedence over engine scope. A key declared with scope: "scene" that falls back to engine scope emits a one-shot dev warning — almost always signals a missed beforeEnter hook.

T

ServiceKey<T>

T

Component.use


static fromSnapshot(data): SortGroupComponent

Defined in: packages/renderer/src/SortGroupComponent.ts:274

SortGroupData

SortGroupComponent