import { MotionPriority, Live2DFactoryOptions, Live2DModel } from '@drincs/pixi-vn-live2d/core'; import { ContainerOptions, CanvasBaseItemMemory, ListenerExtensionMemory, AdditionalPositionsExtensionProps, CanvasBaseItem, ListenerExtension, AdditionalPositionsExtension, OnEventsHandlers } from '@drincs/pixi-vn'; import { ContainerEvents, ContainerChild, EventEmitter, PointData, ObservablePoint } from 'pixi.js'; interface MotionMemory { /** * The motion group. */ group: string; /** * The index of the motion in its group. */ index: number; /** * The priority the motion was started with. */ priority: MotionPriority; } interface Live2DOptions extends Live2DFactoryOptions, ContainerOptions { /** * The model settings file URL (e.g. `model.model3.json` or `model.model.json`), or an * alias registered with Pixi's `Assets` (e.g. via `Assets.add({ alias, src })`). If * `source` matches a registered alias, it is resolved through `Assets`; otherwise it's * treated as a direct URL. */ source: string; } interface MemoryCore extends Omit { } interface Live2DMemory extends MemoryCore, CanvasBaseItemMemory, ListenerExtensionMemory, AdditionalPositionsExtensionProps { /** * The model source. Must be a URL/alias string so it can be reloaded when the memory is restored. */ source: string; anchor?: { x: number; y: number; }; /** * The focus position of the model, in world space. */ focus?: { x: number; y: number; }; /** * The motion currently playing on the main motion manager. */ currentMotion?: MotionMemory; /** * The motions currently playing on each parallel motion manager. */ parallelMotions: (MotionMemory | null)[]; /** * The id (index or name) of the expression currently applied to the model. */ currentExpressionId?: number | string; } /** * Live2D component for Pixi.js, used to display Live2D components. * @example * ```ts * import { Assets, canvas } from "@drincs/pixi-vn"; * import { Live2D } from "@drincs/pixi-vn-live2d"; * * // Register an alias so the source can be swapped from a single place * // (and so it can be reloaded from memory even if the URL changes later). * Assets.add({ alias: "haru", src: "https://example.com/model/model3.json" }); * * const live2d = new Live2D({ source: "haru", align: { x: 0.5, y: 1 } }); * await live2d.ready; * * live2d.motion("Idle"); * * canvas.add("live2d", live2d); * ``` */ declare class Live2D extends Live2DModel implements CanvasBaseItem, ListenerExtension, AdditionalPositionsExtension { constructor(options: Live2DOptions); readonly pixivnId: string; /** * The model source used to load this instance. */ readonly sourceAlias: string; private readonly configOptions; private readonly _ready; /** * Promise that resolves once the model resources have been loaded and it's safe to be manipulated/rendered. */ get ready(): Promise; private _currentExpressionId?; /** * Creates a Live2D instance and waits until its resources have been loaded. * @param options The options for the component. */ static create(options: Live2DOptions): Promise; expression(id?: number | string): Promise; get memory(): Live2DMemory; setMemory(memory: Live2DMemory): Promise; /** ListenerExtension */ readonly onEventsHandlers: OnEventsHandlers; on | keyof { [K: symbol]: any; [K: {} & string]: any; }>(event: T, fn: (...args: [ ...EventEmitter.ArgumentMap & { [K: symbol]: any; [K: {} & string]: any; }>[Extract | keyof { [K: symbol]: any; [K: {} & string]: any; }>], typeof this ]) => void, context?: any): this; /** AdditionalPositions */ private _align; set align(value: Partial | number); get align(): Partial | number; set xAlign(value: number); get xAlign(): number; set yAlign(value: number); get yAlign(): number; private _percentagePosition; set percentagePosition(value: Partial | number); get percentagePosition(): Partial | number; set percentageX(_value: number); get percentageX(): number; set percentageY(_value: number); get percentageY(): number; get positionType(): "pixel" | "percentage" | "align"; get positionInfo(): { x: number; y: number; type: "pixel" | "percentage" | "align"; }; set positionInfo(value: { x: number; y: number; type?: "pixel" | "percentage" | "align"; }); protected reloadPosition(): void; get position(): ObservablePoint; set position(value: ObservablePoint); get x(): number; set x(value: number); get y(): number; set y(value: number); } export { Live2D, type Live2DMemory, type Live2DOptions, type MotionMemory };