[libgdx] Brought back transform constraint offset.

This commit is contained in:
Nathan Sweet 2025-04-09 17:14:28 -04:00
parent ead468332c
commit 52b7423b23
3 changed files with 65 additions and 13 deletions

View File

@ -334,14 +334,19 @@ public class SkeletonBinary extends SkeletonLoader {
froms[ii] = from;
}
flags = input.read();
if ((flags & 1) != 0) data.offsetX = input.readFloat();
if ((flags & 2) != 0) data.offsetY = input.readFloat();
if ((flags & 4) != 0) data.mixRotate = input.readFloat();
if ((flags & 8) != 0) data.mixX = input.readFloat();
if ((flags & 16) != 0) data.mixY = input.readFloat();
if ((flags & 32) != 0) data.mixScaleX = input.readFloat();
if ((flags & 64) != 0) data.mixScaleY = input.readFloat();
if ((flags & 128) != 0) data.mixShearY = input.readFloat();
if ((flags & 1) != 0) data.offsetRotation = input.readFloat();
if ((flags & 2) != 0) data.offsetX = input.readFloat();
if ((flags & 4) != 0) data.offsetY = input.readFloat();
if ((flags & 8) != 0) data.offsetScaleX = input.readFloat();
if ((flags & 16) != 0) data.offsetScaleY = input.readFloat();
if ((flags & 32) != 0) data.offsetShearY = input.readFloat();
flags = input.read();
if ((flags & 1) != 0) data.mixRotate = input.readFloat();
if ((flags & 2) != 0) data.mixX = input.readFloat();
if ((flags & 4) != 0) data.mixY = input.readFloat();
if ((flags & 8) != 0) data.mixScaleX = input.readFloat();
if ((flags & 16) != 0) data.mixScaleY = input.readFloat();
if ((flags & 32) != 0) data.mixShearY = input.readFloat();
o[i] = data;
}

View File

@ -321,8 +321,13 @@ public class SkeletonJson extends SkeletonLoader {
if (from.to.notEmpty()) data.properties.add(from);
}
data.offsetRotation = constraintMap.getFloat("rotation", 0);
data.offsetX = constraintMap.getFloat("x", 0) * scale;
data.offsetY = constraintMap.getFloat("y", 0) * scale;
data.offsetScaleX = constraintMap.getFloat("scaleX", 0);
data.offsetScaleY = constraintMap.getFloat("scaleY", 0);
data.offsetShearY = constraintMap.getFloat("shearY", 0);
if (rotate) data.mixRotate = constraintMap.getFloat("mixRotate", 1);
if (x) data.mixX = constraintMap.getFloat("mixX", 1);
if (y) data.mixY = constraintMap.getFloat("mixY", data.mixX);

View File

@ -39,7 +39,8 @@ import com.badlogic.gdx.utils.Array;
public class TransformConstraintData extends ConstraintData {
final Array<BoneData> bones = new Array();
BoneData source;
float offsetX, offsetY, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY;
float mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY;
float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY;
boolean localSource, localTarget, additive, clamp;
final Array<FromProperty> properties = new Array();
@ -121,6 +122,15 @@ public class TransformConstraintData extends ConstraintData {
this.mixShearY = mixShearY;
}
/** An offset added to the constrained bone rotation. */
public float getOffsetRotation () {
return offsetRotation;
}
public void setOffsetRotation (float offsetRotation) {
this.offsetRotation = offsetRotation;
}
/** An offset added to the constrained bone X translation. */
public float getOffsetX () {
return offsetX;
@ -139,6 +149,33 @@ public class TransformConstraintData extends ConstraintData {
this.offsetY = offsetY;
}
/** An offset added to the constrained bone scaleX. */
public float getOffsetScaleX () {
return offsetScaleX;
}
public void setOffsetScaleX (float offsetScaleX) {
this.offsetScaleX = offsetScaleX;
}
/** An offset added to the constrained bone scaleY. */
public float getOffsetScaleY () {
return offsetScaleY;
}
public void setOffsetScaleY (float offsetScaleY) {
this.offsetScaleY = offsetScaleY;
}
/** An offset added to the constrained bone shearY. */
public float getOffsetShearY () {
return offsetShearY;
}
public void setOffsetShearY (float offsetShearY) {
this.offsetShearY = offsetShearY;
}
/** Reads the source bone's local transform instead of its world transform. */
public boolean getLocalSource () {
return localSource;
@ -207,7 +244,11 @@ public class TransformConstraintData extends ConstraintData {
static public class FromRotate extends FromProperty {
public float value (TransformConstraintData data, Bone source, boolean local) {
return local ? source.arotation : atan2(source.c, source.a) * radDeg;
if (local) return source.arotation + data.offsetRotation;
float value = atan2(source.c, source.a) * radDeg
+ (source.a * source.d - source.b * source.c > 0 ? data.offsetRotation : -data.offsetRotation);
if (value < 0) value += 360;
return value;
}
}
@ -284,7 +325,7 @@ public class TransformConstraintData extends ConstraintData {
static public class FromScaleX extends FromProperty {
public float value (TransformConstraintData data, Bone source, boolean local) {
return local ? source.ascaleX : (float)Math.sqrt(source.a * source.a + source.c * source.c);
return (local ? source.ascaleX : (float)Math.sqrt(source.a * source.a + source.c * source.c)) + data.offsetScaleX;
}
}
@ -315,7 +356,7 @@ public class TransformConstraintData extends ConstraintData {
static public class FromScaleY extends FromProperty {
public float value (TransformConstraintData data, Bone source, boolean local) {
return local ? source.ascaleY : (float)Math.sqrt(source.b * source.b + source.d * source.d);
return (local ? source.ascaleY : (float)Math.sqrt(source.b * source.b + source.d * source.d)) + data.offsetScaleY;
}
}
@ -346,7 +387,8 @@ public class TransformConstraintData extends ConstraintData {
static public class FromShearY extends FromProperty {
public float value (TransformConstraintData data, Bone source, boolean local) {
return local ? source.ashearY : (atan2(source.d, source.b) - atan2(source.c, source.a)) * radDeg - 90;
return (local ? source.ashearY : (atan2(source.d, source.b) - atan2(source.c, source.a)) * radDeg - 90)
+ data.offsetShearY;
}
}