From 28a503a7ac98745692da7af31ec2a5a3bbec77c0 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Sun, 16 Jun 2024 11:18:35 +0200 Subject: [PATCH] [ts][pixi] Fixed regression on rendering setup pose before update state (removed internal Ticker). Closes #2539. --- spine-ts/spine-pixi/src/Spine.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/spine-ts/spine-pixi/src/Spine.ts b/spine-ts/spine-pixi/src/Spine.ts index 1fae0201b..2fb82e565 100644 --- a/spine-ts/spine-pixi/src/Spine.ts +++ b/spine-ts/spine-pixi/src/Spine.ts @@ -123,12 +123,7 @@ export class Spine extends Container { } /** When `true`, the Spine AnimationState and the Skeleton will be automatically updated using the {@link Ticker.shared} instance. */ public set autoUpdate (value: boolean) { - if (value) { - Ticker.shared.add(this.internalUpdate, this); - this.autoUpdateWarned = false; - } else { - Ticker.shared.remove(this.internalUpdate, this); - } + if (value) this.autoUpdateWarned = false; this._autoUpdate = value; } @@ -171,14 +166,14 @@ export class Spine extends Container { /** If {@link Spine.autoUpdate} is `false`, this method allows to update the AnimationState and the Skeleton with the given delta. */ public update (deltaSeconds: number): void { - if (this.autoUpdate && !this.autoUpdateWarned) { + if (this._autoUpdate && !this.autoUpdateWarned) { console.warn("You are calling update on a Spine instance that has autoUpdate set to true. This is probably not what you want."); this.autoUpdateWarned = true; } - this.internalUpdate(0, deltaSeconds); + this.internalUpdate(deltaSeconds); } - protected internalUpdate (_deltaFrame: number, deltaSeconds?: number): void { + protected internalUpdate (deltaSeconds?: number): void { // Because reasons, pixi uses deltaFrames at 60fps. We ignore the default deltaFrames and use the deltaSeconds from pixi ticker. const delta = deltaSeconds ?? Ticker.shared.deltaMS / 1000; this.state.update(delta); @@ -191,6 +186,7 @@ export class Spine extends Container { /** Render the meshes based on the current skeleton state, render debug information, then call {@link Container.updateTransform}. */ public override updateTransform (): void { + if (this._autoUpdate) this.internalUpdate(); this.renderMeshes(); this.sortChildren(); this.debug?.renderDebug(this);