diff --git a/spine-ts/spine-construct3-lib/src/AssetLoader.ts b/spine-ts/spine-construct3-lib/src/AssetLoader.ts index 474fd2ecb..6d389ff3a 100644 --- a/spine-ts/spine-construct3-lib/src/AssetLoader.ts +++ b/spine-ts/spine-construct3-lib/src/AssetLoader.ts @@ -61,9 +61,11 @@ export class AssetLoader { const blob = projectFile.GetBlob(); const content = await blob.text(); + const path = projectFile.GetPath(); + const basePath = path.substring(0, path.lastIndexOf("/") + 1); const textureAtlas = new TextureAtlas(content); await Promise.all(textureAtlas.pages.map(async page => { - const texture = await this.loadSpineTextureEditor(page.name, page.pma, instance); + const texture = await this.loadSpineTextureEditor(basePath + page.name, page.pma, instance); if (texture) { const spineTexture = new C3TextureEditor(texture, renderer, page); page.setTexture(spineTexture); @@ -112,9 +114,10 @@ export class AssetLoader { const content = await instance.assets.fetchText(fullPath); if (!content) return null; + const basePath = path.substring(0, path.lastIndexOf("/") + 1); const textureAtlas = new TextureAtlas(content); await Promise.all(textureAtlas.pages.map(async page => { - const texture = await this.loadSpineTextureRuntime(page.name, page.pma, instance); + const texture = await this.loadSpineTextureRuntime(basePath + page.name, page.pma, instance); if (texture) { const spineTexture = new C3Texture(texture, renderer, page); page.setTexture(spineTexture); diff --git a/spine-ts/spine-construct3/src/aces.json b/spine-ts/spine-construct3/src/aces.json index 4c973e949..5f6ac1a4e 100644 --- a/spine-ts/spine-construct3/src/aces.json +++ b/spine-ts/spine-construct3/src/aces.json @@ -31,11 +31,6 @@ } ], "actions": [ - { - "id": "do-alert", - "scriptName": "Alert", - "highlight": true - }, { "id": "set-skin", "scriptName": "SetSkin", @@ -50,7 +45,7 @@ { "id": "set-animation", "scriptName": "SetAnimation", - "highlight": false, + "highlight": true, "params": [ { "id": "track", @@ -65,6 +60,29 @@ "type": "boolean" } ] + }, + { + "id": "add-animation", + "scriptName": "AddAnimation", + "highlight": true, + "params": [ + { + "id": "track", + "type": "number" + }, + { + "id": "animation", + "type": "string" + }, + { + "id": "loop", + "type": "boolean" + }, + { + "id": "delay", + "type": "number" + } + ] } ], "expressions": [ diff --git a/spine-ts/spine-construct3/src/c3runtime/actions.ts b/spine-ts/spine-construct3/src/c3runtime/actions.ts index 5c8a7b5e7..2f195b0b8 100644 --- a/spine-ts/spine-construct3/src/c3runtime/actions.ts +++ b/spine-ts/spine-construct3/src/c3runtime/actions.ts @@ -15,6 +15,10 @@ C3.Plugins.EsotericSoftware_SpineConstruct3.Acts = SetAnimation (this: SDKInstanceClass, track: number, animation: string, loop = false) { this.setAnimation(track, animation, loop); + }, + + AddAnimation (this: SDKInstanceClass, track: number, animation: string, loop = false, delay = 0) { + this.addAnimation(track, animation, loop, delay); } }; diff --git a/spine-ts/spine-construct3/src/c3runtime/instance.ts b/spine-ts/spine-construct3/src/c3runtime/instance.ts index 5354652ce..e4c7058de 100644 --- a/spine-ts/spine-construct3/src/c3runtime/instance.ts +++ b/spine-ts/spine-construct3/src/c3runtime/instance.ts @@ -144,6 +144,32 @@ class SpineC3Instance extends globalThis.ISDKWorldInstanceBase { } } + 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); + }, + } + } + public setSkin (skins: string[]) { this.propSkin = skins; this._setSkin(); diff --git a/spine-ts/spine-construct3/src/instance.ts b/spine-ts/spine-construct3/src/instance.ts index 9dbb6c2f1..fd678da94 100644 --- a/spine-ts/spine-construct3/src/instance.ts +++ b/spine-ts/spine-construct3/src/instance.ts @@ -61,7 +61,6 @@ class SpineC3PluginInstance extends SDK.IWorldInstanceBase { OnCreate () { this._inst.SetPropertyValue(PLUGIN_CLASS.PROP_BOUNDS_PROVIDER_MOVE, false); - this._inst.GetPropertyValue(PLUGIN_CLASS.PROP_SKELETON) as number; } OnPlacedInLayout () { diff --git a/spine-ts/spine-construct3/src/lang/en-US.json b/spine-ts/spine-construct3/src/lang/en-US.json index f12e681d1..a8c61a277 100644 --- a/spine-ts/spine-construct3/src/lang/en-US.json +++ b/spine-ts/spine-construct3/src/lang/en-US.json @@ -135,6 +135,29 @@ "desc": "loop" } } + }, + "add-animation": { + "list-name": "Add animation", + "display-text": "Add animation {1} on track {0} with loop {2} and delay {3}", + "description": "Add animation", + "params": { + "track": { + "name": "track", + "desc": "track" + }, + "animation": { + "name": "animations name", + "desc": "animations name" + }, + "loop": { + "name": "loop", + "desc": "loop" + }, + "delay": { + "name": "delay", + "desc": "delay" + } + } } }, "expressions": { diff --git a/spine-ts/spine-construct3/src/lang/zh-CN.json b/spine-ts/spine-construct3/src/lang/zh-CN.json index b100b915e..efb5aea3a 100644 --- a/spine-ts/spine-construct3/src/lang/zh-CN.json +++ b/spine-ts/spine-construct3/src/lang/zh-CN.json @@ -117,29 +117,6 @@ } } }, - "add-animation": { - "list-name": "添加动画", - "display-text": "在轨道{0}上添加动画{1},循环{2},延迟{3}", - "description": "添加动画", - "params": { - "track": { - "name": "轨道", - "desc": "轨道" - }, - "animation": { - "name": "动画名称", - "desc": "动画名称" - }, - "loop": { - "name": "循环", - "desc": "循环" - }, - "delay": { - "name": "延迟", - "desc": "延迟" - } - } - }, "set-animation": { "list-name": "设置动画", "display-text": "在轨道{0}上设置动画{1},循环{2}", @@ -160,6 +137,29 @@ } } }, + "add-animation": { + "list-name": "添加动画", + "display-text": "在轨道{0}上添加动画{1},循环{2},延迟{3}", + "description": "添加动画", + "params": { + "track": { + "name": "轨道", + "desc": "轨道" + }, + "animation": { + "name": "动画名称", + "desc": "动画名称" + }, + "loop": { + "name": "循环", + "desc": "循环" + }, + "delay": { + "name": "延迟", + "desc": "延迟" + } + } + }, "expressions": { "double": { "description": "将数字翻倍。", diff --git a/spine-ts/spine-construct3/src/type.ts b/spine-ts/spine-construct3/src/type.ts index 53fa8d608..06f56f657 100644 --- a/spine-ts/spine-construct3/src/type.ts +++ b/spine-ts/spine-construct3/src/type.ts @@ -27,5 +27,4 @@ PLUGIN_CLASS.Type = class SpineC3PluginType extends SDK.ITypeBase { const spineLogoBase64 = "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"; - export { } \ No newline at end of file