Skip to main content

Rpg Client Engine

Reference for the RpgClientEngine class.

Members

addComponentAnimation

Add a component animation to the engine Component animations are temporary visual effects that can be displayed on sprites or objects, such as hit indicators, spell effects, or status animations.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • componentAnimation: { component: any, id: string }

Returns

The added component animation configuration

Examples

addSound

Add a sound to the engine Adds a sound to the engine’s sound cache. The sound can be:
  • A simple object with id and src properties
  • A Howler instance
  • An object with a play() method
If the sound has a src property, a Howler instance will be created automatically.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • sound: any
  • id?: string

Returns

The added sound

Examples

addSpriteComponentBehind

Add a component to render behind sprites Components added with this method will be displayed with a lower z-index than the sprite Supports multiple formats:
  1. Direct component: ShadowComponent
  2. Configuration object: { component: LightHalo, props: {...} }
  3. With dynamic props: { component: LightHalo, props: (object) => {...} }
  4. With dependencies: { component: HealthBar, dependencies: (object) => [object.hp, object.param.maxHp] }
Components with dependencies will only be displayed when all dependencies are resolved (!= undefined). The object (sprite) is passed to the dependencies function to allow sprite-specific dependency resolution.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • component: any

Returns

The added component or configuration

Examples

addSpriteComponentInFront

Add a component to render in front of sprites Components added with this method will be displayed with a higher z-index than the sprite Supports multiple formats:
  1. Direct component: HealthBarComponent
  2. Configuration object: { component: StatusIndicator, props: {...} }
  3. With dynamic props: { component: HealthBar, props: (object) => {...} }
  4. With dependencies: { component: HealthBar, dependencies: (object) => [object.hp, object.param.maxHp] }
Components with dependencies will only be displayed when all dependencies are resolved (!= undefined). The object (sprite) is passed to the dependencies function to allow sprite-specific dependency resolution.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • component: any | { component: any, props: (object: any) => any, dependencies?: (object: any) => any[] }

Returns

The added component or configuration

Examples

cameraFollowTargetId

ID of the sprite that the camera should follow. null means follow the current player
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: property
  • Defined in: RpgClientEngine

Signature

clear

Clear all client resources and reset state This method should be called to clean up all client-side resources when shutting down or resetting the client engine. It:
  • Destroys the PIXI renderer
  • Stops all sounds
  • Cleans up subscriptions and event listeners
  • Resets scene map
  • Stops ping/pong interval
  • Clears prediction states

Design

This method is used primarily in testing environments to ensure clean state between tests. In production, the client engine typically persists for the lifetime of the application.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Examples

clearClientPredictionStates

Clear client prediction states for cleanup Removes old prediction states and input history to prevent memory leaks. Should be called when changing maps or disconnecting.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Examples

flash

Trigger a flash animation on a sprite This method allows you to trigger a flash effect on any sprite from client-side code. The flash can be configured with various options including type (alpha, tint, or both), duration, cycles, and color.

Design

The flash is applied directly to the sprite object using its flash trigger. This is useful for client-side visual feedback, UI interactions, or local effects that don’t need to be synchronized with the server.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • spriteId?: string
  • options?: { type?: 'alpha' | 'tint' | 'both'; duration?: number; cycles?: number; alpha?: number; tint?: number | string; }

Examples

getComponentAnimation

Get a component animation by its ID Retrieves the EffectManager instance for a specific component animation, which can be used to display the animation on sprites or objects.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • id: string

Returns

The EffectManager instance for the animation

Examples

getSound

Get a sound by ID, using resolver if not found in cache This method first checks if the sound exists in the cache. If not found and a resolver is set, it calls the resolver to create the sound. The resolved sound is automatically cached for future use.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • id: string

Returns

The sound if found or created, or undefined if not found and no resolver

Examples

getSpriteSheet

Get a spritesheet by ID, using resolver if not found in cache This method first checks if the spritesheet exists in the cache. If not found and a resolver is set, it calls the resolver to create the spritesheet. The resolved spritesheet is automatically cached for future use.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • id: string

Returns

The spritesheet if found or created, or undefined if not found and no resolver

Examples

mapShakeTrigger

Trigger for map shake animation
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: property
  • Defined in: RpgClientEngine

Signature

playSound

Play a sound by its ID This method retrieves a sound from the cache or resolver and plays it. If the sound is not found, it will attempt to resolve it using the soundResolver. Uses Howler.js for audio playback instead of native Audio elements.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • soundId: string
  • options?: { volume?: number; loop?: boolean }

Examples

processAction

Send an action input to the server. Use the optional data payload for context such as a pointer position, selected target, or UI command details. The server receives the normalized payload in player.onInput(). For the full flow, including keyboard action bindings and the difference between custom actions and event interactions, see Custom action inputs.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • action: Action name or control value
  • data?: Optional custom payload sent with the action

Examples

On the server:

processDash

Start a predicted dash for the current player. The dash is sent through the movement channel, so the client can simulate it immediately and the server can validate the authoritative result.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Examples

pointer

Read the latest pointer position tracked by the client canvas. world() returns coordinates in map/world space, suitable for action payloads such as projectile targets. screen() returns the latest canvas/global pointer position.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: property
  • Defined in: RpgClientEngine

Signature

Examples

interactions

Register client-only pointer behaviors for map sprites. Use interactions for hover popovers, selection feedback, drag previews, cursor changes, and other CanvasEngine overlays. Nothing is sent to the server unless a behavior calls ctx.action(...).
  • Source: packages/client/src/services/interactions.ts
  • Kind: property
  • Defined in: RpgClientEngine

Mental Model

interactions is a client-side layer attached to rendered map sprites. It does not change gameplay state by itself. Use it for:
  • hover popovers
  • selection states
  • cursor changes
  • local highlights and drag previews
  • hitbox-based pointer filtering
  • explicit pointer-driven actions
Do not use it as the authority for gameplay. When an interaction must change the world, call ctx.action(...) and validate the request on the server.

Registering A Behavior

target can be:
  • a sprite/event id
  • an event name
  • a sprite _type, such as "event" or "player"
  • "*" for every sprite
  • a function receiving { client, target, sprite }
The returned function unregisters the behavior:

From A Client Module

Use interactions.setup() when registering behaviors from a module:
For simple lists, interactions.use is also accepted:

Hover Popover

Register a CanvasEngine component as an overlay for an existing event:
The component receives:
  • target / sprite: the RPGJS client sprite
  • state: { hovered, pressed, selected, dragging, data, overlays }
  • bounds: the default visual bounds
  • hitboxBounds: the gameplay hitbox bounds
  • graphicBounds: the rendered graphic bounds
  • pointer: the client pointer helper
  • client: the current RpgClientEngine
In CanvasEngine components, values returned by defineProps() are prop accessors. Read the sprite with sprite() or target() before accessing its fields. Component bounds are local to the sprite, so bounds() can be used directly to draw overlays attached to that sprite. Example:
The popover is local only. Hovering the guard does not call the server.

Client-Only Selection

selectable() stores selection state locally. It does not send an action.
The overlay component can read state().selected:

Explicit Server Action

Call ctx.action(...) only when the pointer gesture is meant to perform gameplay. This delegates to engine.processAction(...).
On the server, validate the request in the player input handler or a registered action. The client-sent eventId should be treated as intent, not authority.

Hitbox-Based Interactions

Use hitTest() to choose the clickable or draggable area. This is useful when a sprite graphic is larger than its gameplay body. Inside handlers and hitTest(), ctx.bounds() returns world-space bounds so it can be compared directly with ctx.pointer.world().
Available bounds:
  • ctx.bounds('hitbox'): RPGJS gameplay hitbox
  • ctx.bounds('graphic'): rendered graphic bounds
  • ctx.bounds(): default bounds, currently graphic-first
You can also implement custom areas:

Drag And Drop To A Tile

dragToTile() starts a local drag state and sends an action on drop.
The default payload is:
ctx.pointer.tile() returns:
Customize the payload with data:
Or handle the drop yourself:

Custom Drag Preview

For full control, use low-level handlers:
The overlay component can use any CanvasEngine primitive, including DOMContainer, Graphics, Sprite, or Text.

Low-Level Behavior API

A behavior can define these handlers:
Supported handler names:
  • pointerenter
  • pointerleave
  • pointerover
  • pointerout
  • pointerdown
  • pointerup
  • pointermove
  • click
  • dragstart
  • dragmove
  • drop
  • cancel

Interaction Context

Every handler receives ctx:

Helpers

RPGJS exports small helpers for common cases:
These helpers are only shortcuts. For project-specific UX, pass a behavior object directly to engine.interactions.use(...).

Network Rules

  • Pointer movement, hover, overlays, selection, drag previews, and cursor changes are client-only.
  • ctx.overlay.*, ctx.state.*, and ctx.select() do not send packets.
  • ctx.action(...) is the only interaction helper that sends an action to the server.
  • Server code must validate distance, permissions, target visibility, and map state before applying gameplay changes.

setCameraFollow

Set the camera to follow a specific sprite This method changes which sprite the camera viewport should follow. The camera can smoothly animate to the target sprite before continuous follow starts.

Design

The camera follow target is stored in a signal that is read by sprite components. Each sprite checks if it should be followed by comparing its ID with the target ID. When smoothMove options are provided, the viewport animation is handled by CanvasEngine’s viewport system. time and ease configure the transition to the target, while speed, acceleration, and radius configure the continuous follow behavior after the transition.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • targetId: string | null
  • smoothMove?: boolean | { enabled?: boolean; time?: number; ease?: CameraFollowEase; speed?: number; acceleration?: number | null; radius?: number | null }

Examples

setKeyboardControls

Assigns a CanvasEngine KeyboardControls instance to the dependency injection context This method registers a KeyboardControls instance from CanvasEngine into the DI container, making it available for injection throughout the application. The particularity is that this method is automatically called when a sprite is displayed on the map, allowing the controls to be automatically associated with the active sprite.

Design

  • The instance is stored in the DI context under the KeyboardControls token
  • It’s automatically assigned when a sprite component mounts (in character.ce)
  • The controls instance comes from the CanvasEngine component’s directives
  • Once registered, it can be retrieved using inject(KeyboardControls) from anywhere
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • controlInstance: any

Examples

setSoundResolver

Set a resolver function for sounds The resolver is called when a sound is requested but not found in the cache. It can be synchronous (returns directly) or asynchronous (returns a Promise). The resolved sound is automatically cached for future use.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • resolver: (id: string) => any | Promise<any>

Examples

setSpritesheetResolver

Set a resolver function for spritesheets The resolver is called when a spritesheet is requested but not found in the cache. It can be synchronous (returns directly) or asynchronous (returns a Promise). The resolved spritesheet is automatically cached for future use.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • resolver: (id: string) => any | Promise<any>

Examples

startTransition

Start a transition Convenience method to display a transition by its ID using the GUI system.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine
The returned promise resolves when the transition component calls its onFinish prop.

Signature

Parameters

  • id: string
  • props?: any

Examples

stopAllSounds

Stop all currently playing sounds This method stops all sounds that are currently playing. Useful when changing maps to prevent sound overlap.
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Examples

stopSound

Stop a sound that is currently playing This method stops a sound that was previously started with playSound().
  • Source: packages/client/src/RpgClientEngine.ts
  • Kind: method
  • Defined in: RpgClientEngine

Signature

Parameters

  • soundId: string

Examples