From fa4310b4d3f44f5b5c9cad050f46dfe19f1bb831 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Mon, 30 Oct 2023 15:10:19 +0100 Subject: [PATCH 1/3] [haxe] Closes #2403, deform vertices arrays need to be initialized with default values. --- spine-haxe/example/src/Test.hx | 77 +++++++++++++++++++ spine-haxe/spine-haxe/spine/SkeletonBinary.hx | 4 +- spine-haxe/spine-haxe/spine/SkeletonJson.hx | 4 +- .../spine/animation/DeformTimeline.hx | 4 +- 4 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 spine-haxe/example/src/Test.hx diff --git a/spine-haxe/example/src/Test.hx b/spine-haxe/example/src/Test.hx new file mode 100644 index 000000000..4edbc69b0 --- /dev/null +++ b/spine-haxe/example/src/Test.hx @@ -0,0 +1,77 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated July 28, 2023. Replaces all prior versions. + * + * Copyright (c) 2013-2023, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software or + * otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE + * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*****************************************************************************/ + +import Scene.SceneManager; +import openfl.utils.Assets; +import spine.SkeletonData; +import spine.animation.AnimationStateData; +import spine.atlas.TextureAtlas; +import spine.starling.SkeletonSprite; +import spine.starling.StarlingTextureLoader; +import starling.core.Starling; +import starling.events.TouchEvent; +import starling.events.TouchPhase; + +class Test extends Scene { + var loadBinary = true; + + public function load():Void { + background.color = 0xaaaaaaff; + + var atlas = new TextureAtlas(Assets.getText("assets/avatar.spine_atlas"), new StarlingTextureLoader("assets/avatar.spine_atlas")); + var skeletondata = SkeletonData.from(loadBinary ? Assets.getBytes("assets/avatar.skel") : Assets.getText("assets/avatar.json"), atlas); + var animationStateData = new AnimationStateData(skeletondata); + animationStateData.defaultMix = 0.25; + + var skeletonSprite = new SkeletonSprite(skeletondata, animationStateData); + var bounds = skeletonSprite.skeleton.getBounds(); + skeletonSprite.scale = Starling.current.stage.stageWidth / bounds.width * 0.2; + skeletonSprite.x = Starling.current.stage.stageWidth / 2; + skeletonSprite.y = Starling.current.stage.stageHeight * 0.9; + + for (i in 0...skeletondata.animations.length) { + skeletonSprite.state.addAnimation(0, skeletondata.animations[i], false, 0); + } + + addChild(skeletonSprite); + juggler.add(skeletonSprite); + + addText("Click anywhere for next scene"); + + addEventListener(TouchEvent.TOUCH, onTouch); + } + + public function onTouch(e:TouchEvent) { + var touch = e.getTouch(this); + trace(touch); + if (touch != null && touch.phase == TouchPhase.ENDED) { + SceneManager.getInstance().switchScene(new SequenceExample()); + } + } +} diff --git a/spine-haxe/spine-haxe/spine/SkeletonBinary.hx b/spine-haxe/spine-haxe/spine/SkeletonBinary.hx index 7a6d97994..eeb0cd9fd 100644 --- a/spine-haxe/spine-haxe/spine/SkeletonBinary.hx +++ b/spine-haxe/spine-haxe/spine/SkeletonBinary.hx @@ -1055,14 +1055,14 @@ class SkeletonBinary { if (end == 0) { if (weighted) { deform = new Array(); - deform.resize(deformLength); + ArrayUtils.resize(deform, deformLength, 0); } else { deform = vertices; } } else { var v:Int, vn:Int; deform = new Array(); - deform.resize(deformLength); + ArrayUtils.resize(deform, deformLength, 0); var start:Int = input.readInt(true); end += start; if (scale == 1) { diff --git a/spine-haxe/spine-haxe/spine/SkeletonJson.hx b/spine-haxe/spine-haxe/spine/SkeletonJson.hx index 28de8ca3d..42dd1602e 100644 --- a/spine-haxe/spine-haxe/spine/SkeletonJson.hx +++ b/spine-haxe/spine-haxe/spine/SkeletonJson.hx @@ -979,13 +979,13 @@ class SkeletonJson { if (verticesValue == null) { if (weighted) { deform = new Array(); - deform.resize(deformLength); + ArrayUtils.resize(deform, deformLength, 0); } else { deform = vertices; } } else { deform = new Array(); - deform.resize(deformLength); + ArrayUtils.resize(deform, deformLength, 0); var start:Int = getInt(keyMap, "offset"); var temp:Array = getFloatArray(keyMap, "vertices"); for (i in 0...temp.length) { diff --git a/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx b/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx index fafdd54cd..8d9e62497 100644 --- a/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx +++ b/spine-haxe/spine-haxe/spine/animation/DeformTimeline.hx @@ -156,7 +156,7 @@ class DeformTimeline extends CurveTimeline implements SlotTimeline { deform.resize(0); return; } - deform.resize(vertexCount); + ArrayUtils.resize(deform, vertexCount, 0); var vertexAttachment:VertexAttachment = cast(slotAttachment, VertexAttachment); if (vertexAttachment.bones == null) { // Unweighted vertex positions. @@ -175,7 +175,7 @@ class DeformTimeline extends CurveTimeline implements SlotTimeline { return; } - deform.resize(vertexCount); + ArrayUtils.resize(deform, vertexCount, 0); var setup:Float; if (time >= frames[frames.length - 1]) // Time is after last frame. { From 3172475cd6ce5b0ec47432746586b78e005b220a Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 2 Nov 2023 21:16:40 +0100 Subject: [PATCH 2/3] [unity] Fixed SkeletonGraphic.MatchRectTransformWithBounds setting referenceSize. Closes #2408. --- .../Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs index fac6c783a..90d7529de 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonGraphic.cs @@ -604,6 +604,8 @@ namespace Spine.Unity { SetRectTransformSize(submeshGraphic, size); submeshGraphic.rectTransform.pivot = p; } + + this.referenceSize = size; } public static void SetRectTransformSize (Graphic target, Vector2 size) { From 1cc01d6c6b4591ffdee82dbf31aea3ac8524298f Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 2 Nov 2023 21:24:49 +0100 Subject: [PATCH 3/3] [unity] Increased package version for previous commit 3172475. See #2408. --- spine-unity/Assets/Spine/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index a21deed83..38d7971fd 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core.", - "version": "4.1.29", + "version": "4.1.30", "unity": "2018.3", "author": { "name": "Esoteric Software",