فهرست منبع

[runtimes] Fixed handling of zero length bones in PathConstraint if spacing is length based. Closes #957

badlogic 8 سال پیش
والد
کامیت
84fe30a2bf

BIN
spine-as3/spine-as3-example/lib/spine-as3.swc


+ 3 - 1
spine-as3/spine-as3/src/spine/PathConstraint.as

@@ -87,7 +87,9 @@ package spine {
 				}
 				for (var i : int = 0, n : int = spacesCount - 1; i < n;) {
 					var bone : Bone = bones[i];
-					var setupLength : Number = bone.data.length, x : Number = setupLength * bone.a, y : Number = setupLength * bone.c;
+					var setupLength : Number = bone.data.length;
+					if (setupLength == 0) setupLength = 0.000000001;
+					var x : Number = setupLength * bone.a, y : Number = setupLength * bone.c;
 					var length : Number = Math.sqrt(x * x + y * y);
 					if (scale) lengths[i] = length;
 					spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;

+ 3 - 1
spine-c/spine-c/src/spine/PathConstraint.c

@@ -114,7 +114,9 @@ void spPathConstraint_apply (spPathConstraint* self) {
 		}
 		for (i = 0, n = spacesCount - 1; i < n;) {
 			spBone* bone = bones[i];
-			setupLength = bone->data->length, x = setupLength * bone->a, y = setupLength * bone->c;
+			setupLength = bone->data->length;
+			if (setupLength == 0) setupLength = 0.000000001f;
+			x = setupLength * bone->a, y = setupLength * bone->c;
 			length = SQRT(x * x + y * y);
 			if (scale) lengths[i] = length;
 			spaces[++i] =  (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;

+ 2 - 2
spine-corona/main.lua

@@ -85,9 +85,9 @@ end
 -- table.insert(skeletons, loadSkeleton("spineboy.atlas", "spineboy-ess.json", 240, 300, 0.4, "walk"))
 table.insert(skeletons, loadSkeleton("raptor.atlas", "raptor-pro.json", 200, 300, 0.25, "walk"))
 -- table.insert(skeletons, loadSkeleton("goblins.atlas", "goblins-pro.json", 240, 300, 0.8, "walk", "goblin"))
--- table.insert(skeletons, loadSkeleton("stretchyman.atlas", "stretchyman-pro.json", 40, 300, 0.5, "sneak"))
+table.insert(skeletons, loadSkeleton("stretchyman.atlas", "stretchyman-pro.json", 40, 300, 0.5, "sneak"))
 -- table.insert(skeletons, loadSkeleton("tank.atlas", "tank-pro.json", 400, 300, 0.2, "drive"))
--- table.insert(skeletons, loadSkeleton("vine.atlas", "vine-pro.json", 240, 300, 0.3, "grow"))
+table.insert(skeletons, loadSkeleton("vine.atlas", "vine-pro.json", 240, 300, 0.3, "grow"))
 
 local triangulator = spine.Triangulator.new()
 local polygon = { 411, 219, 199, 230, 161, 362, 534, 407, 346, 305, 596, 265 }

+ 3 - 1
spine-csharp/src/PathConstraint.cs

@@ -91,7 +91,9 @@ namespace Spine {
 				if (scale) lengths = this.lengths.Resize(boneCount);
 				for (int i = 0, n = spacesCount - 1; i < n;) {
 					Bone bone = bonesItems[i];
-					float setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					float setupLength = bone.data.length
+					if (setupLength == 0) setupLength = 0.000000001;
+					float x = setupLength * bone.a, y = setupLength * bone.c;
 					float length = (float)Math.Sqrt(x * x + y * y);
 					if (scale) lengths.Items[i] = setupLength;
 					spaces.Items[++i] = (lengthSpacing ? Math.Max(0, setupLength + spacing) : spacing) * length / setupLength;

+ 4 - 2
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java

@@ -112,9 +112,11 @@ public class PathConstraint implements Constraint {
 			if (scale) lengths = this.lengths.setSize(boneCount);
 			for (int i = 0, n = spacesCount - 1; i < n;) {
 				Bone bone = (Bone)bones[i];
-				float setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+				float setupLength = bone.data.length;
+				if (setupLength == 0) setupLength = 0.000000001f;
+				float x = setupLength * bone.a, y = setupLength * bone.c;
 				float length = (float)Math.sqrt(x * x + y * y);
-				if (scale) lengths[i] = length;
+				if (scale) lengths[i] = length;				
 				spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;
 			}
 		} else {

+ 1 - 0
spine-lua/PathConstraint.lua

@@ -118,6 +118,7 @@ function PathConstraint:update ()
 		while i < n do
 			local bone = bones[i + 1];
 			local setupLength = bone.data.length
+			if setupLength == 0 then setupLength = 0.0000001 end
 			local x = setupLength * bone.a
 			local y = setupLength * bone.c
 			local length = math_sqrt(x * x + y * y)

BIN
spine-starling/spine-starling-example/lib/spine-as3.swc


BIN
spine-starling/spine-starling/lib/spine-as3.swc


+ 4 - 1
spine-ts/build/spine-all.js

@@ -2628,7 +2628,10 @@ var spine;
 					lengths = spine.Utils.setArraySize(this.lengths, boneCount);
 				for (var i = 0, n = spacesCount - 1; i < n;) {
 					var bone = bones[i];
-					var setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					var setupLength = bone.data.length;
+					if (setupLength == 0)
+						setupLength = 0.0000001;
+					var x = setupLength * bone.a, y = setupLength * bone.c;
 					var length_1 = Math.sqrt(x * x + y * y);
 					if (scale)
 						lengths[i] = length_1;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
spine-ts/build/spine-all.js.map


+ 4 - 1
spine-ts/build/spine-canvas.js

@@ -2628,7 +2628,10 @@ var spine;
 					lengths = spine.Utils.setArraySize(this.lengths, boneCount);
 				for (var i = 0, n = spacesCount - 1; i < n;) {
 					var bone = bones[i];
-					var setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					var setupLength = bone.data.length;
+					if (setupLength == 0)
+						setupLength = 0.0000001;
+					var x = setupLength * bone.a, y = setupLength * bone.c;
 					var length_1 = Math.sqrt(x * x + y * y);
 					if (scale)
 						lengths[i] = length_1;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
spine-ts/build/spine-canvas.js.map


+ 4 - 1
spine-ts/build/spine-core.js

@@ -2628,7 +2628,10 @@ var spine;
 					lengths = spine.Utils.setArraySize(this.lengths, boneCount);
 				for (var i = 0, n = spacesCount - 1; i < n;) {
 					var bone = bones[i];
-					var setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					var setupLength = bone.data.length;
+					if (setupLength == 0)
+						setupLength = 0.0000001;
+					var x = setupLength * bone.a, y = setupLength * bone.c;
 					var length_1 = Math.sqrt(x * x + y * y);
 					if (scale)
 						lengths[i] = length_1;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
spine-ts/build/spine-core.js.map


+ 4 - 1
spine-ts/build/spine-threejs.js

@@ -2628,7 +2628,10 @@ var spine;
 					lengths = spine.Utils.setArraySize(this.lengths, boneCount);
 				for (var i = 0, n = spacesCount - 1; i < n;) {
 					var bone = bones[i];
-					var setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					var setupLength = bone.data.length;
+					if (setupLength == 0)
+						setupLength = 0.0000001;
+					var x = setupLength * bone.a, y = setupLength * bone.c;
 					var length_1 = Math.sqrt(x * x + y * y);
 					if (scale)
 						lengths[i] = length_1;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
spine-ts/build/spine-threejs.js.map


+ 4 - 1
spine-ts/build/spine-webgl.js

@@ -2628,7 +2628,10 @@ var spine;
 					lengths = spine.Utils.setArraySize(this.lengths, boneCount);
 				for (var i = 0, n = spacesCount - 1; i < n;) {
 					var bone = bones[i];
-					var setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					var setupLength = bone.data.length;
+					if (setupLength == 0)
+						setupLength = 0.0000001;
+					var x = setupLength * bone.a, y = setupLength * bone.c;
 					var length_1 = Math.sqrt(x * x + y * y);
 					if (scale)
 						lengths[i] = length_1;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
spine-ts/build/spine-webgl.js.map


+ 4 - 1
spine-ts/build/spine-widget.js

@@ -2628,7 +2628,10 @@ var spine;
 					lengths = spine.Utils.setArraySize(this.lengths, boneCount);
 				for (var i = 0, n = spacesCount - 1; i < n;) {
 					var bone = bones[i];
-					var setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					var setupLength = bone.data.length;
+					if (setupLength == 0)
+						setupLength = 0.0000001;
+					var x = setupLength * bone.a, y = setupLength * bone.c;
 					var length_1 = Math.sqrt(x * x + y * y);
 					if (scale)
 						lengths[i] = length_1;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
spine-ts/build/spine-widget.js.map


+ 3 - 1
spine-ts/core/src/PathConstraint.ts

@@ -80,7 +80,9 @@ module spine {
 				if (scale) lengths = Utils.setArraySize(this.lengths, boneCount);
 				for (let i = 0, n = spacesCount - 1; i < n;) {
 					let bone = bones[i];
-					let setupLength = bone.data.length, x = setupLength * bone.a, y = setupLength * bone.c;
+					let setupLength = bone.data.length;
+					if (setupLength == 0) setupLength = 0.0000001;
+					let x = setupLength * bone.a, y = setupLength * bone.c;
 					let length = Math.sqrt(x * x + y * y);
 					if (scale) lengths[i] = length;
 					spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است