Integrating latest 47acbe8
This commit is contained in:
@@ -0,0 +1,271 @@
|
||||
|
||||
struct autoLocStruct
|
||||
(
|
||||
setCon,
|
||||
getChildExtent,
|
||||
getMaxValue,
|
||||
setBodyMass,
|
||||
calcLoc,
|
||||
setLoc
|
||||
)
|
||||
|
||||
|
||||
autoLoc = autoLocStruct()
|
||||
|
||||
|
||||
autoLoc.setCon = function setCon node time =
|
||||
(
|
||||
try
|
||||
(
|
||||
for i = 1 to node.controller.keys.count do
|
||||
(
|
||||
try
|
||||
(
|
||||
tempKey = biped.getKey node.controller i
|
||||
if tempKey.time == time then
|
||||
(
|
||||
tempKey.continuity = 0
|
||||
)
|
||||
)
|
||||
catch()
|
||||
)
|
||||
)
|
||||
catch()
|
||||
)
|
||||
setCon = undefined
|
||||
|
||||
|
||||
|
||||
autoLoc.calcLoc = function calcLoc =
|
||||
(
|
||||
cycleLoc = true
|
||||
rotateLoc = #none
|
||||
posChange = false
|
||||
startLoc = #none
|
||||
locoCycle = false
|
||||
|
||||
|
||||
|
||||
at time animationRange.start
|
||||
(
|
||||
startRot = $Bip01.transform.rotation as eulerangles
|
||||
startPos = $Bip01.transform.pos
|
||||
|
||||
startLFootPos = $'Bip01 L Toe0'.transform.pos
|
||||
startRFootPos = $'Bip01 R Toe0'.transform.pos
|
||||
)
|
||||
|
||||
at time animationRange.end
|
||||
(
|
||||
endRot = $Bip01.transform.rotation as eulerangles
|
||||
endPos = $Bip01.transform.pos
|
||||
)
|
||||
|
||||
at time ((animationRange.start + animationRange.end) / 2)
|
||||
midRot = $Bip01.transform.rotation as eulerangles
|
||||
|
||||
at time 2f
|
||||
(
|
||||
startMidPos = $Bip01.transform.pos
|
||||
|
||||
startMidLFootPos = $'Bip01 L Toe0'.transform.pos
|
||||
startMidRFootPos = $'Bip01 R Toe0'.transform.pos
|
||||
)
|
||||
|
||||
at time (animationRange.end - 2)
|
||||
endMidPos = $Bip01.transform.pos
|
||||
|
||||
|
||||
|
||||
diffRot = #(endRot.x, endRot.y, endRot.z)
|
||||
diffRot[1] -= startRot.x
|
||||
diffRot[2] -= startRot.y
|
||||
diffRot[3] -= startRot.z
|
||||
|
||||
diffMidRot = #(midRot.x, midRot.y, midRot.z)
|
||||
diffMidRot[1] -= startRot.x
|
||||
diffMidRot[2] -= startRot.y
|
||||
diffMidRot[3] -= startRot.z
|
||||
|
||||
|
||||
|
||||
diffPos = endPos - startPos
|
||||
diffStartPos = startMidPos - startPos
|
||||
diffEndPos = endPos - endMidPos
|
||||
|
||||
diffLFootPos = startLFootPos - startMidLFootPos
|
||||
diffRFootPos = startRFootPos - startMidRFootPos
|
||||
|
||||
diffRotPositiv = copy diffRot #noMap
|
||||
|
||||
for i = 1 to 3 do
|
||||
(
|
||||
if diffPos[i] < 0 then diffPos[i] *= -1
|
||||
if diffPos[i] > 10 then posChange = true
|
||||
if diffRotPositiv[i] < 0 then diffRotPositiv[i] *= -1
|
||||
if diffRotPositiv[i] > 2 then cycleLoc = false
|
||||
--if diffMidRot[i] < 0 then diffMidRot[i] *= -1
|
||||
|
||||
if diffLFootPos[i] < 0 then diffLFootPos[i] *= -1
|
||||
if diffLFootPos[i] > 10 then locoCycle = true
|
||||
|
||||
if diffRFootPos[i] < 0 then diffRFootPos[i] *= -1
|
||||
if diffRFootPos[i] > 10 then locoCycle = true
|
||||
)
|
||||
|
||||
|
||||
|
||||
if cycleLoc == false then locoCycle = false
|
||||
|
||||
|
||||
diffStartPos = distance startPos startMidPos
|
||||
diffEndPos = distance endMidPos endPos
|
||||
|
||||
|
||||
|
||||
if diffStartPos < 5 and diffStartPos > 0.4 then
|
||||
(
|
||||
if locoCycle == false then
|
||||
startLoc = #start
|
||||
)
|
||||
if diffStartPos > 4 and diffEndPos < 2 then
|
||||
if locoCycle == false then
|
||||
if cycleLoc == false then
|
||||
startLoc = #stop
|
||||
|
||||
|
||||
|
||||
|
||||
if diffRot[3] < 140 and diffRot[3] > 80 then
|
||||
rotateLoc = #left
|
||||
if diffRot[3] < -40 and diffRot[3] > -100 then
|
||||
rotateLoc = #right
|
||||
|
||||
|
||||
if diffMidRot[3] > -220 and diffMidRot[3] < -140 then
|
||||
(
|
||||
if diffRot[3] < -140 and diffRot[3] > -180 then
|
||||
rotateLoc = #revL
|
||||
)
|
||||
|
||||
if diffMidRot[3] > -140 and diffMidRot[3] < -60 then
|
||||
(
|
||||
if diffRot[3] < -130 and diffRot[3] > -170 then
|
||||
rotateLoc = #revR
|
||||
)
|
||||
|
||||
-- print ("diffMidRot = " + diffMidRot as String)
|
||||
-- print ("diffRot = " + diffRot as String)
|
||||
-- print ("diffEndPos = " + diffEndPos as String)
|
||||
-- print ("diffStartPos = " + diffStartPos as String)
|
||||
-- print ("diffLFootPos = " + diffLFootPos as String)
|
||||
-- print ("diffRFootPos = " + diffRFootPos as String)
|
||||
-- print ("startLoc = " + startLoc as String)
|
||||
-- print ("rotateLoc = " + rotateLoc as String)
|
||||
-- print ("cycleLoc = " + cycleLoc as String)
|
||||
-- print ("posChange = " + posChange as String)
|
||||
-- print ("locoCycle = " + locoCycle as String)
|
||||
|
||||
|
||||
struct locStruct ( start, rotate, cycle, position )
|
||||
local tempValue = locStruct start:startLoc rotate:rotateLoc cycle:cycleLoc position:posChange
|
||||
|
||||
-- print tempValue
|
||||
|
||||
return tempValue
|
||||
)
|
||||
calcLoc = undefined
|
||||
|
||||
|
||||
autoLoc.setLoc = function setLoc =
|
||||
(
|
||||
analyseLoc = autoLoc.calcLoc()
|
||||
|
||||
cryTools.cryAnim._f.resetLocator()
|
||||
|
||||
cryTools.cryAnim._f.moveToBodyMass()
|
||||
|
||||
if analyseLoc.rotate != #none then
|
||||
(
|
||||
at time 10f
|
||||
(
|
||||
biped.setTransform $Locator_Locomotion #pos $Locator_Locomotion.transform.pos true
|
||||
autoLoc.setCon $Locator_Locomotion 10f
|
||||
)
|
||||
|
||||
at time animationRange.end
|
||||
cryTools.cryAnim._f.moveToBodyMass()
|
||||
|
||||
|
||||
with animate on
|
||||
(
|
||||
at time 16f
|
||||
(
|
||||
case analyseLoc.rotate of
|
||||
(
|
||||
#left: rotate $Locator_Locomotion (eulerangles 0 0 89)
|
||||
#right: rotate $Locator_Locomotion (eulerangles 0 0 -89)
|
||||
#revL: rotate $Locator_Locomotion (eulerangles 0 0 179)
|
||||
#revR: rotate $Locator_Locomotion (eulerangles 0 0 -179)
|
||||
)
|
||||
autoLoc.setCon $Locator_Locomotion 16f
|
||||
)
|
||||
|
||||
at time animationRange.end
|
||||
(
|
||||
case analyseLoc.rotate of
|
||||
(
|
||||
#left: rotate $Locator_Locomotion (eulerangles 0 0 89)
|
||||
#right: rotate $Locator_Locomotion (eulerangles 0 0 -89)
|
||||
#revL: rotate $Locator_Locomotion (eulerangles 0 0 179)
|
||||
#revR: rotate $Locator_Locomotion (eulerangles 0 0 -179)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
else
|
||||
(
|
||||
if analyseLoc.position == true then
|
||||
(
|
||||
if analyseLoc.start == #start then
|
||||
(
|
||||
at time 10f
|
||||
(
|
||||
biped.setTransform $Locator_Locomotion #pos $Locator_Locomotion.transform.pos true
|
||||
autoLoc.setCon $Locator_Locomotion 10f
|
||||
)
|
||||
|
||||
at time animationRange.end
|
||||
cryTools.cryAnim._f.moveToBodyMass()
|
||||
)
|
||||
else
|
||||
(
|
||||
at time animationRange.end
|
||||
cryTools.cryAnim._f.moveToBodyMass()
|
||||
)
|
||||
)
|
||||
else
|
||||
(
|
||||
if analyseLoc.start == #start then
|
||||
at time animationRange.end
|
||||
cryTools.cryAnim._f.moveToBodyMass()
|
||||
)
|
||||
)
|
||||
|
||||
sliderTime = animationRange.start + 1
|
||||
sliderTime = animationRange.start
|
||||
|
||||
)
|
||||
setLoc = undefined
|
||||
|
||||
try
|
||||
autoLoc.setLoc()
|
||||
catch
|
||||
cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = "Error: Auto-Loc"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user