[haxe] 4.3 porting WIP.

This commit is contained in:
Davide Tantillo 2025-06-26 12:19:41 +02:00
parent fa24ea24c1
commit 247d36948a

View File

@ -196,8 +196,9 @@ abstract class ToProperty {
class FromRotate extends FromProperty { class FromRotate extends FromProperty {
public function value (skeleton:Skeleton, source:BonePose, local:Bool, offsets:Array<Float>):Float { public function value (skeleton:Skeleton, source:BonePose, local:Bool, offsets:Array<Float>):Float {
if (local) return source.rotation + offsets[TransformConstraintData.ROTATION]; if (local) return source.rotation + offsets[TransformConstraintData.ROTATION];
var value = Math.atan2(source.c / skeleton.scaleY, source.a / skeleton.scaleX) * MathUtils.radDeg var sx = skeleton.scaleX, sy = skeleton.scaleY;
+ (source.a * source.d - source.b * source.c > 0 ? offsets[TransformConstraintData.ROTATION] : -offsets[TransformConstraintData.ROTATION]); var value = Math.atan2(source.c / sy, source.a / sx) * MathUtils.radDeg
+ ((source.a * source.d - source.b * source.c) * sx * sy > 0 ? offsets[TransformConstraintData.ROTATION] : -offsets[TransformConstraintData.ROTATION]);
if (value < 0) value += 360; if (value < 0) value += 360;
return value; return value;
} }
@ -209,23 +210,23 @@ class ToRotate extends ToProperty {
} }
public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void { public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void {
if (local) { if (local)
if (!additive) value -= bone.rotation; bone.rotation += (additive ? value : value - bone.rotation) * pose.mixRotate;
bone.rotation += value * pose.mixRotate; else {
} else { var sx = skeleton.scaleX, sy = skeleton.scaleY, ix = 1 / sx, iy = 1 / sy;
var a = bone.a, b = bone.b, c = bone.c, d = bone.d; var a = bone.a * ix, b = bone.b * ix, c = bone.c * iy, d = bone.d * iy;
value *= MathUtils.degRad * Bone.yDir; value *= MathUtils.degRad;
if (!additive) value -= Math.atan2(c, a); if (!additive) value -= Math.atan2(c, a);
if (value > Math.PI) if (value > MathUtils.PI)
value -= MathUtils.PI2; value -= MathUtils.PI2;
else if (value < -Math.PI) // else if (value < -MathUtils.PI) //
value += MathUtils.PI2; value += MathUtils.PI2;
value *= pose.mixRotate; value *= pose.mixRotate;
var cos = Math.cos(value), sin = Math.sin(value); var cos = Math.cos(value), sin = Math.sin(value);
bone.a = cos * a - sin * c; bone.a = (cos * a - sin * c) * sx;
bone.b = cos * b - sin * d; bone.b = (cos * b - sin * d) * sx;
bone.c = sin * a + cos * c; bone.c = (sin * a + cos * c) * sy;
bone.d = sin * b + cos * d; bone.d = (sin * b + cos * d) * sy;
} }
} }
} }
@ -244,12 +245,11 @@ class ToX extends ToProperty {
} }
public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void { public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void {
if (local) { if (local)
if (!additive) value -= bone.x; bone.x += (additive ? value : value - bone.x) * pose.mixX;
bone.x += value * pose.mixX; else {
} else { if (!additive) value -= bone.worldX / skeleton.scaleX;
if (!additive) value -= bone.worldX; bone.worldX += value * pose.mixX * skeleton.scaleX;
bone.worldX += value * pose.mixX;
} }
} }
} }
@ -268,12 +268,11 @@ class ToY extends ToProperty {
} }
public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void { public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void {
if (local) { if (local)
if (!additive) value -= bone.y; bone.y += (additive ? value : value - bone.y) * pose.mixY;
bone.y += value * pose.mixY; else {
} else { if (!additive) value -= bone.worldY / skeleton.scaleY;
if (!additive) value -= bone.worldY * Bone.yDir; bone.worldY += value * pose.mixY * skeleton.scaleY;
bone.worldY += value * pose.mixY * Bone.yDir;
} }
} }
} }
@ -294,19 +293,20 @@ class ToScaleX extends ToProperty {
public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void { public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void {
if (local) { if (local) {
if (additive) if (additive)
bone.scaleX *= 1 + ((value - 1) * pose.mixScaleX); bone.scaleX *= 1 + (value - 1) * pose.mixScaleX;
else if (bone.scaleX != 0) // else if (bone.scaleX != 0) //
bone.scaleX = 1 + (value / bone.scaleX - 1) * pose.mixScaleX; bone.scaleX += (value - bone.scaleX) * pose.mixScaleX;
} else { } else if (additive) {
var s:Float; var s = 1 + (value - 1) * pose.mixScaleX;
if (additive)
s = 1 + (value - 1) * pose.mixScaleX;
else {
s = Math.sqrt(bone.a * bone.a + bone.c * bone.c) / skeleton.scaleX;
if (s != 0) s = 1 + (value / s - 1) * pose.mixScaleX;
}
bone.a *= s; bone.a *= s;
bone.c *= s; bone.c *= s;
} else {
var a = bone.a / skeleton.scaleX, c = bone.c / skeleton.scaleY, s = Math.sqrt(a * a + c * c);
if (s != 0) {
s = 1 + (value - s) * pose.mixScaleX / s;
bone.a *= s;
bone.c *= s;
}
} }
} }
} }
@ -327,19 +327,20 @@ class ToScaleY extends ToProperty {
public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void { public function apply (skeleton:Skeleton, pose:TransformConstraintPose, bone:BonePose, value:Float, local:Bool, additive:Bool):Void {
if (local) { if (local) {
if (additive) if (additive)
bone.scaleY *= 1 + ((value - 1) * pose.mixScaleY); bone.scaleY *= 1 + (value - 1) * pose.mixScaleY;
else if (bone.scaleY != 0) // else if (bone.scaleY != 0) //
bone.scaleY = 1 + (value / bone.scaleY - 1) * pose.mixScaleY; bone.scaleY += (value - bone.scaleY) * pose.mixScaleY;
} else { } else if (additive) {
var s:Float; var s = 1 + (value - 1) * pose.mixScaleY;
if (additive)
s = 1 + (value - 1) * pose.mixScaleY;
else {
s = Math.sqrt(bone.b * bone.b + bone.d * bone.d) / skeleton.scaleY * Bone.yDir;
if (s != 0) s = 1 + (value / s - 1) * pose.mixScaleY;
}
bone.b *= s; bone.b *= s;
bone.d *= s; bone.d *= s;
} else {
var b = bone.b / skeleton.scaleX, d = bone.d / skeleton.scaleY, s = Math.sqrt(b * b + d * d);
if (s != 0) {
s = 1 + (value - s) * pose.mixScaleY / s;
bone.b *= s;
bone.d *= s;
}
} }
} }
} }
@ -363,21 +364,21 @@ class ToShearY extends ToProperty {
if (!additive) value -= bone.shearY; if (!additive) value -= bone.shearY;
bone.shearY += value * pose.mixShearY; bone.shearY += value * pose.mixShearY;
} else { } else {
var b = bone.b, d = bone.d, by = Math.atan2(d, b); var sx = skeleton.scaleX, sy = skeleton.scaleY, b = bone.b / sx, d = bone.d / sy, by = Math.atan2(d, b);
value = (value + 90) * MathUtils.degRad * Bone.yDir; value = (value + 90) * MathUtils.degRad;
if (additive) if (additive)
value -= Math.PI / 2; value -= MathUtils.PI / 2;
else { else {
value -= by - Math.atan2(bone.c, bone.a); value -= by - Math.atan2(bone.c / sx, bone.a / sy);
if (value > Math.PI) if (value > MathUtils.PI)
value -= MathUtils.PI2; value -= MathUtils.PI2;
else if (value < -Math.PI) // else if (value < -MathUtils.PI)
value += MathUtils.PI2; value += MathUtils.PI2;
} }
value = by + value * pose.mixShearY; value = by + value * pose.mixShearY;
var s = Math.sqrt(b * b + d * d); var s = Math.sqrt(b * b + d * d);
bone.b = Math.cos(value) * s; bone.b = Math.cos(value) * s * sy;
bone.d = Math.sin(value) * s; bone.d = Math.sin(value) * s * sx;
} }
} }
} }