Browse Source

[libgdx] Fixed data loader scale for transform constraint.

Nathan Sweet 5 tháng trước cách đây
mục cha
commit
7965da21b9

+ 31 - 12
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);