From 7965da21b9e1af8acd331af9536d51a1385a4446 Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Tue, 8 Apr 2025 14:10:12 -0400 Subject: [PATCH] [libgdx] Fixed data loader scale for transform constraint. --- .../esotericsoftware/spine/SkeletonJson.java | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 1f79d22f9..b6bcde394 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -263,17 +263,34 @@ public class SkeletonJson extends SkeletonLoader { boolean rotate = false, x = false, y = false, scaleX = false, scaleY = false, shearY = false; for (JsonValue fromEntry = constraintMap.getChild("properties"); fromEntry != null; fromEntry = fromEntry.next) { - FromProperty from = switch (fromEntry.name) { - case "rotate" -> new FromRotate(); - case "x" -> new FromX(); - case "y" -> new FromY(); - case "scaleX" -> new FromScaleX(); - case "scaleY" -> new FromScaleY(); - case "shearY" -> new FromShearY(); + float fromScale = 1; + FromProperty from; + switch (fromEntry.name) { + case "rotate" -> { + from = new FromRotate(); + } + case "x" -> { + from = new FromX(); + fromScale = scale; + } + case "y" -> { + from = new FromY(); + fromScale = scale; + } + case "scaleX" -> { + from = new FromScaleX(); + } + case "scaleY" -> { + from = new FromScaleY(); + } + case "shearY" -> { + from = new FromShearY(); + } default -> throw new SerializationException("Invalid transform constraint from property: " + fromEntry.name); - }; - from.offset = fromEntry.getFloat("offset", 0) * scale; + } + from.offset = fromEntry.getFloat("offset", 0) * fromScale; for (JsonValue toEntry = fromEntry.getChild("to"); toEntry != null; toEntry = toEntry.next) { + float toScale = 1; ToProperty to; switch (toEntry.name) { case "rotate" -> { @@ -283,10 +300,12 @@ public class SkeletonJson extends SkeletonLoader { case "x" -> { x = true; to = new ToX(); + toScale = scale; } case "y" -> { y = true; to = new ToY(); + toScale = scale; } case "scaleX" -> { scaleX = true; @@ -302,9 +321,9 @@ public class SkeletonJson extends SkeletonLoader { } default -> throw new SerializationException("Invalid transform constraint to property: " + toEntry.name); } - to.offset = toEntry.getFloat("offset", 0) * scale; - to.max = toEntry.getFloat("max", 1) * scale; - to.scale = toEntry.getFloat("scale"); + to.offset = toEntry.getFloat("offset", 0) * toScale; + to.max = toEntry.getFloat("max", 1) * toScale; + to.scale = toEntry.getFloat("scale") * toScale / fromScale; from.to.add(to); } if (from.to.notEmpty()) data.properties.add(from);