mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
[lua] port of PathConstraint changes, see #1109.
This commit is contained in:
parent
6f1ef88f1e
commit
8d087341ac
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user