[ts] port of PathConstraint changes, see #1109.

This commit is contained in:
badlogic 2018-05-04 14:07:13 +02:00
parent 162977d2f9
commit 2e4d3a1808
13 changed files with 136 additions and 66 deletions

View File

@ -2863,17 +2863,17 @@ var spine;
if (!translate && !rotate) if (!translate && !rotate)
return; return;
var data = this.data; var data = this.data;
var spacingMode = data.spacingMode; var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
var lengthSpacing = spacingMode == spine.SpacingMode.Length;
var rotateMode = data.rotateMode; var rotateMode = data.rotateMode;
var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
var bones = this.bones; var bones = this.bones;
var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
var spacing = this.spacing; var spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) if (scale)
lengths = spine.Utils.setArraySize(this.lengths, boneCount); lengths = spine.Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
@ -2882,9 +2882,17 @@ var spine;
lengths[i] = 0; lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} }
else { else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y); var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
}
else {
var x_1 = setupLength * bone.a, y_1 = setupLength * bone.c;
var length_1 = Math.sqrt(x_1 * x_1 + y_1 * y_1);
if (scale) if (scale)
lengths[i] = length_1; lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
@ -2895,7 +2903,7 @@ var spine;
for (var i = 1; i < spacesCount; i++) for (var i = 1; i < spacesCount; i++)
spaces[i] = spacing; spaces[i] = spacing;
} }
var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent); var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
var tip = false; var tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -2909,7 +2917,7 @@ var spine;
var bone = bones[i]; var bone = bones[i];
bone.worldX += (boneX - bone.worldX) * translateMix; bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix; bone.worldY += (boneY - bone.worldY) * translateMix;
var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; var x_2 = positions[p], y_2 = positions[p + 1], dx = x_2 - boneX, dy = y_2 - boneY;
if (scale) { if (scale) {
var length_2 = lengths[i]; var length_2 = lengths[i];
if (length_2 != 0) { if (length_2 != 0) {
@ -2918,8 +2926,8 @@ var spine;
bone.c *= s; bone.c *= s;
} }
} }
boneX = x; boneX = x_2;
boneY = y; boneY = y_2;
if (rotate) { if (rotate) {
var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
if (tangents) if (tangents)
@ -3073,6 +3081,8 @@ var spine;
} }
if (percentPosition) if (percentPosition)
position *= pathLength; position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (var i = 0; i < spacesCount; i++) for (var i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;

File diff suppressed because one or more lines are too long

View File

@ -2863,17 +2863,17 @@ var spine;
if (!translate && !rotate) if (!translate && !rotate)
return; return;
var data = this.data; var data = this.data;
var spacingMode = data.spacingMode; var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
var lengthSpacing = spacingMode == spine.SpacingMode.Length;
var rotateMode = data.rotateMode; var rotateMode = data.rotateMode;
var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
var bones = this.bones; var bones = this.bones;
var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
var spacing = this.spacing; var spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) if (scale)
lengths = spine.Utils.setArraySize(this.lengths, boneCount); lengths = spine.Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
@ -2882,9 +2882,17 @@ var spine;
lengths[i] = 0; lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} }
else { else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y); var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
}
else {
var x_1 = setupLength * bone.a, y_1 = setupLength * bone.c;
var length_1 = Math.sqrt(x_1 * x_1 + y_1 * y_1);
if (scale) if (scale)
lengths[i] = length_1; lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
@ -2895,7 +2903,7 @@ var spine;
for (var i = 1; i < spacesCount; i++) for (var i = 1; i < spacesCount; i++)
spaces[i] = spacing; spaces[i] = spacing;
} }
var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent); var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
var tip = false; var tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -2909,7 +2917,7 @@ var spine;
var bone = bones[i]; var bone = bones[i];
bone.worldX += (boneX - bone.worldX) * translateMix; bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix; bone.worldY += (boneY - bone.worldY) * translateMix;
var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; var x_2 = positions[p], y_2 = positions[p + 1], dx = x_2 - boneX, dy = y_2 - boneY;
if (scale) { if (scale) {
var length_2 = lengths[i]; var length_2 = lengths[i];
if (length_2 != 0) { if (length_2 != 0) {
@ -2918,8 +2926,8 @@ var spine;
bone.c *= s; bone.c *= s;
} }
} }
boneX = x; boneX = x_2;
boneY = y; boneY = y_2;
if (rotate) { if (rotate) {
var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
if (tangents) if (tangents)
@ -3073,6 +3081,8 @@ var spine;
} }
if (percentPosition) if (percentPosition)
position *= pathLength; position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (var i = 0; i < spacesCount; i++) for (var i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;

File diff suppressed because one or more lines are too long

View File

@ -2863,17 +2863,17 @@ var spine;
if (!translate && !rotate) if (!translate && !rotate)
return; return;
var data = this.data; var data = this.data;
var spacingMode = data.spacingMode; var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
var lengthSpacing = spacingMode == spine.SpacingMode.Length;
var rotateMode = data.rotateMode; var rotateMode = data.rotateMode;
var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
var bones = this.bones; var bones = this.bones;
var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
var spacing = this.spacing; var spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) if (scale)
lengths = spine.Utils.setArraySize(this.lengths, boneCount); lengths = spine.Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
@ -2882,9 +2882,17 @@ var spine;
lengths[i] = 0; lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} }
else { else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y); var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
}
else {
var x_1 = setupLength * bone.a, y_1 = setupLength * bone.c;
var length_1 = Math.sqrt(x_1 * x_1 + y_1 * y_1);
if (scale) if (scale)
lengths[i] = length_1; lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
@ -2895,7 +2903,7 @@ var spine;
for (var i = 1; i < spacesCount; i++) for (var i = 1; i < spacesCount; i++)
spaces[i] = spacing; spaces[i] = spacing;
} }
var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent); var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
var tip = false; var tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -2909,7 +2917,7 @@ var spine;
var bone = bones[i]; var bone = bones[i];
bone.worldX += (boneX - bone.worldX) * translateMix; bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix; bone.worldY += (boneY - bone.worldY) * translateMix;
var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; var x_2 = positions[p], y_2 = positions[p + 1], dx = x_2 - boneX, dy = y_2 - boneY;
if (scale) { if (scale) {
var length_2 = lengths[i]; var length_2 = lengths[i];
if (length_2 != 0) { if (length_2 != 0) {
@ -2918,8 +2926,8 @@ var spine;
bone.c *= s; bone.c *= s;
} }
} }
boneX = x; boneX = x_2;
boneY = y; boneY = y_2;
if (rotate) { if (rotate) {
var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
if (tangents) if (tangents)
@ -3073,6 +3081,8 @@ var spine;
} }
if (percentPosition) if (percentPosition)
position *= pathLength; position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (var i = 0; i < spacesCount; i++) for (var i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;

File diff suppressed because one or more lines are too long

View File

@ -2863,17 +2863,17 @@ var spine;
if (!translate && !rotate) if (!translate && !rotate)
return; return;
var data = this.data; var data = this.data;
var spacingMode = data.spacingMode; var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
var lengthSpacing = spacingMode == spine.SpacingMode.Length;
var rotateMode = data.rotateMode; var rotateMode = data.rotateMode;
var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
var bones = this.bones; var bones = this.bones;
var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
var spacing = this.spacing; var spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) if (scale)
lengths = spine.Utils.setArraySize(this.lengths, boneCount); lengths = spine.Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
@ -2882,9 +2882,17 @@ var spine;
lengths[i] = 0; lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} }
else { else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y); var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
}
else {
var x_1 = setupLength * bone.a, y_1 = setupLength * bone.c;
var length_1 = Math.sqrt(x_1 * x_1 + y_1 * y_1);
if (scale) if (scale)
lengths[i] = length_1; lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
@ -2895,7 +2903,7 @@ var spine;
for (var i = 1; i < spacesCount; i++) for (var i = 1; i < spacesCount; i++)
spaces[i] = spacing; spaces[i] = spacing;
} }
var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent); var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
var tip = false; var tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -2909,7 +2917,7 @@ var spine;
var bone = bones[i]; var bone = bones[i];
bone.worldX += (boneX - bone.worldX) * translateMix; bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix; bone.worldY += (boneY - bone.worldY) * translateMix;
var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; var x_2 = positions[p], y_2 = positions[p + 1], dx = x_2 - boneX, dy = y_2 - boneY;
if (scale) { if (scale) {
var length_2 = lengths[i]; var length_2 = lengths[i];
if (length_2 != 0) { if (length_2 != 0) {
@ -2918,8 +2926,8 @@ var spine;
bone.c *= s; bone.c *= s;
} }
} }
boneX = x; boneX = x_2;
boneY = y; boneY = y_2;
if (rotate) { if (rotate) {
var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
if (tangents) if (tangents)
@ -3073,6 +3081,8 @@ var spine;
} }
if (percentPosition) if (percentPosition)
position *= pathLength; position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (var i = 0; i < spacesCount; i++) for (var i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;

File diff suppressed because one or more lines are too long

View File

@ -2863,17 +2863,17 @@ var spine;
if (!translate && !rotate) if (!translate && !rotate)
return; return;
var data = this.data; var data = this.data;
var spacingMode = data.spacingMode; var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
var lengthSpacing = spacingMode == spine.SpacingMode.Length;
var rotateMode = data.rotateMode; var rotateMode = data.rotateMode;
var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
var bones = this.bones; var bones = this.bones;
var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
var spacing = this.spacing; var spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) if (scale)
lengths = spine.Utils.setArraySize(this.lengths, boneCount); lengths = spine.Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
@ -2882,9 +2882,17 @@ var spine;
lengths[i] = 0; lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} }
else { else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y); var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
}
else {
var x_1 = setupLength * bone.a, y_1 = setupLength * bone.c;
var length_1 = Math.sqrt(x_1 * x_1 + y_1 * y_1);
if (scale) if (scale)
lengths[i] = length_1; lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
@ -2895,7 +2903,7 @@ var spine;
for (var i = 1; i < spacesCount; i++) for (var i = 1; i < spacesCount; i++)
spaces[i] = spacing; spaces[i] = spacing;
} }
var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent); var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
var tip = false; var tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -2909,7 +2917,7 @@ var spine;
var bone = bones[i]; var bone = bones[i];
bone.worldX += (boneX - bone.worldX) * translateMix; bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix; bone.worldY += (boneY - bone.worldY) * translateMix;
var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; var x_2 = positions[p], y_2 = positions[p + 1], dx = x_2 - boneX, dy = y_2 - boneY;
if (scale) { if (scale) {
var length_2 = lengths[i]; var length_2 = lengths[i];
if (length_2 != 0) { if (length_2 != 0) {
@ -2918,8 +2926,8 @@ var spine;
bone.c *= s; bone.c *= s;
} }
} }
boneX = x; boneX = x_2;
boneY = y; boneY = y_2;
if (rotate) { if (rotate) {
var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
if (tangents) if (tangents)
@ -3073,6 +3081,8 @@ var spine;
} }
if (percentPosition) if (percentPosition)
position *= pathLength; position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (var i = 0; i < spacesCount; i++) for (var i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;

File diff suppressed because one or more lines are too long

View File

@ -2863,17 +2863,17 @@ var spine;
if (!translate && !rotate) if (!translate && !rotate)
return; return;
var data = this.data; var data = this.data;
var spacingMode = data.spacingMode; var percentSpacing = data.spacingMode == spine.SpacingMode.Percent;
var lengthSpacing = spacingMode == spine.SpacingMode.Length;
var rotateMode = data.rotateMode; var rotateMode = data.rotateMode;
var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale; var tangents = rotateMode == spine.RotateMode.Tangent, scale = rotateMode == spine.RotateMode.ChainScale;
var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; var boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
var bones = this.bones; var bones = this.bones;
var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null; var spaces = spine.Utils.setArraySize(this.spaces, spacesCount), lengths = null;
var spacing = this.spacing; var spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) if (scale)
lengths = spine.Utils.setArraySize(this.lengths, boneCount); lengths = spine.Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == spine.SpacingMode.Length;
for (var i = 0, n = spacesCount - 1; i < n;) { for (var i = 0, n = spacesCount - 1; i < n;) {
var bone = bones[i]; var bone = bones[i];
var setupLength = bone.data.length; var setupLength = bone.data.length;
@ -2882,9 +2882,17 @@ var spine;
lengths[i] = 0; lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} }
else { else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c; var x = setupLength * bone.a, y = setupLength * bone.c;
var length_1 = Math.sqrt(x * x + y * y); var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
}
else {
var x_1 = setupLength * bone.a, y_1 = setupLength * bone.c;
var length_1 = Math.sqrt(x_1 * x_1 + y_1 * y_1);
if (scale) if (scale)
lengths[i] = length_1; lengths[i] = length_1;
spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength; spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_1 / setupLength;
@ -2895,7 +2903,7 @@ var spine;
for (var i = 1; i < spacesCount; i++) for (var i = 1; i < spacesCount; i++)
spaces[i] = spacing; spaces[i] = spacing;
} }
var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, spacingMode == spine.SpacingMode.Percent); var positions = this.computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == spine.PositionMode.Percent, percentSpacing);
var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
var tip = false; var tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -2909,7 +2917,7 @@ var spine;
var bone = bones[i]; var bone = bones[i];
bone.worldX += (boneX - bone.worldX) * translateMix; bone.worldX += (boneX - bone.worldX) * translateMix;
bone.worldY += (boneY - bone.worldY) * translateMix; bone.worldY += (boneY - bone.worldY) * translateMix;
var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; var x_2 = positions[p], y_2 = positions[p + 1], dx = x_2 - boneX, dy = y_2 - boneY;
if (scale) { if (scale) {
var length_2 = lengths[i]; var length_2 = lengths[i];
if (length_2 != 0) { if (length_2 != 0) {
@ -2918,8 +2926,8 @@ var spine;
bone.c *= s; bone.c *= s;
} }
} }
boneX = x; boneX = x_2;
boneY = y; boneY = y_2;
if (rotate) { if (rotate) {
var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;
if (tangents) if (tangents)
@ -3073,6 +3081,8 @@ var spine;
} }
if (percentPosition) if (percentPosition)
position *= pathLength; position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (var i = 0; i < spacesCount; i++) for (var i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;

File diff suppressed because one or more lines are too long

View File

@ -69,22 +69,29 @@ module spine {
if (!translate && !rotate) return; if (!translate && !rotate) return;
let data = this.data; let data = this.data;
let spacingMode = data.spacingMode; let percentSpacing = data.spacingMode == SpacingMode.Percent;
let lengthSpacing = spacingMode == SpacingMode.Length;
let rotateMode = data.rotateMode; let rotateMode = data.rotateMode;
let tangents = rotateMode == RotateMode.Tangent, scale = rotateMode == RotateMode.ChainScale; let tangents = rotateMode == RotateMode.Tangent, scale = rotateMode == RotateMode.ChainScale;
let boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1; let boneCount = this.bones.length, spacesCount = tangents ? boneCount : boneCount + 1;
let bones = this.bones; let bones = this.bones;
let spaces = Utils.setArraySize(this.spaces, spacesCount), lengths: Array<number> = null; let spaces = Utils.setArraySize(this.spaces, spacesCount), lengths: Array<number> = null;
let spacing = this.spacing; let spacing = this.spacing;
if (scale || lengthSpacing) { if (scale || !percentSpacing) {
if (scale) lengths = Utils.setArraySize(this.lengths, boneCount); if (scale) lengths = Utils.setArraySize(this.lengths, boneCount);
var lengthSpacing = data.spacingMode == SpacingMode.Length;
for (let i = 0, n = spacesCount - 1; i < n;) { for (let i = 0, n = spacesCount - 1; i < n;) {
let bone = bones[i]; let bone = bones[i];
let setupLength = bone.data.length; let setupLength = bone.data.length;
if (setupLength < PathConstraint.epsilon) { if (setupLength < PathConstraint.epsilon) {
if (scale) lengths[i] = 0; if (scale) lengths[i] = 0;
spaces[++i] = 0; spaces[++i] = 0;
} else if (percentSpacing) {
if (scale) {
var x = setupLength * bone.a, y = setupLength * bone.c;
var length = Math.sqrt(x * x + y * y);
lengths[i] = length;
}
spaces[++i] = spacing;
} else { } else {
let x = setupLength * bone.a, y = setupLength * bone.c; let x = setupLength * bone.a, y = setupLength * bone.c;
let length = Math.sqrt(x * x + y * y); let length = Math.sqrt(x * x + y * y);
@ -98,7 +105,7 @@ module spine {
} }
let positions = this.computeWorldPositions(<PathAttachment>attachment, spacesCount, tangents, let positions = this.computeWorldPositions(<PathAttachment>attachment, spacesCount, tangents,
data.positionMode == PositionMode.Percent, spacingMode == SpacingMode.Percent); data.positionMode == PositionMode.Percent, percentSpacing);
let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;
let tip = false; let tip = false;
if (offsetRotation == 0) if (offsetRotation == 0)
@ -277,7 +284,10 @@ module spine {
x1 = x2; x1 = x2;
y1 = y2; y1 = y2;
} }
if (percentPosition) position *= pathLength; if (percentPosition)
position *= pathLength;
else
position *= pathLength / path.lengths[curveCount - 1];
if (percentSpacing) { if (percentSpacing) {
for (let i = 0; i < spacesCount; i++) for (let i = 0; i < spacesCount; i++)
spaces[i] *= pathLength; spaces[i] *= pathLength;