Merge branch '3.8' into 3.9-beta

This commit is contained in:
badlogic 2020-06-03 17:44:21 +02:00
commit 691767ca1f
22 changed files with 92 additions and 68 deletions

View File

@ -96,10 +96,13 @@ package spine {
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case TransformMode.noRotationOrReflection: case TransformMode.noRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * MathUtils.radDeg; var s : Number = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps : Number = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa : Number = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc : Number = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;
// Fall through.
default: default:
var x : Number = targetX - p.worldX, y : Number = targetY - p.worldY; var x : Number = targetX - p.worldX, y : Number = targetY - p.worldY;
var d : Number = pa * pd - pb * pc; var d : Number = pa * pd - pb * pc;

View File

@ -72,7 +72,7 @@ void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, int /*bo
spBone* p = bone->parent; spBone* p = bone->parent;
float pa = p->a, pb = p->b, pc = p->c, pd = p->d; float pa = p->a, pb = p->b, pc = p->c, pd = p->d;
float rotationIK = -bone->ashearX - bone->arotation; float rotationIK = -bone->ashearX - bone->arotation;
float tx = 0, ty = 0, sx = 0, sy = 0, s = 0; float tx = 0, ty = 0, sx = 0, sy = 0, s = 0, sa = 0, sc = 0;
if (!bone->appliedValid) spBone_updateAppliedTransform(bone); if (!bone->appliedValid) spBone_updateAppliedTransform(bone);
switch(bone->data->transformMode) { switch(bone->data->transformMode) {
@ -81,11 +81,12 @@ void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, int /*bo
ty = targetY - bone->worldY; ty = targetY - bone->worldY;
break; break;
case SP_TRANSFORMMODE_NOROTATIONORREFLECTION: { case SP_TRANSFORMMODE_NOROTATIONORREFLECTION: {
float ps; s = ABS(pa * pd - pb * pc) / (pa * pa + pc * pc);
rotationIK += ATAN2(pc, pa) * RAD_DEG; sa = pa / bone->skeleton->scaleX;
ps = ABS(pa * pd - pb * pc) / (pa * pa + pc * pc); sc = pc / bone->skeleton->scaleY;
pb = -pc * ps; pb = -sc * s * bone->skeleton->scaleX;
pd = pa * ps; pd = sa * s * bone->skeleton->scaleY;
rotationIK += ATAN2(sc, sa) * RAD_DEG;
} }
default: { default: {
float x = targetX - p->worldX, y = targetY - p->worldY; float x = targetX - p->worldX, y = targetY - p->worldY;

View File

@ -56,10 +56,12 @@ void IkConstraint::apply(Bone &bone, float targetX, float targetY, bool compress
ty = targetY - bone._worldY; ty = targetY - bone._worldY;
break; break;
case TransformMode_NoRotationOrReflection: { case TransformMode_NoRotationOrReflection: {
rotationIK += MathUtil::atan2(pc, pa) * MathUtil::Rad_Deg; float s = MathUtil::abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
float ps = MathUtil::abs(pa * pd - pb * pc) / (pa * pa + pc * pc); float sa = pa / bone._skeleton.getScaleX();
pb = -pc * ps; float sc = pc / bone._skeleton.getScaleY();
pd = pa * ps; pb = -sc * s * bone._skeleton.getScaleX();
pd = sa * s * bone._skeleton.getScaleY();
rotationIK += MathUtil::atan2(sc, sa) * MathUtil::Rad_Deg;
} }
default: default:
float x = targetX - p->_worldX, y = targetY - p->_worldY; float x = targetX - p->_worldX, y = targetY - p->_worldY;

View File

@ -170,18 +170,16 @@ namespace Spine {
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case TransformMode.NoRotationOrReflection: { case TransformMode.NoRotationOrReflection: {
rotationIK += (float)Math.Atan2(pc, pa) * MathUtils.RadDeg; float s = Math.Abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
float ps = Math.Abs(pa * pd - pb * pc) / (pa * pa + pc * pc); float sa = pa / bone.skeleton.ScaleX;
pb = -pc * ps; float sc = pc / bone.skeleton.ScaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.ScaleX;
float x = targetX - p.worldX, y = targetY - p.worldY; pd = sa * s * bone.skeleton.ScaleY;
float d = pa * pd - pb * pc; rotationIK += (float)Math.Atan2(pc, pa) * MathUtils.RadDeg;
tx = (x * pd - y * pb) / d - bone.ax; goto default; // Fall through.
ty = (y * pa - x * pc) / d - bone.ay;
break;
} }
default: { default: {
float x = targetX - p.worldX, y = targetY - p.worldY; float x = targetX - p.worldX, y = targetY - p.worldY;
float d = pa * pd - pb * pc; float d = pa * pd - pb * pc;
tx = (x * pd - y * pb) / d - bone.ax; tx = (x * pd - y * pb) / d - bone.ax;
ty = (y * pa - x * pc) / d - bone.ay; ty = (y * pa - x * pc) / d - bone.ay;

View File

@ -185,10 +185,12 @@ public class IkConstraint implements Updatable {
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case noRotationOrReflection: case noRotationOrReflection:
rotationIK += atan2(pc, pa) * radDeg; float s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
float ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); float sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; float sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += atan2(sc, sa) * radDeg;
// Fall through. // Fall through.
default: default:
float x = targetX - p.worldX, y = targetY - p.worldY; float x = targetX - p.worldX, y = targetY - p.worldY;

View File

@ -102,10 +102,14 @@ function IkConstraint:apply1 (bone, targetX, targetY, compress, stretch, uniform
tx = targetX - bone.worldX tx = targetX - bone.worldX
ty = targetY - bone.worldY ty = targetY - bone.worldY
elseif bone.data.transformMode == TransformMode.noRotationOrReflection then elseif bone.data.transformMode == TransformMode.noRotationOrReflection then
rotationIK = rotationIK + Math.atan2(pc, pa) * MathUtils.radDeg local s = math_abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
local ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc) local sa = pa / bone.skeleton.scaleX;
pb = -pc * ps local sc = pc / bone.skeleton.scaleY;
pd = pa * ps pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK = rotationIK + math_deg(math_atan2(sc, sa));
local x = targetX - p.worldX local x = targetX - p.worldX
local y = targetY - p.worldY local y = targetY - p.worldY
local d = pa * pd - pb * pc local d = pa * pd - pb * pc

View File

@ -2844,10 +2844,12 @@ var spine;
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case spine.TransformMode.NoRotationOrReflection: case spine.TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * spine.MathUtils.radDeg; var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg;
default: default:
var x = targetX - p.worldX, y = targetY - p.worldY; var x = targetX - p.worldX, y = targetY - p.worldY;
var d = pa * pd - pb * pc; var d = pa * pd - pb * pc;

File diff suppressed because one or more lines are too long

View File

@ -2844,10 +2844,12 @@ var spine;
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case spine.TransformMode.NoRotationOrReflection: case spine.TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * spine.MathUtils.radDeg; var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg;
default: default:
var x = targetX - p.worldX, y = targetY - p.worldY; var x = targetX - p.worldX, y = targetY - p.worldY;
var d = pa * pd - pb * pc; var d = pa * pd - pb * pc;

File diff suppressed because one or more lines are too long

View File

@ -2844,10 +2844,12 @@ var spine;
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case spine.TransformMode.NoRotationOrReflection: case spine.TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * spine.MathUtils.radDeg; var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg;
default: default:
var x = targetX - p.worldX, y = targetY - p.worldY; var x = targetX - p.worldX, y = targetY - p.worldY;
var d = pa * pd - pb * pc; var d = pa * pd - pb * pc;

File diff suppressed because one or more lines are too long

View File

@ -2844,10 +2844,12 @@ var spine;
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case spine.TransformMode.NoRotationOrReflection: case spine.TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * spine.MathUtils.radDeg; var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg;
default: default:
var x = targetX - p.worldX, y = targetY - p.worldY; var x = targetX - p.worldX, y = targetY - p.worldY;
var d = pa * pd - pb * pc; var d = pa * pd - pb * pc;

File diff suppressed because one or more lines are too long

View File

@ -2844,10 +2844,12 @@ var spine;
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case spine.TransformMode.NoRotationOrReflection: case spine.TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * spine.MathUtils.radDeg; var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg;
default: default:
var x = targetX - p.worldX, y = targetY - p.worldY; var x = targetX - p.worldX, y = targetY - p.worldY;
var d = pa * pd - pb * pc; var d = pa * pd - pb * pc;

File diff suppressed because one or more lines are too long

View File

@ -2844,10 +2844,12 @@ var spine;
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case spine.TransformMode.NoRotationOrReflection: case spine.TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * spine.MathUtils.radDeg; var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
var ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); var sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; var sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * spine.MathUtils.radDeg;
default: default:
var x = targetX - p.worldX, y = targetY - p.worldY; var x = targetX - p.worldX, y = targetY - p.worldY;
var d = pa * pd - pb * pc; var d = pa * pd - pb * pc;

File diff suppressed because one or more lines are too long

View File

@ -112,10 +112,12 @@ module spine {
ty = targetY - bone.worldY; ty = targetY - bone.worldY;
break; break;
case TransformMode.NoRotationOrReflection: case TransformMode.NoRotationOrReflection:
rotationIK += Math.atan2(pc, pa) * MathUtils.radDeg; let s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);
let ps = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); let sa = pa / bone.skeleton.scaleX;
pb = -pc * ps; let sc = pc / bone.skeleton.scaleY;
pd = pa * ps; pb = -sc * s * bone.skeleton.scaleX;
pd = sa * s * bone.skeleton.scaleY;
rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;
// Fall through // Fall through
default: default:
let x = targetX - p.worldX, y = targetY - p.worldY; let x = targetX - p.worldX, y = targetY - p.worldY;

View File

@ -355,7 +355,7 @@ namespace Spine.Unity {
#if UNITY_EDITOR && NEW_PREFAB_SYSTEM #if UNITY_EDITOR && NEW_PREFAB_SYSTEM
// Don't store mesh or material at the prefab, otherwise it will permanently reload // Don't store mesh or material at the prefab, otherwise it will permanently reload
var prefabType = UnityEditor.PrefabUtility.GetPrefabAssetType(this); var prefabType = UnityEditor.PrefabUtility.GetPrefabAssetType(this);
if (!UnityEditor.PrefabUtility.IsPartOfPrefabInstance(this) && if (UnityEditor.PrefabUtility.IsPartOfPrefabAsset(this) &&
(prefabType == UnityEditor.PrefabAssetType.Regular || prefabType == UnityEditor.PrefabAssetType.Variant)) { (prefabType == UnityEditor.PrefabAssetType.Regular || prefabType == UnityEditor.PrefabAssetType.Variant)) {
return; return;
} }