@caperjs/plugin-rive 0.2.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/caper-plugin-rive.mjs +1 -1
- package/lib/caper-plugin-rive.mjs.map +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +3 -3
- package/src/version.ts +1 -1
|
@@ -2,7 +2,7 @@ import e from "@rive-app/canvas-advanced-lite";
|
|
|
2
2
|
import { Container as t, Logger as n, Plugin as r, Signal as i, WithSignals as a, destroyCanvas as o } from "@caperjs/core";
|
|
3
3
|
import { Assets as s, BrowserAdapter as c, ExtensionType as l, LoaderParserPriority as u, Texture as d, checkExtension as f, extensions as p } from "pixi.js";
|
|
4
4
|
//#region src/version.ts
|
|
5
|
-
var m = "0.
|
|
5
|
+
var m = "0.3.0", h = "2.30.1", g = { wasmPath: "https://unpkg.com/@rive-app/canvas-advanced-lite@2.26.1/rive.wasm" }, _ = class t extends r {
|
|
6
6
|
constructor(...e) {
|
|
7
7
|
super(...e), this.id = "rive", this._options = g, this._addedExtensions = !1;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caper-plugin-rive.mjs","names":[],"sources":["../src/version.ts","../src/RivePlugin.ts","../src/RiveEntity.ts","../src/index.ts"],"sourcesContent":["export const version = '0.2.4';\nexport const riveVersion = '2.30.1';","import Rive, { RiveCanvas } from '@rive-app/canvas-advanced-lite';\nimport { IPlugin, Plugin } from '@caperjs/core';\nimport { BrowserAdapter, checkExtension, extensions, ExtensionType, LoaderParserPriority } from 'pixi.js';\nimport { riveVersion, version } from './version';\n\nexport interface IRivePlugin extends IPlugin<RivePluginOptions> {\n rive: RiveCanvas;\n}\n\n/**\n * Defines the options for the Rive plugin.\n * @property {string} wasmPath - The URL path to the Rive WASM file.\n */\nexport type RivePluginOptions = {\n wasmPath: string;\n};\n\nconst defaultOptions = {\n wasmPath: 'https://unpkg.com/@rive-app/canvas-advanced-lite@2.26.1/rive.wasm',\n};\n\nexport class RivePlugin extends Plugin<RivePluginOptions> implements IRivePlugin {\n public static ID: string;\n public readonly id = 'rive';\n public rive: RiveCanvas;\n protected _options: RivePluginOptions = defaultOptions;\n\n private _addedExtensions: boolean = false;\n\n private hello() {\n const hello = `%c Caper Rive Plugin v${version} | %cRive v${riveVersion} (@rive-app/canvas-advanced-lite)`;\n console.log(\n hello,\n 'background: rgba(31, 41, 55, 1);color: #74b64c',\n 'background: rgba(31, 41, 55, 1);color: #e91e63',\n );\n }\n\n async initialize(options: RivePluginOptions): Promise<void> {\n this._options = { ...defaultOptions, ...options };\n this.hello();\n RivePlugin.ID = this.id;\n this._addLoaderExtensions();\n if (!this.rive) {\n this.rive = await Rive({ locateFile: () => this._options.wasmPath });\n }\n }\n\n destroy() {\n // Intentionally NOT calling `this.rive.cleanup()`.\n //\n // `RiveCanvas.cleanup()` tears down the Emscripten WASM runtime globally.\n // If any RiveEntity's renderer/artboard/state-machine is still registered\n // when it runs, the Rive runtime deadlocks during teardown and the tab\n // freezes. Individual RiveEntity instances already free their own\n // artboards/machines/animations in `_destroyInternals()`, and the WASM\n // heap is released by the browser on page unload — which is the only\n // time `RivePlugin.destroy()` runs in practice.\n super.destroy();\n }\n\n private _addLoaderExtensions() {\n if (!this._addedExtensions) {\n extensions.add({\n name: 'loadRive',\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n test(url: string) {\n return checkExtension(url, '.riv');\n },\n async load(url: string) {\n const response = await BrowserAdapter.fetch(url);\n return new Uint8Array(await response.arrayBuffer());\n },\n });\n this._addedExtensions = true;\n }\n }\n}\n","import {\n Artboard,\n File,\n LinearAnimationInstance,\n Mat2D,\n RiveCanvas,\n SMIInput,\n StateMachineInstance,\n WrappedRenderer,\n} from '@rive-app/canvas-advanced-lite';\nimport { Container, destroyCanvas, Logger, Signal, WithSignals } from '@caperjs/core';\nimport { Assets, FederatedPointerEvent, Sprite, Texture, Ticker } from 'pixi.js';\nimport { RivePlugin } from './RivePlugin';\nimport { Alignment, Fit, RiveOptions } from './types';\n\n/**\n * @see https://www.npmjs.com/package/pixi-rive\n * RiveEntity component extended from Caper Container\n * PIXI.Assets.add({ alias: 'vehicles', src: 'https://cdn.rive.app/animations/vehicles.riv' });\n * const vehicles = new RiveEntity({ asset: 'vehicles', autoPlay: true });\n * app.stage.addChild(vehicles);\n *\n * @param {Artboard} artboard current Rive Artboard instance\n * @param {LinearAnimationInstance} animations current Animation instances\n * @param {StateMachineInstance} stateMachines current Rive State Machine instances\n * @param {Map<string, SMIInput>} inputFields current artboard input fields from all state machines\n * @param {Function} onStateChange callback method for catching state machines changes\n * @param {Fit} fit fit Rive component into container sizes (Contain by default)\n * @param {Alignment} align align Rive component in container (Center by default)\n * @param {number} maxWidth max width of sprite (original Rive artboard size will be used if maxWidth is not set)\n * @param {number} maxHeight max height of sprite (original Rive artboard size will be used if maxHeight is not set)\n */\nexport class RiveEntity extends WithSignals(Container) {\n // signals\n onStateChange: Signal<(states?: any) => void> = new Signal();\n onReady: Signal<(rive?: RiveCanvas) => void> = new Signal();\n onPlay: Signal<(animations: string | string[]) => void> = new Signal();\n onStop: Signal<(animations: string | string[]) => void> = new Signal();\n onPause: Signal<() => void> = new Signal();\n onResume: Signal<() => void> = new Signal();\n // TODO: Can't figure out how to implement this yet\n // can't seem to get animation duration or loop values\n // perhaps it's a bug?\n // onLoop: Signal<() => void> = new Signal();\n //\n animations: LinearAnimationInstance[] = [];\n stateMachines: StateMachineInstance[] = [];\n inputFields: Map<string, SMIInput> = new Map();\n artboard?: Artboard;\n private _debug: boolean = false;\n private _file?: File;\n private _aligned?: Mat2D;\n private _renderer?: WrappedRenderer;\n private _canvas?: OffscreenCanvas | HTMLCanvasElement;\n private _paused: boolean;\n private _enabled: boolean = false;\n\n /**\n * Constructor will load Rive wasm if it not loaded yet\n * and create instances of Rive scene components (artboard, animation, stateMachine)\n * after initialize will call onReady method and run animation if autoPlay was setted\n * @param {RiveOptions} options initial component options\n */\n constructor(public options: RiveOptions) {\n super({ autoResize: false, autoUpdate: false, priority: -1 });\n this._debug = options.debug ?? false;\n this.initEvents(options!.interactive ?? false);\n if (options.autoInit !== false) {\n void this.initialize();\n }\n }\n\n private _align: Alignment = 'center';\n\n get align(): Alignment {\n return this._align;\n }\n\n set align(value: Alignment) {\n this._align = value;\n }\n\n private _fit: Fit = 'contain';\n\n get fit(): Fit {\n return this._fit;\n }\n\n set fit(value: Fit) {\n this._fit = value;\n this.updateSize();\n }\n\n private _maxWidth: number = 0;\n\n get maxWidth(): number {\n return this._maxWidth;\n }\n\n set maxWidth(value: number) {\n this._maxWidth = value;\n this.updateSize();\n }\n\n private _maxHeight: number = 0;\n\n get maxHeight(): number {\n return this._maxHeight;\n }\n\n set maxHeight(value: number) {\n this._maxHeight = value;\n this.updateSize();\n }\n\n private _rive?: RiveCanvas;\n\n get rive(): RiveCanvas {\n return this.plugin.rive;\n }\n\n private _view: Sprite;\n\n get view(): Sprite {\n return this._view;\n }\n\n get plugin(): RivePlugin {\n return this.app.getPlugin(RivePlugin.ID);\n }\n\n async initialize() {\n await this.initRive(this.options.asset).then(() => {\n try {\n this.loadArtboard(this.options.artboard);\n this.loadStateMachine(this.options.stateMachine);\n this.playAnimation(this.options.animation);\n\n if (this.options.fit) {\n this.fit = this.options.fit;\n }\n if (this.options.align) {\n this.align = this.options.align;\n }\n if (this.options.maxWidth) {\n this.maxWidth = this.options.maxWidth;\n }\n if (this.options.maxHeight) {\n this.maxHeight = this.options.maxHeight;\n }\n if (this.options.maxHeight !== undefined || this.options.maxWidth !== undefined) {\n this.updateSize();\n }\n\n if (this.options.autoPlay) {\n this.enable();\n } else this.update();\n this.onReady.emit(this.rive);\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * Enable rive scene animation\n */\n enable(): void {\n this._enabled = true;\n if (this.rive) {\n this.app.ticker.add(this.update);\n }\n }\n\n /**\n * Disable rive scene animation\n */\n disable(): void {\n this._enabled = false;\n if (this.rive) {\n this.app.ticker.remove(this.update);\n }\n }\n\n /**\n * Load Rive scene artboard by name or load default artboard if name is not set\n * Rive should be initialized before (RiveOptions.onReady was emited)\n * @param {string|number} artboard name of the loading artboard\n */\n loadArtboard(artboard: string | undefined): void | Promise<void> {\n if (this.artboard) {\n this._destroyInternals();\n this.options.artboard = artboard;\n return this.initialize();\n }\n if (this._file && this._canvas) {\n this.artboard = artboard ? this._file.artboardByName(artboard) : this._file.defaultArtboard();\n if (!this._view) {\n this._view = this.add.sprite({\n asset: Texture.from(this._canvas, false),\n anchor: this.options?.anchor ?? 0,\n scale: this.options?.scale ?? 1,\n layout: false,\n });\n } else {\n this._view.texture.source.update();\n }\n }\n this.updateSize();\n }\n\n /**\n * Load Rive state machines by names or load first state machine\n * Artbaord should be loaded before\n * Will load first state machine if name is empty\n * @param {string|number} machines name or names of the loading state machines\n */\n loadStateMachine(machines: string | string[] = []): void {\n if (!this.artboard || !this.rive) return;\n if (typeof machines === 'string') machines = [machines];\n else if (!machines.length) {\n const defaultMachine = this.artboard!.stateMachineByIndex(0);\n machines = defaultMachine ? [defaultMachine.name] : [];\n }\n machines.map((name) => {\n const machine = this.artboard!.stateMachineByName(name);\n this.unloadStateMachine(name);\n this.stateMachines.push(new this.rive!.StateMachineInstance(machine, this.artboard!));\n });\n this.initInputFields();\n }\n\n /**\n * Unload state machine and destroy instance\n * @param {string} name name of the state machine\n */\n unloadStateMachine(name: string): void {\n this.stateMachines = this.stateMachines.filter((machine) => {\n if (machine.name === name) {\n machine.delete();\n return false;\n } else return true;\n });\n }\n\n /**\n * Play Rive animation by name (artbaord should be loaded before)\n * You can play only one timeline animation at the same time.\n * If animation is looped or it's a pingpong, it will be repeated endlessly\n * otherwise it plays only once\n *\n * TODO: add onStart/onEnd/onLoop methods for animation\n *\n * @param {string|number} animations animation name or array of nmaes\n */\n playAnimation(animations: string | string[] = []): void {\n if (!this.artboard && !this.rive) return;\n if (typeof animations === 'string') animations = [animations];\n else if (!animations.length && !this.stateMachines.length) {\n const defaultAnimation = this.artboard!.animationByIndex(0);\n animations = defaultAnimation ? [defaultAnimation.name] : [];\n }\n animations.map((name) => {\n const animation = this.artboard!.animationByName(name);\n this.stopAnimation(name);\n\n const anim = new this.rive!.LinearAnimationInstance(animation, this.artboard!);\n\n this.animations.push(anim);\n });\n\n this.onPlay.emit(animations);\n }\n\n /**\n * Stop current animation and destroy Rive animation instance\n */\n stopAnimation(animations: string | string[]): void {\n const animationsToStop = Array.isArray(animations) ? animations : [animations];\n this.animations = this.animations.filter((animation) => {\n if (animationsToStop.includes(animation.name)) {\n animation.delete();\n return false;\n } else return true;\n });\n\n this.onStop.emit(animations);\n }\n\n pause() {\n this._paused = true;\n this.onPause.emit();\n }\n\n resume() {\n this._paused = false;\n this.onResume.emit();\n }\n\n /**\n * Get list of available artboards in current Rive file\n */\n getAvailableArtboards(): string[] {\n const available: string[] = [];\n if (this._file) {\n for (let i = 0; i < this._file.artboardCount(); i++) {\n available[i] = this._file.artboardByIndex(i).name;\n }\n }\n return available;\n }\n\n /**\n * Get list of available state machines in current artboard\n */\n getAvailableStateMachines(): string[] {\n const available: string[] = [];\n if (this.artboard) {\n for (let i = 0; i < this.artboard.stateMachineCount(); i++) {\n available[i] = this.artboard.stateMachineByIndex(i).name;\n }\n }\n return available;\n }\n\n /**\n * Get list of available animations in current artboard\n */\n getAvailableAnimations(): string[] {\n const available: string[] = [];\n if (this.artboard) {\n for (let i = 0; i < this.artboard.animationCount(); i++) {\n available[i] = this.artboard.animationByIndex(i).name;\n }\n }\n return available;\n }\n\n /**\n * Recalculate and update sizes of ofscreencanvas due to artboard size\n * Artboard should be loaded before\n */\n updateSize(): void {\n if (this.artboard && this.rive && this._renderer && this._canvas) {\n const bounds = this.artboard.bounds;\n const { minX, minY, maxX, maxY } = bounds;\n const width = maxX - minX;\n const height = maxY - minY;\n const maxWidth = this._maxWidth || width;\n const maxHeight = this._maxHeight || height;\n const fit = this.rive.Fit[this._fit];\n const align = this.rive.Alignment[this._align];\n const frame = { minX: 0, minY: 0, maxX: maxWidth, maxY: maxHeight };\n\n this._canvas.width = maxWidth;\n this._canvas.height = maxHeight;\n this._aligned = this.rive?.computeAlignment(fit, align, frame, bounds);\n this._renderer.align(fit, align, frame, bounds);\n this._view.texture.source.update();\n }\n }\n\n /**\n * Receive input fields from all active state machines\n */\n initInputFields(): void {\n const { bool, trigger } = this.rive!.SMIInput;\n this.inputFields.clear();\n this.stateMachines.forEach((m) => {\n for (let i = 0; i < m.inputCount(); i++) {\n let field: SMIInput;\n const input = m.input(i);\n if (input.type == bool) field = input.asBool();\n else if (input.type == trigger) field = input.asTrigger();\n else field = input.asNumber();\n this.inputFields.set(input.name, field);\n }\n });\n }\n\n /**\n * Get state machine input field by name\n * @param {string} name input field name\n * @returns {number|boolean} value of the input field\n */\n getInputValue(name: string): number | boolean | undefined {\n const input = this.inputFields.get(name);\n return input && input.value;\n }\n\n /**\n * Set state machine input field value by name\n * @param {string} name of the input field\n * @param {number|boolean} value of the input field\n */\n setInput(name: string, value: number | boolean): void {\n const input = this.inputFields.get(name);\n if (input && input.type !== this.rive?.SMIInput.trigger) {\n input.value = value;\n }\n }\n\n /**\n * Trigger state machine input field\n * @param {string} name of the trigger field\n */\n fireTrigger(name: string): void {\n const input = this.inputFields.get(name);\n if (input && input.type === this.rive?.SMIInput.trigger) {\n input.fire();\n }\n }\n\n /**\n * Destroy all component resources\n */\n destroy() {\n this._destroyInternals();\n try {\n this._renderer?.delete();\n } catch (e) {\n // nothing\n }\n try {\n this._file?.delete();\n } catch (e) {\n // nothing\n }\n super.destroy();\n }\n\n public update(ticker: Ticker = this.app.ticker) {\n if (this._paused || !this.artboard || !this._renderer || !this.rive) {\n return;\n }\n const elapsedTime = ticker.elapsedMS / 1000;\n this.advanceStateMachines(elapsedTime);\n this.advanceAnimations(elapsedTime);\n this.artboard.advance(elapsedTime);\n this._renderer.clear();\n this._renderer.save();\n this.artboard.draw(this._renderer);\n this._renderer.restore();\n this._renderer.flush();\n this.view.texture.source.update();\n\n /**\n * https://rive.app/community/doc/low-level-api-usage/doctAfBY6v3P#integrating-rive-into-existing-raf-loop\n */\n this.rive.resolveAnimationFrame();\n }\n\n protected handlePointerdown(e: FederatedPointerEvent) {\n const point = this.translatePoint(e.global);\n this.stateMachines.map((m) => m.pointerDown(...point));\n }\n\n protected handlePointerup(e: FederatedPointerEvent) {\n const point = this.translatePoint(e.global);\n this.stateMachines.map((m) => m.pointerUp(...point));\n }\n\n protected handlePointermove(e: FederatedPointerEvent) {\n const point = this.translatePoint(e.global);\n this.stateMachines.map((m) => m.pointerMove(...point));\n }\n\n private _destroyInternals() {\n this.disable();\n this.off('pointerdown', this.handlePointerdown);\n this.off('pointerup', this.handlePointerup);\n this.off('pointermove', this.handlePointermove);\n\n try {\n this.stateMachines.map((machine) => machine.delete());\n } catch (e) {\n // nothing\n }\n try {\n this.animations.map((animation) => animation.delete());\n } catch (e) {\n // nothing\n }\n try {\n this.artboard?.delete();\n } catch (e) {\n // nothing\n }\n\n this.animations = [];\n this.stateMachines = [];\n\n this.view.texture.destroy(true);\n this.view.destroy();\n\n // @ts-expect-error artboard can't be null\n this.artboard = null;\n\n // @ts-expect-error view can't be null\n this._view = null;\n\n if (this._canvas) {\n destroyCanvas(this._canvas);\n }\n // @ts-expect-error canvas can't be null\n this._canvas = null;\n }\n\n /**\n * Will load wasm and rive sprite asset from assets library\n * also create offscreen canvas and rive renderer\n * @param riv\n */\n private async initRive(riv: string | Uint8Array): Promise<void> {\n const asset = typeof riv === 'string' ? await Assets.load(riv) : riv;\n this._file = await this.rive.load(asset);\n this._canvas = this.createCanvas();\n this._renderer = this.rive.makeRenderer(this._canvas, true);\n }\n\n /**\n * Attach pointer events to the pixi sprite and pass them to the Rive state machine\n * @param {boolean} interactive true if we need to attach pointer events to sprite\n */\n private initEvents(interactive: boolean): void {\n if (!interactive) return;\n if (this.options.cursor) {\n this.cursor = this.options.cursor;\n }\n this.eventMode = 'static';\n this.on('pointerdown', this.handlePointerdown);\n this.on('onpointerup', this.handlePointerup);\n this.on('onpointermove', this.handlePointermove);\n }\n\n /**\n * Convert global Pixi.js coordinates to Rive point coordinates\n * @param {{x:number,y:number}} global point coordinates\n * @returns\n */\n private translatePoint(global: { x: number; y: number }): [number, number] {\n const { x, y } = this.toLocal(global);\n const { tx, ty, xx, yy } = this._aligned || { tx: 0, ty: 0, xx: 1, yy: 1 };\n return [(x - tx) / xx, (y - ty) / yy];\n }\n\n /**\n * Will create offscreen canvas\n * In debug mode will create a regular canvas and display it over the page\n */\n private createCanvas(): OffscreenCanvas | HTMLCanvasElement {\n if (this._debug) {\n const canvas = document.createElement('canvas');\n canvas.style.position = 'absolute';\n canvas.style.right = '0';\n canvas.style.top = '0';\n canvas.style.width = 'auto';\n canvas.style.height = 'auto';\n document.body.appendChild(canvas);\n return canvas;\n }\n return new OffscreenCanvas(100, 100);\n }\n\n /**\n * Play all state machines animations\n * @param {number} elapsed time from last update\n */\n private advanceStateMachines(elapsed: number): void {\n this.stateMachines.map((m) => {\n const numFiredEvents = m.reportedEventCount();\n if (numFiredEvents) {\n Logger.log(`state machine ${m.name} reported ${numFiredEvents} events`);\n for (let i = 0; i < numFiredEvents; i++) {\n const event = m.reportedEventAt(i);\n if (event) {\n Logger.log(`event ${event.name} fired`);\n }\n }\n }\n m.advance(elapsed);\n\n if (m.stateChangedCount()) {\n const states = [];\n for (let i = 0; i < m.stateChangedCount(); i++) {\n states.push(m.stateChangedNameByIndex(i));\n }\n if (states.length) {\n this.onStateChange.emit(states);\n }\n }\n });\n }\n\n /**\n * Play all scene animations\n * @param {number} elapsed time from last update\n */\n private advanceAnimations(elapsed: number): void {\n this.animations.map((a) => {\n a.advance(elapsed);\n a.apply(1);\n });\n }\n}\n","import { RivePlugin } from './RivePlugin';\n\nexport * from './RiveEntity';\nexport type { IRivePlugin } from './RivePlugin';\nexport * from './types';\n\n\nexport default RivePlugin;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"caper-plugin-rive.mjs","names":[],"sources":["../src/version.ts","../src/RivePlugin.ts","../src/RiveEntity.ts","../src/index.ts"],"sourcesContent":["export const version = '0.3.0';\nexport const riveVersion = '2.30.1';","import Rive, { RiveCanvas } from '@rive-app/canvas-advanced-lite';\nimport { IPlugin, Plugin } from '@caperjs/core';\nimport { BrowserAdapter, checkExtension, extensions, ExtensionType, LoaderParserPriority } from 'pixi.js';\nimport { riveVersion, version } from './version';\n\nexport interface IRivePlugin extends IPlugin<RivePluginOptions> {\n rive: RiveCanvas;\n}\n\n/**\n * Defines the options for the Rive plugin.\n * @property {string} wasmPath - The URL path to the Rive WASM file.\n */\nexport type RivePluginOptions = {\n wasmPath: string;\n};\n\nconst defaultOptions = {\n wasmPath: 'https://unpkg.com/@rive-app/canvas-advanced-lite@2.26.1/rive.wasm',\n};\n\nexport class RivePlugin extends Plugin<RivePluginOptions> implements IRivePlugin {\n public static ID: string;\n public readonly id = 'rive';\n public rive: RiveCanvas;\n protected _options: RivePluginOptions = defaultOptions;\n\n private _addedExtensions: boolean = false;\n\n private hello() {\n const hello = `%c Caper Rive Plugin v${version} | %cRive v${riveVersion} (@rive-app/canvas-advanced-lite)`;\n console.log(\n hello,\n 'background: rgba(31, 41, 55, 1);color: #74b64c',\n 'background: rgba(31, 41, 55, 1);color: #e91e63',\n );\n }\n\n async initialize(options: RivePluginOptions): Promise<void> {\n this._options = { ...defaultOptions, ...options };\n this.hello();\n RivePlugin.ID = this.id;\n this._addLoaderExtensions();\n if (!this.rive) {\n this.rive = await Rive({ locateFile: () => this._options.wasmPath });\n }\n }\n\n destroy() {\n // Intentionally NOT calling `this.rive.cleanup()`.\n //\n // `RiveCanvas.cleanup()` tears down the Emscripten WASM runtime globally.\n // If any RiveEntity's renderer/artboard/state-machine is still registered\n // when it runs, the Rive runtime deadlocks during teardown and the tab\n // freezes. Individual RiveEntity instances already free their own\n // artboards/machines/animations in `_destroyInternals()`, and the WASM\n // heap is released by the browser on page unload — which is the only\n // time `RivePlugin.destroy()` runs in practice.\n super.destroy();\n }\n\n private _addLoaderExtensions() {\n if (!this._addedExtensions) {\n extensions.add({\n name: 'loadRive',\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n test(url: string) {\n return checkExtension(url, '.riv');\n },\n async load(url: string) {\n const response = await BrowserAdapter.fetch(url);\n return new Uint8Array(await response.arrayBuffer());\n },\n });\n this._addedExtensions = true;\n }\n }\n}\n","import {\n Artboard,\n File,\n LinearAnimationInstance,\n Mat2D,\n RiveCanvas,\n SMIInput,\n StateMachineInstance,\n WrappedRenderer,\n} from '@rive-app/canvas-advanced-lite';\nimport { Container, destroyCanvas, Logger, Signal, WithSignals } from '@caperjs/core';\nimport { Assets, FederatedPointerEvent, Sprite, Texture, Ticker } from 'pixi.js';\nimport { RivePlugin } from './RivePlugin';\nimport { Alignment, Fit, RiveOptions } from './types';\n\n/**\n * @see https://www.npmjs.com/package/pixi-rive\n * RiveEntity component extended from Caper Container\n * PIXI.Assets.add({ alias: 'vehicles', src: 'https://cdn.rive.app/animations/vehicles.riv' });\n * const vehicles = new RiveEntity({ asset: 'vehicles', autoPlay: true });\n * app.stage.addChild(vehicles);\n *\n * @param {Artboard} artboard current Rive Artboard instance\n * @param {LinearAnimationInstance} animations current Animation instances\n * @param {StateMachineInstance} stateMachines current Rive State Machine instances\n * @param {Map<string, SMIInput>} inputFields current artboard input fields from all state machines\n * @param {Function} onStateChange callback method for catching state machines changes\n * @param {Fit} fit fit Rive component into container sizes (Contain by default)\n * @param {Alignment} align align Rive component in container (Center by default)\n * @param {number} maxWidth max width of sprite (original Rive artboard size will be used if maxWidth is not set)\n * @param {number} maxHeight max height of sprite (original Rive artboard size will be used if maxHeight is not set)\n */\nexport class RiveEntity extends WithSignals(Container) {\n // signals\n onStateChange: Signal<(states?: any) => void> = new Signal();\n onReady: Signal<(rive?: RiveCanvas) => void> = new Signal();\n onPlay: Signal<(animations: string | string[]) => void> = new Signal();\n onStop: Signal<(animations: string | string[]) => void> = new Signal();\n onPause: Signal<() => void> = new Signal();\n onResume: Signal<() => void> = new Signal();\n // TODO: Can't figure out how to implement this yet\n // can't seem to get animation duration or loop values\n // perhaps it's a bug?\n // onLoop: Signal<() => void> = new Signal();\n //\n animations: LinearAnimationInstance[] = [];\n stateMachines: StateMachineInstance[] = [];\n inputFields: Map<string, SMIInput> = new Map();\n artboard?: Artboard;\n private _debug: boolean = false;\n private _file?: File;\n private _aligned?: Mat2D;\n private _renderer?: WrappedRenderer;\n private _canvas?: OffscreenCanvas | HTMLCanvasElement;\n private _paused: boolean;\n private _enabled: boolean = false;\n\n /**\n * Constructor will load Rive wasm if it not loaded yet\n * and create instances of Rive scene components (artboard, animation, stateMachine)\n * after initialize will call onReady method and run animation if autoPlay was setted\n * @param {RiveOptions} options initial component options\n */\n constructor(public options: RiveOptions) {\n super({ autoResize: false, autoUpdate: false, priority: -1 });\n this._debug = options.debug ?? false;\n this.initEvents(options!.interactive ?? false);\n if (options.autoInit !== false) {\n void this.initialize();\n }\n }\n\n private _align: Alignment = 'center';\n\n get align(): Alignment {\n return this._align;\n }\n\n set align(value: Alignment) {\n this._align = value;\n }\n\n private _fit: Fit = 'contain';\n\n get fit(): Fit {\n return this._fit;\n }\n\n set fit(value: Fit) {\n this._fit = value;\n this.updateSize();\n }\n\n private _maxWidth: number = 0;\n\n get maxWidth(): number {\n return this._maxWidth;\n }\n\n set maxWidth(value: number) {\n this._maxWidth = value;\n this.updateSize();\n }\n\n private _maxHeight: number = 0;\n\n get maxHeight(): number {\n return this._maxHeight;\n }\n\n set maxHeight(value: number) {\n this._maxHeight = value;\n this.updateSize();\n }\n\n private _rive?: RiveCanvas;\n\n get rive(): RiveCanvas {\n return this.plugin.rive;\n }\n\n private _view: Sprite;\n\n get view(): Sprite {\n return this._view;\n }\n\n get plugin(): RivePlugin {\n return this.app.getPlugin(RivePlugin.ID);\n }\n\n async initialize() {\n await this.initRive(this.options.asset).then(() => {\n try {\n this.loadArtboard(this.options.artboard);\n this.loadStateMachine(this.options.stateMachine);\n this.playAnimation(this.options.animation);\n\n if (this.options.fit) {\n this.fit = this.options.fit;\n }\n if (this.options.align) {\n this.align = this.options.align;\n }\n if (this.options.maxWidth) {\n this.maxWidth = this.options.maxWidth;\n }\n if (this.options.maxHeight) {\n this.maxHeight = this.options.maxHeight;\n }\n if (this.options.maxHeight !== undefined || this.options.maxWidth !== undefined) {\n this.updateSize();\n }\n\n if (this.options.autoPlay) {\n this.enable();\n } else this.update();\n this.onReady.emit(this.rive);\n } catch (error) {\n console.error(error);\n }\n });\n }\n\n /**\n * Enable rive scene animation\n */\n enable(): void {\n this._enabled = true;\n if (this.rive) {\n this.app.ticker.add(this.update);\n }\n }\n\n /**\n * Disable rive scene animation\n */\n disable(): void {\n this._enabled = false;\n if (this.rive) {\n this.app.ticker.remove(this.update);\n }\n }\n\n /**\n * Load Rive scene artboard by name or load default artboard if name is not set\n * Rive should be initialized before (RiveOptions.onReady was emited)\n * @param {string|number} artboard name of the loading artboard\n */\n loadArtboard(artboard: string | undefined): void | Promise<void> {\n if (this.artboard) {\n this._destroyInternals();\n this.options.artboard = artboard;\n return this.initialize();\n }\n if (this._file && this._canvas) {\n this.artboard = artboard ? this._file.artboardByName(artboard) : this._file.defaultArtboard();\n if (!this._view) {\n this._view = this.add.sprite({\n asset: Texture.from(this._canvas, false),\n anchor: this.options?.anchor ?? 0,\n scale: this.options?.scale ?? 1,\n layout: false,\n });\n } else {\n this._view.texture.source.update();\n }\n }\n this.updateSize();\n }\n\n /**\n * Load Rive state machines by names or load first state machine\n * Artbaord should be loaded before\n * Will load first state machine if name is empty\n * @param {string|number} machines name or names of the loading state machines\n */\n loadStateMachine(machines: string | string[] = []): void {\n if (!this.artboard || !this.rive) return;\n if (typeof machines === 'string') machines = [machines];\n else if (!machines.length) {\n const defaultMachine = this.artboard!.stateMachineByIndex(0);\n machines = defaultMachine ? [defaultMachine.name] : [];\n }\n machines.map((name) => {\n const machine = this.artboard!.stateMachineByName(name);\n this.unloadStateMachine(name);\n this.stateMachines.push(new this.rive!.StateMachineInstance(machine, this.artboard!));\n });\n this.initInputFields();\n }\n\n /**\n * Unload state machine and destroy instance\n * @param {string} name name of the state machine\n */\n unloadStateMachine(name: string): void {\n this.stateMachines = this.stateMachines.filter((machine) => {\n if (machine.name === name) {\n machine.delete();\n return false;\n } else return true;\n });\n }\n\n /**\n * Play Rive animation by name (artbaord should be loaded before)\n * You can play only one timeline animation at the same time.\n * If animation is looped or it's a pingpong, it will be repeated endlessly\n * otherwise it plays only once\n *\n * TODO: add onStart/onEnd/onLoop methods for animation\n *\n * @param {string|number} animations animation name or array of nmaes\n */\n playAnimation(animations: string | string[] = []): void {\n if (!this.artboard && !this.rive) return;\n if (typeof animations === 'string') animations = [animations];\n else if (!animations.length && !this.stateMachines.length) {\n const defaultAnimation = this.artboard!.animationByIndex(0);\n animations = defaultAnimation ? [defaultAnimation.name] : [];\n }\n animations.map((name) => {\n const animation = this.artboard!.animationByName(name);\n this.stopAnimation(name);\n\n const anim = new this.rive!.LinearAnimationInstance(animation, this.artboard!);\n\n this.animations.push(anim);\n });\n\n this.onPlay.emit(animations);\n }\n\n /**\n * Stop current animation and destroy Rive animation instance\n */\n stopAnimation(animations: string | string[]): void {\n const animationsToStop = Array.isArray(animations) ? animations : [animations];\n this.animations = this.animations.filter((animation) => {\n if (animationsToStop.includes(animation.name)) {\n animation.delete();\n return false;\n } else return true;\n });\n\n this.onStop.emit(animations);\n }\n\n pause() {\n this._paused = true;\n this.onPause.emit();\n }\n\n resume() {\n this._paused = false;\n this.onResume.emit();\n }\n\n /**\n * Get list of available artboards in current Rive file\n */\n getAvailableArtboards(): string[] {\n const available: string[] = [];\n if (this._file) {\n for (let i = 0; i < this._file.artboardCount(); i++) {\n available[i] = this._file.artboardByIndex(i).name;\n }\n }\n return available;\n }\n\n /**\n * Get list of available state machines in current artboard\n */\n getAvailableStateMachines(): string[] {\n const available: string[] = [];\n if (this.artboard) {\n for (let i = 0; i < this.artboard.stateMachineCount(); i++) {\n available[i] = this.artboard.stateMachineByIndex(i).name;\n }\n }\n return available;\n }\n\n /**\n * Get list of available animations in current artboard\n */\n getAvailableAnimations(): string[] {\n const available: string[] = [];\n if (this.artboard) {\n for (let i = 0; i < this.artboard.animationCount(); i++) {\n available[i] = this.artboard.animationByIndex(i).name;\n }\n }\n return available;\n }\n\n /**\n * Recalculate and update sizes of ofscreencanvas due to artboard size\n * Artboard should be loaded before\n */\n updateSize(): void {\n if (this.artboard && this.rive && this._renderer && this._canvas) {\n const bounds = this.artboard.bounds;\n const { minX, minY, maxX, maxY } = bounds;\n const width = maxX - minX;\n const height = maxY - minY;\n const maxWidth = this._maxWidth || width;\n const maxHeight = this._maxHeight || height;\n const fit = this.rive.Fit[this._fit];\n const align = this.rive.Alignment[this._align];\n const frame = { minX: 0, minY: 0, maxX: maxWidth, maxY: maxHeight };\n\n this._canvas.width = maxWidth;\n this._canvas.height = maxHeight;\n this._aligned = this.rive?.computeAlignment(fit, align, frame, bounds);\n this._renderer.align(fit, align, frame, bounds);\n this._view.texture.source.update();\n }\n }\n\n /**\n * Receive input fields from all active state machines\n */\n initInputFields(): void {\n const { bool, trigger } = this.rive!.SMIInput;\n this.inputFields.clear();\n this.stateMachines.forEach((m) => {\n for (let i = 0; i < m.inputCount(); i++) {\n let field: SMIInput;\n const input = m.input(i);\n if (input.type == bool) field = input.asBool();\n else if (input.type == trigger) field = input.asTrigger();\n else field = input.asNumber();\n this.inputFields.set(input.name, field);\n }\n });\n }\n\n /**\n * Get state machine input field by name\n * @param {string} name input field name\n * @returns {number|boolean} value of the input field\n */\n getInputValue(name: string): number | boolean | undefined {\n const input = this.inputFields.get(name);\n return input && input.value;\n }\n\n /**\n * Set state machine input field value by name\n * @param {string} name of the input field\n * @param {number|boolean} value of the input field\n */\n setInput(name: string, value: number | boolean): void {\n const input = this.inputFields.get(name);\n if (input && input.type !== this.rive?.SMIInput.trigger) {\n input.value = value;\n }\n }\n\n /**\n * Trigger state machine input field\n * @param {string} name of the trigger field\n */\n fireTrigger(name: string): void {\n const input = this.inputFields.get(name);\n if (input && input.type === this.rive?.SMIInput.trigger) {\n input.fire();\n }\n }\n\n /**\n * Destroy all component resources\n */\n destroy() {\n this._destroyInternals();\n try {\n this._renderer?.delete();\n } catch (e) {\n // nothing\n }\n try {\n this._file?.delete();\n } catch (e) {\n // nothing\n }\n super.destroy();\n }\n\n public update(ticker: Ticker = this.app.ticker) {\n if (this._paused || !this.artboard || !this._renderer || !this.rive) {\n return;\n }\n const elapsedTime = ticker.elapsedMS / 1000;\n this.advanceStateMachines(elapsedTime);\n this.advanceAnimations(elapsedTime);\n this.artboard.advance(elapsedTime);\n this._renderer.clear();\n this._renderer.save();\n this.artboard.draw(this._renderer);\n this._renderer.restore();\n this._renderer.flush();\n this.view.texture.source.update();\n\n /**\n * https://rive.app/community/doc/low-level-api-usage/doctAfBY6v3P#integrating-rive-into-existing-raf-loop\n */\n this.rive.resolveAnimationFrame();\n }\n\n protected handlePointerdown(e: FederatedPointerEvent) {\n const point = this.translatePoint(e.global);\n this.stateMachines.map((m) => m.pointerDown(...point));\n }\n\n protected handlePointerup(e: FederatedPointerEvent) {\n const point = this.translatePoint(e.global);\n this.stateMachines.map((m) => m.pointerUp(...point));\n }\n\n protected handlePointermove(e: FederatedPointerEvent) {\n const point = this.translatePoint(e.global);\n this.stateMachines.map((m) => m.pointerMove(...point));\n }\n\n private _destroyInternals() {\n this.disable();\n this.off('pointerdown', this.handlePointerdown);\n this.off('pointerup', this.handlePointerup);\n this.off('pointermove', this.handlePointermove);\n\n try {\n this.stateMachines.map((machine) => machine.delete());\n } catch (e) {\n // nothing\n }\n try {\n this.animations.map((animation) => animation.delete());\n } catch (e) {\n // nothing\n }\n try {\n this.artboard?.delete();\n } catch (e) {\n // nothing\n }\n\n this.animations = [];\n this.stateMachines = [];\n\n this.view.texture.destroy(true);\n this.view.destroy();\n\n // @ts-expect-error artboard can't be null\n this.artboard = null;\n\n // @ts-expect-error view can't be null\n this._view = null;\n\n if (this._canvas) {\n destroyCanvas(this._canvas);\n }\n // @ts-expect-error canvas can't be null\n this._canvas = null;\n }\n\n /**\n * Will load wasm and rive sprite asset from assets library\n * also create offscreen canvas and rive renderer\n * @param riv\n */\n private async initRive(riv: string | Uint8Array): Promise<void> {\n const asset = typeof riv === 'string' ? await Assets.load(riv) : riv;\n this._file = await this.rive.load(asset);\n this._canvas = this.createCanvas();\n this._renderer = this.rive.makeRenderer(this._canvas, true);\n }\n\n /**\n * Attach pointer events to the pixi sprite and pass them to the Rive state machine\n * @param {boolean} interactive true if we need to attach pointer events to sprite\n */\n private initEvents(interactive: boolean): void {\n if (!interactive) return;\n if (this.options.cursor) {\n this.cursor = this.options.cursor;\n }\n this.eventMode = 'static';\n this.on('pointerdown', this.handlePointerdown);\n this.on('onpointerup', this.handlePointerup);\n this.on('onpointermove', this.handlePointermove);\n }\n\n /**\n * Convert global Pixi.js coordinates to Rive point coordinates\n * @param {{x:number,y:number}} global point coordinates\n * @returns\n */\n private translatePoint(global: { x: number; y: number }): [number, number] {\n const { x, y } = this.toLocal(global);\n const { tx, ty, xx, yy } = this._aligned || { tx: 0, ty: 0, xx: 1, yy: 1 };\n return [(x - tx) / xx, (y - ty) / yy];\n }\n\n /**\n * Will create offscreen canvas\n * In debug mode will create a regular canvas and display it over the page\n */\n private createCanvas(): OffscreenCanvas | HTMLCanvasElement {\n if (this._debug) {\n const canvas = document.createElement('canvas');\n canvas.style.position = 'absolute';\n canvas.style.right = '0';\n canvas.style.top = '0';\n canvas.style.width = 'auto';\n canvas.style.height = 'auto';\n document.body.appendChild(canvas);\n return canvas;\n }\n return new OffscreenCanvas(100, 100);\n }\n\n /**\n * Play all state machines animations\n * @param {number} elapsed time from last update\n */\n private advanceStateMachines(elapsed: number): void {\n this.stateMachines.map((m) => {\n const numFiredEvents = m.reportedEventCount();\n if (numFiredEvents) {\n Logger.log(`state machine ${m.name} reported ${numFiredEvents} events`);\n for (let i = 0; i < numFiredEvents; i++) {\n const event = m.reportedEventAt(i);\n if (event) {\n Logger.log(`event ${event.name} fired`);\n }\n }\n }\n m.advance(elapsed);\n\n if (m.stateChangedCount()) {\n const states = [];\n for (let i = 0; i < m.stateChangedCount(); i++) {\n states.push(m.stateChangedNameByIndex(i));\n }\n if (states.length) {\n this.onStateChange.emit(states);\n }\n }\n });\n }\n\n /**\n * Play all scene animations\n * @param {number} elapsed time from last update\n */\n private advanceAnimations(elapsed: number): void {\n this.animations.map((a) => {\n a.advance(elapsed);\n a.apply(1);\n });\n }\n}\n","import { RivePlugin } from './RivePlugin';\n\nexport * from './RiveEntity';\nexport type { IRivePlugin } from './RivePlugin';\nexport * from './types';\n\n\nexport default RivePlugin;\n"],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caperjs/plugin-rive",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Rive",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib",
|
|
@@ -31,12 +31,12 @@
|
|
|
31
31
|
"author": "",
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@caperjs/core": "0.
|
|
34
|
+
"@caperjs/core": "0.3.0",
|
|
35
35
|
"vite": "^8.0.7",
|
|
36
36
|
"vite-plugin-dts": "^4.5.3"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@caperjs/core": "0.
|
|
39
|
+
"@caperjs/core": "0.3.0",
|
|
40
40
|
"pixi.js": "8.19.0"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.
|
|
1
|
+
export const version = '0.3.0';
|
|
2
2
|
export const riveVersion = '2.30.1';
|