From 87b9821e003571372122e27954461f69def475ec Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Wed, 30 Jun 2021 14:11:14 -0400 Subject: [PATCH] [as3][c][cpp][cs][libgdx][lua] Fixed crash with path constraint proportional spacing and tangent rotate modes. --- spine-as3/spine-as3/src/spine/PathConstraint.as | 2 +- spine-c/spine-c/src/spine/PathConstraint.c | 5 +++-- spine-cpp/spine-cpp/src/spine/PathConstraint.cpp | 2 +- spine-csharp/src/PathConstraint.cs | 3 +-- .../src/com/esotericsoftware/spine/PathConstraint.java | 2 +- spine-lua/spine-lua/PathConstraint.lua | 3 ++- spine-ts/core/src/PathConstraint.ts | 2 +- 7 files changed, 10 insertions(+), 9 deletions(-) diff --git a/spine-as3/spine-as3/src/spine/PathConstraint.as b/spine-as3/spine-as3/src/spine/PathConstraint.as index 6aa80b0bc..46d837fdd 100644 --- a/spine-as3/spine-as3/src/spine/PathConstraint.as +++ b/spine-as3/spine-as3/src/spine/PathConstraint.as @@ -108,7 +108,7 @@ package spine { break; case SpacingMode.proportional: var sum : Number = 0; - for (i = 0; i < boneCount;) { + for (i = 0, n = spacesCount - 1; i < n;) { bone = bones[i]; setupLength = bone.data.length; if (setupLength < PathConstraint.epsilon) { diff --git a/spine-c/spine-c/src/spine/PathConstraint.c b/spine-c/spine-c/src/spine/PathConstraint.c index de118b302..4923f4a35 100644 --- a/spine-c/spine-c/src/spine/PathConstraint.c +++ b/spine-c/spine-c/src/spine/PathConstraint.c @@ -126,11 +126,12 @@ void spPathConstraint_update(spPathConstraint *self) { } } } - for (i = 1, n = spacesCount; i < n; i++) spaces[i] = spacing; + for (i = 1, n = spacesCount; i < n; i++) + spaces[i] = spacing; break; case SP_SPACING_MODE_PROPORTIONAL: sum = 0; - for (i = 0; i < boneCount;) { + for (i = 0, n = spacesCount - 1; i < n;) { spBone *bone = bones[i]; setupLength = bone->data->length; if (setupLength < EPSILON) { diff --git a/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp b/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp index 1000802e8..7538d6180 100644 --- a/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp +++ b/spine-cpp/spine-cpp/src/spine/PathConstraint.cpp @@ -110,7 +110,7 @@ void PathConstraint::update() { } case SpacingMode_Proportional: { float sum = 0; - for (size_t i = 0; i < boneCount;) { + for (size_t i = 0, n = spacesCount - 1; i < n;) { Bone *boneP = _bones[i]; Bone &bone = *boneP; float setupLength = bone._data.getLength(); diff --git a/spine-csharp/src/PathConstraint.cs b/spine-csharp/src/PathConstraint.cs index b114cca76..31abec7a7 100644 --- a/spine-csharp/src/PathConstraint.cs +++ b/spine-csharp/src/PathConstraint.cs @@ -120,7 +120,7 @@ namespace Spine { break; case SpacingMode.Proportional: { float sum = 0; - for (int i = 0; i < boneCount;) { + for (int i = 0, n = spacesCount - 1; i < n;) { Bone bone = bonesItems[i]; float setupLength = bone.data.length; if (setupLength < PathConstraint.Epsilon) { @@ -143,7 +143,6 @@ namespace Spine { } default: { bool lengthSpacing = data.spacingMode == SpacingMode.Length; - for (int i = 0, n = spacesCount - 1; i < n;) { Bone bone = bonesItems[i]; float setupLength = bone.data.length; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java index 3155614f4..32614f0c9 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java @@ -124,7 +124,7 @@ public class PathConstraint implements Updatable { break; case proportional: float sum = 0; - for (int i = 0; i < boneCount;) { + for (int i = 0, n = spacesCount - 1; i < n;) { Bone bone = (Bone)bones[i]; float setupLength = bone.data.length; if (setupLength < epsilon) { diff --git a/spine-lua/spine-lua/PathConstraint.lua b/spine-lua/spine-lua/PathConstraint.lua index 1a3b80edf..ba6615734 100644 --- a/spine-lua/spine-lua/PathConstraint.lua +++ b/spine-lua/spine-lua/PathConstraint.lua @@ -137,7 +137,8 @@ function PathConstraint:update () elseif data.spacingMode == PathConstraintData.SpacingMode.proportional then local sum = 0 local i = 0 - while i < boneCount do + local n = spacesCount - 1 + while i < n do local bone = bones[i + 1] local setupLength = bone.data.length if setupLength < epsilon then diff --git a/spine-ts/core/src/PathConstraint.ts b/spine-ts/core/src/PathConstraint.ts index ae83f1dcf..e05f21831 100644 --- a/spine-ts/core/src/PathConstraint.ts +++ b/spine-ts/core/src/PathConstraint.ts @@ -116,7 +116,7 @@ module spine { break; case SpacingMode.Proportional: let sum = 0; - for (let i = 0; i < boneCount;) { + for (let i = 0, n = spacesCount - 1; i < n;) { let bone = bones[i]; let setupLength = bone.data.length; if (setupLength < PathConstraint.epsilon) {