Skip to content

VisualComponent

Defined in: renderer/src/VisualComponent.ts:90

Shared base for the renderer’s five visual components (Sprite, AnimatedSprite, Graphics, Text, SplitText). Carries the render-layer field, lazy effects host, mask lifecycle, scene-tree parenting, and the generic visible/tint/alpha/interactive vocabulary — every underlying Pixi display object supports all four directly on Container, so this operates on renderObject rather than each subclass re-deriving the same three-liner.

Subclasses provide renderObject (their concrete Pixi display object, created in their own constructor) and call applyVisualOptions once it exists — options can’t be applied during VisualComponent’s own constructor since renderObject isn’t assigned yet at that point.

  • Component

new VisualComponent(layer): VisualComponent

Defined in: renderer/src/VisualComponent.ts:118

string | undefined

VisualComponent

Component.constructor

entity: Entity

Defined in: core/dist/index.d.ts:3217

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

Component.entity


readonly fx: EffectsHost

Defined in: renderer/src/VisualComponent.ts:100

Component-scope effects host. .fx.addEffect(...) attaches a filter to this component’s render object; the effect is torn down automatically when the entity or component is destroyed. .fx.findEffect(definition) recovers the handle for the first matching effect.


readonly modifiers: VisualModifierHost

Defined in: renderer/src/VisualComponent.ts:105

Render-only transform, opacity, and visibility contributions. Modifiers combine with the component’s live base values and are never serialized.


abstract readonly renderObject: DisplayContainer

Defined in: renderer/src/VisualComponent.ts:92

The underlying Pixi display object.


static optional inspectExclude?: readonly string[]

Defined in: core/dist/index.d.ts:3420

Own fields and getters the Inspector leaves out of this component’s reflected state. Use it for bulk data that is not worth a diagnostic copy — a parsed tilemap, a large lookup table. Lists merge down the class chain, so a subclass adds to its base class’s exclusions.

class TilemapComponent extends VisualComponent {
static inspectExclude = ["data"];
}

Component.inspectExclude


static optional updatePriority?: number

Defined in: core/dist/index.d.ts:3407

Class-level default for updatePriority: every instance runs at this priority unless its own updatePriority is written. Undeclared = 0. Subclasses inherit their base class’s value unless they declare their own. Declare it on a component whose behavior depends on running after (or before) a sibling, so the entity that adds it does not have to control the add order.

class BoundsClamp extends Component {
static updatePriority = 10; // after the follow that moves the camera
}

Component.updatePriority

get alpha(): number

Defined in: renderer/src/VisualComponent.ts:226

Get the requested alpha before transient opacity modifiers.

number

set alpha(alpha): void

Defined in: renderer/src/VisualComponent.ts:220

Set the container’s alpha (opacity).

number

void


get blendMode(): BLEND_MODES

Defined in: renderer/src/VisualComponent.ts:236

Get the container’s blend mode.

BLEND_MODES

set blendMode(mode): void

Defined in: renderer/src/VisualComponent.ts:231

Set how the container combines with what is drawn beneath it.

BLEND_MODES

void


get context(): EngineContext

Defined in: core/dist/index.d.ts:3272

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

EngineContext

Component.context


get effectiveEnabled(): boolean

Defined in: core/dist/index.d.ts:3242

Whether the component is actually running: enabled, on an active entity, and past onAdd. This is the state onEnable and onDisable track — read it when a method has to behave one way live and another way dormant.

boolean

Component.effectiveEnabled


get enabled(): boolean

Defined in: core/dist/index.d.ts:3234

Whether this component runs. Disabled components are skipped by ComponentUpdateSystem.

Writing this fires onEnable / onDisable when the effective state changes — enabled && entity.isActive. A component disabled here stays disabled through a setActive(false) / setActive(true) cycle on its entity.

boolean

set enabled(value): void

Defined in: core/dist/index.d.ts:3235

boolean

void

SpriteComponent.enabled


get layerName(): string

Defined in: renderer/src/VisualComponent.ts:179

The layer this visual draws on. See setLayer.

string


get mask(): MaskHandle | undefined

Defined in: renderer/src/VisualComponent.ts:273

The currently attached mask handle, if any.

MaskHandle | undefined


get renderAboveEffects(): boolean

Defined in: renderer/src/VisualComponent.ts:163

Whether this visual draws after the scene’s layers, outside every layer- and scene-scope effect and mask, while keeping its logical parent (position, alpha, visibility, camera). Screen-scope effects still cover it, and hit testing follows the logical tree — a UI element drawn under an escaped visual still receives the pointer first.

Set while the visual is out of the display tree — in a subclass constructor, or on a component not yet added — it records the flag and applies it on add.

boolean

set renderAboveEffects(value): void

Defined in: renderer/src/VisualComponent.ts:167

boolean

void


get scene(): Scene

Defined in: core/dist/index.d.ts:3267

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


get tint(): number

Defined in: renderer/src/VisualComponent.ts:215

Get the container’s tint color.

number

set tint(color): void

Defined in: renderer/src/VisualComponent.ts:210

Set the container’s tint color.

ColorSource

void


get updatePriority(): number

Defined in: core/dist/index.d.ts:3260

Where this component runs among its siblings. ComponentUpdateSystem calls update / fixedUpdate on an entity’s components in ascending priority; equal priorities run in add order. Undeclared = 0, so a negative value runs before siblings that keep the default and a positive value runs after them. Writable at any time, before or after add(). Defaults to the class’s static updatePriority.

class Player extends Entity {
setup() {
this.add(new Mover());
this.add(new Brain()).updatePriority = -1; // decides before Mover moves
}
}

number

set updatePriority(value): void

Defined in: core/dist/index.d.ts:3261

number

void

Component.updatePriority


get visible(): boolean

Defined in: renderer/src/VisualComponent.ts:250

Get the requested visibility, whatever the entity’s activeness.

boolean

set visible(value): void

Defined in: renderer/src/VisualComponent.ts:244

Set the container’s visibility. Written while the entity is dormant, it is remembered and applied when the entity is activated.

boolean

void

_applyEnabled(effective): void

Defined in: core/dist/index.d.ts:3355

Internal

Force an effective-enabled transition, firing the hook on a flip. Used by Entity for teardown, where enabled and the entity’s activeness both still read true.

boolean

void

Component._applyEnabled


_isTornDown(): boolean

Defined in: core/dist/index.d.ts:3336

Internal

Internal: true once this component has been removed or its entity destroyed. Components are terminal — Entity.add uses this to reject re-attaching an instance whose cleanups and onDestroy already ran.

boolean

Component._isTornDown


_markTornDown(): void

Defined in: core/dist/index.d.ts:3342

Internal

Internal: mark this component torn down. Called by Entity.remove() and Entity._performDestroy() after onDestroy runs.

void

Component._markTornDown


_refreshEnabled(): void

Defined in: core/dist/index.d.ts:3348

Internal

Recompute effective enabled-ness from enabled and the entity’s activeness, firing the hook on a flip.

void

Component._refreshEnabled


_runCleanups(onError?): void

Defined in: core/dist/index.d.ts:3323

Internal

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

(error) => void

void

Component._runCleanups


protected addCleanup(fn): void

Defined in: core/dist/index.d.ts:3317

Register a cleanup function to run when this component is removed or destroyed, before onDestroy. Use it for what listen, listenScene and listenBus do not cover, such as an unsubscribe from a custom emitter.

() => void

void

Component.addCleanup


protected applyEffectiveAlpha(alpha): void

Defined in: renderer/src/VisualComponent.ts:328

Apply the final alpha after transient modifiers.

number

void


protected applyVisualOptions(options): void

Defined in: renderer/src/VisualComponent.ts:134

Apply the shared visible/tint/alpha/interactive options to renderObject. Call once from the subclass constructor, after the concrete Pixi object is created.

VisualComponentOptions

void


clearMask(): void

Defined in: renderer/src/VisualComponent.ts:267

Detach and destroy the current mask, if any.

void


destroy(): void

Defined in: core/dist/index.d.ts:3329

End this component’s life on its own — the same as entity.remove(SomeClass), without having to name its own class from inside itself, which breaks under subclassing.

void

Component.destroy


protected destroyOptions(): DestroyOptions | undefined

Defined in: renderer/src/VisualComponent.ts:323

Pixi destroy options passed to renderObject.destroy(). Default: undefined (Pixi’s own defaults). Override for a component whose destroy must cascade to children (SplitText’s per-segment display objects).

DestroyOptions | undefined


optional fixedUpdate(dt): void

Defined in: core/dist/index.d.ts:3392

Called every fixed timestep by the built-in ComponentUpdateSystem.

number

Fixed timestep in seconds, scaled by scene and entity timeScale.

void

Component.fixedUpdate


inspectRender(): object

Defined in: renderer/src/VisualComponent.ts:283

Derived render facet for the Inspector — world-space bounds and the component’s own (local, non-inherited) visible flag, computed on demand from the live render object. See computeRenderFacet for the bounds coordinate space.

bounds: { height: number; width: number; x: number; y: number; } | null

Axis-aligned bounding box of the component’s geometry, in world space (the same coordinate space the Inspector reports for entity.transform — pixels, before camera/viewport projection). Measured from the geometry itself, so a sized-but-hidden object still reports its real box; null means there is no measurable geometry at all (an empty Graphics, a zero-area object), NOT that the object is hidden. Read RenderFacetSnapshot.visible for the hidden/shown state.

visible: boolean

The component’s own (local, non-inherited) visibility flag at snapshot time. A hidden ancestor (e.g. a parent/layer container set invisible) is NOT folded in — read the relevant parent separately if you need the fully resolved on-screen state.


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

Defined in: core/dist/index.d.ts:3299

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

T

Entity

EventToken<T>

(data) => void

void

Component.listen


protected listenBus<K>(event, handler): void

Defined in: core/dist/index.d.ts:3310

Subscribe to an engine EventBus event, auto-unsubscribe on removal. Throws when the entity is not in a scene, like listenScene.

K extends keyof EngineEvents

K

(data) => void

void

Component.listenBus


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

Defined in: core/dist/index.d.ts:3305

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: renderer/src/VisualComponent.ts:287

Called when the component is added to an entity. Validate dependencies here — a service, a sibling component, a render layer — and throw when one is missing. The throw is attributed to this component, recorded in Inspector.getErrors().callbackErrors, and rethrown, so it reaches the caller of entity.add() unchanged.

void

Component.onAdd


onDestroy(): void

Defined in: renderer/src/VisualComponent.ts:308

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

void

Component.onDestroy


onDisable(): void

Defined in: renderer/src/VisualComponent.ts:304

Called when the component stops being effectively enabled — enabled went false, the entity (or an ancestor) was deactivated, or the component is being removed or destroyed. Put live resources to sleep here; the component is reused afterwards, so do not free anything onEnable cannot rebuild.

void

Component.onDisable


onEnable(): void

Defined in: renderer/src/VisualComponent.ts:300

Called when the component becomes effectively enabled — enabled is true and the entity is active. Fires right after onAdd() for a component added to an active entity, and again on every later flip. Bring live resources back online here (unpause a sound, show a display object, re-enable a physics body). Game-state reset does not belong here: the hook sees whatever state the component held while dormant.

void

Component.onEnable


protected service<T>(key): T

Defined in: core/dist/index.d.ts:3289

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


setLayer(name): void

Defined in: renderer/src/VisualComponent.ts:195

Draw this visual on another layer.

Called before the component reaches the display tree — in a subclass constructor, or on a component that has not been added yet — it records the name and nothing else. Called afterwards it detaches the render object and re-parents it through the same resolution onAdd uses, so a SortGroupComponent on the new layer still claims it.

The visual joins its new parent last, which on a layer with no sort means it draws in front of everything already there.

string

void


setMask(factory): MaskHandle

Defined in: renderer/src/VisualComponent.ts:260

Attach a mask to this component’s render object, replacing any existing mask. Returns a handle for inverse toggling, redraw (graphicsMask), or removal. The mask is torn down automatically when the component is destroyed.

MaskFactory

MaskHandle


protected sibling<C>(cls): C

Defined in: core/dist/index.d.ts:3297

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: core/dist/index.d.ts:3387

Called every frame by the built-in ComponentUpdateSystem.

number

Frame delta in seconds, scaled by scene and entity timeScale.

void

Component.update


protected use<T>(key): T

Defined in: core/dist/index.d.ts:3280

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