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

This commit is contained in:
badlogic 2018-05-04 14:53:11 +02:00
parent 6f1ef88f1e
commit 8d087341ac

View File

@ -99,9 +99,8 @@ function PathConstraint:update ()
local rotate = rotateMix > 0 local rotate = rotateMix > 0
if not translate and not rotate then return end if not translate and not rotate then return end
local data = self.data; local data = self.data;
local spacingMode = data.spacingMode local percentSpacing = data.spacingMode == PathConstraintData.SpacingMode.percent
local lengthSpacing = spacingMode == PathConstraintData.SpacingMode.length
local rotateMode = data.rotateMode local rotateMode = data.rotateMode
local tangents = rotateMode == PathConstraintData.RotateMode.tangent local tangents = rotateMode == PathConstraintData.RotateMode.tangent
local scale = rotateMode == PathConstraintData.RotateMode.chainscale local scale = rotateMode == PathConstraintData.RotateMode.chainscale
@ -112,8 +111,9 @@ function PathConstraint:update ()
local spaces = utils.setArraySize(self.spaces, spacesCount) local spaces = utils.setArraySize(self.spaces, spacesCount)
local lengths = nil local lengths = nil
local spacing = self.spacing local spacing = self.spacing
if scale or lengthSpacing then if scale or not percentSpacing then
if scale then lengths = utils.setArraySize(self.lengths, boneCount) end if scale then lengths = utils.setArraySize(self.lengths, boneCount) end
local lengthSpacing = data.spacingMode == PathConstraintData.SpacingMode.length
local i = 0 local i = 0
local n = spacesCount - 1 local n = spacesCount - 1
while i < n do while i < n do
@ -123,6 +123,15 @@ function PathConstraint:update ()
if scale then lengths[i + 1] = 0 end if scale then lengths[i + 1] = 0 end
i = i + 1 i = i + 1
spaces[i + 1] = 0 spaces[i + 1] = 0
elseif percentSpacing then
if scale then
local x = setupLength * bone.a
local y = setupLength * bone.c
local length = math_sqrt(x * x + y * y)
lengths[i + 1] = length
end
i = i + 1
spaces[i + 1] = spacing
else else
local x = setupLength * bone.a local x = setupLength * bone.a
local y = setupLength * bone.c local y = setupLength * bone.c
@ -144,7 +153,7 @@ function PathConstraint:update ()
end end
end end
local positions = self:computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == PathConstraintData.PositionMode.percent, spacingMode == PathConstraintData.SpacingMode.percent) local positions = self:computeWorldPositions(attachment, spacesCount, tangents, data.positionMode == PathConstraintData.PositionMode.percent, percentSpacing)
local boneX = positions[1] local boneX = positions[1]
local boneY = positions[2] local boneY = positions[2]
local offsetRotation = data.offsetRotation local offsetRotation = data.offsetRotation
@ -380,7 +389,11 @@ function PathConstraint:computeWorldPositions (path, spacesCount, tangents, perc
i = i + 1 i = i + 1
w = w + 6 w = w + 6
end end
if percentPosition then position = position * pathLength end if percentPosition then
position = position * pathLength
else
position = position * pathLength / path.lengths[curveCount];
end
if percentSpacing then if percentSpacing then
local i = 0 local i = 0
while i < spacesCount do while i < spacesCount do