From ff8024ed835bcf76905d76ecab817e6c8c850900 Mon Sep 17 00:00:00 2001 From: Davide Tantillo Date: Tue, 4 Nov 2025 17:21:54 +0100 Subject: [PATCH] Improved OnAnimationEvent. --- .../src/c3runtime/conditions.ts | 3 - .../src/c3runtime/instance.ts | 67 +++++++------------ 2 files changed, 24 insertions(+), 46 deletions(-) diff --git a/spine-ts/spine-construct3/src/c3runtime/conditions.ts b/spine-ts/spine-construct3/src/c3runtime/conditions.ts index 0ea55e31a..44693df8c 100644 --- a/spine-ts/spine-construct3/src/c3runtime/conditions.ts +++ b/spine-ts/spine-construct3/src/c3runtime/conditions.ts @@ -9,9 +9,6 @@ C3.Plugins.EsotericSoftware_SpineConstruct3.Cnds = return true; }, OnAnimationEvent (this: SpineC3Instance, event: string, track: number, animation: string) { - console.log(this.triggeredEventName === event - && this.triggeredEventTrack === track - && this.triggeredEventAnimation === animation); return this.triggeredEventName === event && this.triggeredEventTrack === track && this.triggeredEventAnimation === animation; diff --git a/spine-ts/spine-construct3/src/c3runtime/instance.ts b/spine-ts/spine-construct3/src/c3runtime/instance.ts index 7a196af99..5894d5d6e 100644 --- a/spine-ts/spine-construct3/src/c3runtime/instance.ts +++ b/spine-ts/spine-construct3/src/c3runtime/instance.ts @@ -1,4 +1,4 @@ -import type { AnimationState, AssetLoader, Event, Skeleton, SkeletonRendererCore, TextureAtlas, } from "@esotericsoftware/spine-construct3-lib"; +import type { AnimationState, AnimationStateListener, AssetLoader, Event, Skeleton, SkeletonRendererCore, TextureAtlas, } from "@esotericsoftware/spine-construct3-lib"; const C3 = globalThis.C3; const spine = globalThis.spine; @@ -119,56 +119,37 @@ class SpineC3Instance extends globalThis.ISDKWorldInstanceBase { this._trigger(C3.Plugins.EsotericSoftware_SpineConstruct3.Cnds.OnAnimationEvent); } + private makeTrackListener = (track: number, animation: string): AnimationStateListener => ({ + start: () => { + this.triggetAnimationEvent("start", track, animation); + }, + dispose: () => { + this.triggetAnimationEvent("dispose", track, animation); + }, + event: (_, event) => { + this.triggetAnimationEvent("event", track, animation, event); + }, + interrupt: () => { + this.triggetAnimationEvent("interrupt", track, animation); + }, + end: () => { + this.triggetAnimationEvent("end", track, animation); + }, + complete: () => { + this.triggetAnimationEvent("complete", track, animation); + }, + }) + public setAnimation (track: number, animation: string, loop = false) { const trackEntry = this.state?.setAnimation(track, animation, loop); if (!trackEntry) return; - - trackEntry.listener = { - start: () => { - this.triggetAnimationEvent("start", track, animation); - }, - dispose: () => { - this.triggetAnimationEvent("dispose", track, animation); - }, - event: (_, event) => { - this.triggetAnimationEvent("event", track, animation, event); - }, - interrupt: () => { - this.triggetAnimationEvent("interrupt", track, animation); - }, - end: () => { - this.triggetAnimationEvent("end", track, animation); - }, - complete: () => { - this.triggetAnimationEvent("complete", track, animation); - }, - } + trackEntry.listener = this.makeTrackListener(track, animation); } public addAnimation (track: number, animation: string, loop = false, delay = 0) { const trackEntry = this.state?.addAnimation(track, animation, loop, delay); if (!trackEntry) return; - - trackEntry.listener = { - start: () => { - this.triggetAnimationEvent("start", track, animation); - }, - dispose: () => { - this.triggetAnimationEvent("dispose", track, animation); - }, - event: (_, event) => { - this.triggetAnimationEvent("event", track, animation, event); - }, - interrupt: () => { - this.triggetAnimationEvent("interrupt", track, animation); - }, - end: () => { - this.triggetAnimationEvent("end", track, animation); - }, - complete: () => { - this.triggetAnimationEvent("complete", track, animation); - }, - } + trackEntry.listener = this.makeTrackListener(track, animation); } public setSkin (skins: string[]) {