Skip to content

AnimationController

Defined in: renderer/src/AnimationController.ts:72

High-level animation controller that manages named animations on top of a sibling AnimatedSpriteComponent.

Provides one-shot locking, per-animation anchors, and type-safe animation names via the generic parameter.

Narrowing the animation-name typeentity.get(AnimationController) returns AnimationController<string> (the default T); the runtime class isn’t generic, and a string-typed instance can’t substitute for a narrower one (the current: T | "" getter is covariant on T). Cast at the field declaration so every consumer downstream sees the narrow type:

type Anim = "idle" | "walk" | "shoot";
class HeroController extends Component {
private readonly _anim = this.sibling(AnimationController) as
AnimationController<Anim>;
}

For multi-sprite (head + body + outfit) characters, see LayeredAnimationController — it fans play()/playOneShot() across a list of sibling controllers with a single shared lock timer.

  • Component

T extends string = string

new AnimationController<T>(animations): AnimationController<T>

Defined in: renderer/src/AnimationController.ts:86

Record<T, AnimationDef>

AnimationController<T>

Component.constructor

enabled: boolean

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

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

Component.enabled


entity: Entity

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

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

Component.entity

get context(): EngineContext

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

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

EngineContext

Component.context


get current(): "" | T

Defined in: renderer/src/AnimationController.ts:121

Currently playing animation name, or "" if none.

"" | T


get frame(): number

Defined in: renderer/src/AnimationController.ts:131

Current frame index of the underlying AnimatedSprite.

number


get locked(): boolean

Defined in: renderer/src/AnimationController.ts:126

True if a one-shot animation is blocking.

boolean


get scene(): Scene

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

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 speed(): number

Defined in: renderer/src/AnimationController.ts:136

Runtime speed multiplier (default 1).

number

set speed(value): void

Defined in: renderer/src/AnimationController.ts:140

number

void

_runCleanups(): void

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

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

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

() => void

void

Component.addCleanup


optional afterRestore(data, resolve): void

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

Called after onAdd() during save/load restoration. Apply state that depends on onAdd() having run.

unknown

SnapshotResolver

void

Component.afterRestore


calcDuration(name): number

Defined in: renderer/src/AnimationController.ts:191

Calculate the wall-clock duration (ms) of a named animation.

Frame-rate independent: PixiJS normalises deltaTime via Ticker.targetFPMS (0.06), so the formula holds at any actual fps. Inaccurate only if Ticker.shared.speed is changed from 1.

T

number


optional fixedUpdate(dt): void

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

Called every fixed timestep by the built-in ComponentUpdateSystem.

number

void

Component.fixedUpdate


forcePlay(name): void

Defined in: renderer/src/AnimationController.ts:171

Clear lock and force-switch to the given animation.

T

void


inFrameRange(start, end): boolean

Defined in: renderer/src/AnimationController.ts:197

Check whether the current frame is within [start, end] inclusive.

number

number

boolean


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

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

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

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/AnimationController.ts:240

Auto-play the first defined animation (respects prior restore).

void

Component.onAdd


optional onDestroy(): void

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

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

void

Component.onDestroy


optional onRemove(): void

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

Called when the component is removed from an entity.

void

Component.onRemove


play(name): void

Defined in: renderer/src/AnimationController.ts:145

Play a named animation. No-op if already current or locked.

T

void


playOneShot(name, options?): void

Defined in: renderer/src/AnimationController.ts:157

Play an animation as a one-shot, locking out other plays until complete. No-op if already locked on the same animation (prevents restart flicker).

When options.duration is omitted, the lock duration is auto-calculated from this controller’s own frame count and speed via calcDuration. Pass an explicit duration to synchronise lock release across multiple controllers (see LayeredAnimationController).

T

number

() => void

void


serialize(): AnimationControllerData | null

Defined in: renderer/src/AnimationController.ts:202

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

AnimationControllerData | null

Component.serialize


protected service<T>(key): T

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

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

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


unlock(): void

Defined in: renderer/src/AnimationController.ts:177

Manually release the one-shot lock.

void


update(dt): void

Defined in: renderer/src/AnimationController.ts:251

Tick the one-shot lock timer.

number

void

Component.update


protected use<T>(key): T

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

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): AnimationController

Defined in: renderer/src/AnimationController.ts:223

AnimationControllerData

AnimationController