From 70031018f2499d0a784ac2db845cd4b9409059c3 Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Thu, 8 May 2025 23:35:15 -0400 Subject: [PATCH] [libgdx] Fixed slider using wrong pose. Use short pose variable for all constraints. --- .../esotericsoftware/spine/IkConstraint.java | 10 +++++----- .../esotericsoftware/spine/PathConstraint.java | 18 +++++++++--------- .../spine/PhysicsConstraint.java | 18 +++++++++--------- .../src/com/esotericsoftware/spine/Slider.java | 12 ++++++------ .../spine/TransformConstraint.java | 9 ++++----- 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index 82ef24230..d03afcd91 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -62,14 +62,14 @@ public class IkConstraint extends Constraint apply(skeleton, bones[0], target.worldX, target.worldY, a.compress, a.stretch, data.uniform, a.mix); - case 2 -> apply(skeleton, bones[0], bones[1], target.worldX, target.worldY, a.bendDirection, a.stretch, data.uniform, - a.softness, a.mix); + case 1 -> apply(skeleton, bones[0], target.worldX, target.worldY, p.compress, p.stretch, data.uniform, p.mix); + case 2 -> apply(skeleton, bones[0], bones[1], target.worldX, target.worldY, p.bendDirection, p.stretch, data.uniform, + p.softness, p.mix); } } 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 e9458fd26..ddb047b14 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java @@ -79,8 +79,8 @@ public class PathConstraint extends Constraint { @@ -149,14 +149,14 @@ public class PathConstraint extends Constraint 0 ? degRad : -degRad; + BonePose bone = slot.bone.applied; + offsetRotation *= bone.a * bone.d - bone.b * bone.c > 0 ? degRad : -degRad; } - for (int i = 0, p = 3, u = skeleton.update; i < boneCount; i++, p += 3) { + for (int i = 0, ip = 3, u = skeleton.update; i < boneCount; i++, ip += 3) { BonePose bone = bones[i]; bone.worldX += (boneX - bone.worldX) * mixX; bone.worldY += (boneY - bone.worldY) * mixY; - float x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + float x = positions[ip], y = positions[ip + 1], dx = x - boneX, dy = y - boneY; if (scale) { float length = lengths[i]; if (length >= epsilon) { @@ -170,9 +170,9 @@ public class PathConstraint extends Constraint 0) { float a = bone.a, b = bone.b, c = bone.c, d = bone.d, r, cos, sin; if (tangents) - r = positions[p - 1]; + r = positions[ip - 1]; else if (spaces[i + 1] < epsilon) - r = positions[p + 2]; + r = positions[ip + 2]; else r = atan2(dy, dx); r -= atan2(c, a); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java index 579dc1b0d..4a4935247 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java @@ -95,8 +95,8 @@ public class PhysicsConstraint extends Constraint 0, y = data.y > 0, rotateOrShearX = data.rotate > 0 || data.shearX > 0, scaleX = data.scaleX > 0; @@ -120,7 +120,7 @@ public class PhysicsConstraint extends Constraint= t) { - d = (float)Math.pow(pose.damping, 60 * t); - float m = pose.massInverse * t, e = pose.strength, w = pose.wind * f * skeleton.scaleX, - g = pose.gravity * f * skeleton.scaleY, xs = xOffset, ys = yOffset; + d = (float)Math.pow(p.damping, 60 * t); + float m = p.massInverse * t, e = p.strength, w = p.wind * f * skeleton.scaleX, + g = p.gravity * f * skeleton.scaleY, xs = xOffset, ys = yOffset; do { if (x) { xVelocity += (w - xOffset * e) * m; @@ -187,9 +187,9 @@ public class PhysicsConstraint extends Constraint 0) scaleOffset += (dx * c + dy * s) * i / r; } if (a >= t) { - if (d == -1) d = (float)Math.pow(pose.damping, 60 * t); - float m = pose.massInverse * t, e = pose.strength, w = pose.wind, g = pose.gravity, h = l / f, - rs = rotateOffset, ss = scaleOffset; + if (d == -1) d = (float)Math.pow(p.damping, 60 * t); + float m = p.massInverse * t, e = p.strength, w = p.wind, g = p.gravity, h = l / f, rs = rotateOffset, + ss = scaleOffset; while (true) { a -= t; if (scaleX) { diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java index c6cf757f2..0a5f9f8ab 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Slider.java @@ -59,16 +59,17 @@ public class Slider extends Constraint { } public void update (Skeleton skeleton, Physics physics) { - if (pose.mix == 0) return; + SliderPose p = applied; + if (p.mix == 0) return; Animation animation = data.animation; if (bone != null) { if (!bone.active) return; - pose.time = (data.property.value(bone.applied, data.local, offsets) - data.property.offset) * data.scale; + p.time = (data.property.value(bone.applied, data.local, offsets) - data.property.offset) * data.scale; if (data.loop) - pose.time = animation.duration + (pose.time % animation.duration); + p.time = animation.duration + (p.time % animation.duration); else - pose.time = Math.max(0, pose.time); + p.time = Math.max(0, p.time); } Bone[] bones = skeleton.bones.items; @@ -76,8 +77,7 @@ public class Slider extends Constraint { for (int i = 0, n = animation.timelines.size; i < n; i++) if (timelines[i] instanceof BoneTimeline timeline) bones[timeline.getBoneIndex()].applied.modifyLocal(skeleton); - SliderPose pose = applied; - animation.apply(skeleton, pose.time, pose.time, data.loop, null, pose.mix, data.additive ? MixBlend.add : MixBlend.replace, + animation.apply(skeleton, p.time, p.time, data.loop, null, p.mix, data.additive ? MixBlend.add : MixBlend.replace, MixDirection.in, true); } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java index 24b22aac7..f14999040 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java @@ -63,9 +63,8 @@ public class TransformConstraint extends Constraint