|
|
-------------------------------------------------------------------------------
|
|
|
-- functions.ms
|
|
|
-- Version 2.9
|
|
|
-- functions file where almost all specific functions are defined
|
|
|
-- By: Mathias Lindner
|
|
|
-- eMail: devsupport@crytek.com
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getBipNames
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- get the names of used links (used for non-default biped systems)
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getBipNames = function getBipNames index =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if $Bip01 != undefined then
|
|
|
(
|
|
|
if $Bip01.classID[1] == 37157 then
|
|
|
(
|
|
|
case index of
|
|
|
(
|
|
|
/*Hand*/1: ( tempNode = biped.getNode $Bip01 #rArm link:4 )
|
|
|
/*Foot*/2: ( tempNode = biped.getNode $Bip01 #rLeg link:3 )
|
|
|
/*Toe0*/3: ( tempNode = biped.getNode $Bip01 #rToes link:1 )
|
|
|
/*Finger*/4: ( return "Finger" )
|
|
|
)
|
|
|
|
|
|
|
|
|
--// stores the last part of the string
|
|
|
tempFilterString = (filterString tempNode.name " ")[3]
|
|
|
|
|
|
return tempFilterString
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return undefined
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getBipNames" )
|
|
|
)
|
|
|
getBipNames = undefined
|
|
|
logOutput "> Created cryAnim._f.getBipNames function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getBaseBip
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- gets the root node of the biped hierarchy
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getBaseBip = function getBaseBip op:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local baseBip = undefined
|
|
|
try
|
|
|
(
|
|
|
baseBip = selection[1].controller.rootNode
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
for obj in Objects do
|
|
|
(
|
|
|
if obj.classID[1] == 37157 then
|
|
|
baseBip = obj.controller.rootNode
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if baseBip == undefined then
|
|
|
(
|
|
|
if op == #load then
|
|
|
messageBox "No Biped in Scene." title:"Load File"
|
|
|
else
|
|
|
print "No Biped in Scene"
|
|
|
)
|
|
|
|
|
|
return baseBip
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getBaseBip" )
|
|
|
)
|
|
|
getBaseBip = undefined
|
|
|
logOutput "> Created cryAnim._f.getBaseBip function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getSelectedBipPart
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the biped part which is currently in selection
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getSelectedBipPart = function getSelectedBipPart =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// defines using "standard" constructor
|
|
|
tempFilter = bipPartSt object:(objectSt selected:undefined parent:undefined child:undefined isPivot:false) part:(partNameSt name:undefined leftRight:undefined bodyPart:undefined) name:undefined pivotSel:(pivotSelSt index:undefined pivotName:undefined position:undefined pivPoint:(pivPointSt name:undefined position:undefined) )
|
|
|
|
|
|
--// gets selected biped object
|
|
|
selectedBipPart = getCurrentSelection()
|
|
|
|
|
|
--// stores the selected object in tempFilter
|
|
|
if selectedBipPart[1] != undefined then
|
|
|
tempFilter.object.selected = selectedBipPart[1]
|
|
|
else return undefined
|
|
|
|
|
|
if tempFilter.object.selected.superClassID != 16 then
|
|
|
return undefined
|
|
|
|
|
|
--// filters the name using space (" ") for seperation
|
|
|
tempFilterString = (filterString selectedBipPart[1].name " ")
|
|
|
-- check if selected part is child of bip01
|
|
|
tempNodeParent = #()
|
|
|
validBipedPart = false
|
|
|
for i = 1 to 20 do
|
|
|
(
|
|
|
if tempNodeParent.count == 0 then
|
|
|
--// initialise with the selected object
|
|
|
append tempNodeParent tempFilter.object.selected
|
|
|
else
|
|
|
--// if the latest object is not undefined, then add the parent to the array
|
|
|
if tempNodeParent[tempNodeParent.count] != undefined then
|
|
|
append tempNodeParent tempNodeParent[tempNodeParent.count].parent
|
|
|
--// if parent is undefined (end of parentList) then break the loop
|
|
|
if tempNodeParent[tempNodeParent.count] == undefined then
|
|
|
break
|
|
|
)
|
|
|
if (findItem tempNodeParent $Bip01 ) == 0 then
|
|
|
return undefined
|
|
|
else
|
|
|
--// if Bip01 is in in the parent list, then set validBipedPart to true
|
|
|
validBipedPart = true
|
|
|
|
|
|
|
|
|
------// stores last part (body part, for example: "Foot" or "Hand" etc.) in .part
|
|
|
----// necessary for resetRotation to get every possible biped part
|
|
|
--// if there is more than 2 substrings (i.e. "Bip01 L Hand" or "Bip01 R Foot")
|
|
|
if tempFilterString.count > 2 then
|
|
|
(
|
|
|
tempFilter.part.leftRight = tempFilterString[2]
|
|
|
tempFilter.part.bodyPart = tempFilterString[3]
|
|
|
tempFilter.part.name = tempFilterString[2] + tempFilterString[3]
|
|
|
)
|
|
|
--// if there is less than 3 substrings (i.e. "Bip01 Spine" or "Bip01 Head"
|
|
|
else
|
|
|
(
|
|
|
tempFilter.part.leftRight = ""
|
|
|
tempFilter.part.bodyPart = tempFilterString[tempFilterString.count]
|
|
|
tempFilter.part.name = tempFilterString[tempFilterString.count]
|
|
|
)
|
|
|
|
|
|
if findString tempFilter.part.bodyPart "Finger" != undefined then
|
|
|
tempFilter.part.bodyPart = substring tempFilter.part.bodyPart 1 6
|
|
|
|
|
|
--// stores the name of the selected object
|
|
|
tempFilter.name = tempFilter.object.selected.name
|
|
|
|
|
|
ok = false
|
|
|
tempBipNames = #()
|
|
|
|
|
|
for i = 1 to 3 do
|
|
|
tempBipNames[i] = cryTools.cryAnim._f.getBipNames i
|
|
|
|
|
|
|
|
|
function getObjectParent baseObject =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
for i = 1 to 20 do
|
|
|
(
|
|
|
if baseObject != undefined then
|
|
|
(
|
|
|
if findString baseObject.parent.name "Hand" != undefined then
|
|
|
return baseObject.parent
|
|
|
else
|
|
|
baseObject = baseObject.parent
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ()
|
|
|
|
|
|
return undefined
|
|
|
)
|
|
|
|
|
|
|
|
|
case tempFilter.part.bodyPart of
|
|
|
(
|
|
|
/*Hand*/(cryTools.cryAnim._f.getBipNames 1): ( ok = true )
|
|
|
/*Finger*/(cryTools.cryAnim._f.getBipNames 4): ( ok = true
|
|
|
tempFilter.part.bodyPart = (cryTools.cryAnim._f.getBipNames 1)
|
|
|
tempFilter.part.name = tempFilter.part.leftRight + tempFilter.part.bodyPart
|
|
|
tempFilter.object.child = tempFilter.object.selected
|
|
|
tempFilter.object.selected = getObjectParent tempFilter.object.child
|
|
|
tempFilter.name = tempFilter.object.selected.name
|
|
|
)
|
|
|
/*Foot*/(cryTools.cryAnim._f.getBipNames 2): ( ok = true )
|
|
|
/*Toe0*/(cryTools.cryAnim._f.getBipNames 3): ( ok = true
|
|
|
--// only necessary for resetRotation() to check, if the toe or finger is selected
|
|
|
tempFilter.part.bodyPart = (cryTools.cryAnim._f.getBipNames 2)
|
|
|
tempFilter.part.name = tempFilter.part.leftRight + tempFilter.part.bodyPart
|
|
|
tempFilter.object.child = tempfilter.object.selected
|
|
|
tempFilter.object.selected = tempFilter.object.selected.parent
|
|
|
tempFilter.name = tempFilter.object.selected.name
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
if tempFilter.object.selected != $Bip01 then
|
|
|
tempFilter.object.parent = tempFilter.object.selected.parent
|
|
|
|
|
|
if ok == true then
|
|
|
tempFilter.object.isPivot = true
|
|
|
|
|
|
if tempFilter.object.isPivot == true then
|
|
|
(
|
|
|
try (tempFilter.pivotSel.index = execute ("cryTools.cryAnim.align._v.pivotLast." + tempFilter.part.name + ".index") )catch( print "Error getting pivotSel.index" )
|
|
|
try (tempFilter.pivotSel.pivotName = execute ("cryTools.cryAnim.align._v.pivotLast." + tempFilter.part.name + ".pivotName") ) catch(print "Error getting pivotSel.pivotName" )
|
|
|
try (tempFilter.pivotSel.position = execute ("cryTools.cryAnim.align._v.pivotLast." + tempFilter.part.name + ".position") ) catch( print "Error getting pivotSel.position" )
|
|
|
try (tempFilter.pivotSel.pivObject = execute ("cryTools.cryAnim.align._v.pivotLast." + tempFilter.part.name + ".pivObject") ) catch( print "Error getting pivotSel.pivObject" )
|
|
|
try (tempFilter.pivotSel.pivPoint.name = execute ("cryTools.cryAnim.align._v.pivotLast." + tempFilter.part.name + ".pivPoint.name") ) catch( print "Error getting pivotSel.pivPoint.name" )
|
|
|
try (tempFilter.pivotSel.pivPoint.position = execute ("cryTools.cryAnim.align._v.pivotLast." + tempFilter.part.name + ".pivPoint.position") ) catch( print "Error getting pivotSel.pivPoint.position" )
|
|
|
)
|
|
|
|
|
|
|
|
|
if validBipedPart == true then
|
|
|
return tempFilter
|
|
|
else
|
|
|
--// if no biped part for pivot selection is selected, then return
|
|
|
return undefined
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getSelectedBipPart" )
|
|
|
)
|
|
|
getSelectedBipPart = undefined
|
|
|
logOutput "> Created cryAnim._f.getSelectedBipPart function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getSelectedBipPart
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the biped part which is currently in selection
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getPivotPointPos = function getPivotPointPos index baseNode =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
vertPos = undefined
|
|
|
|
|
|
selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
|
|
|
|
|
|
case (selectedBipPart.part.bodyPart) of
|
|
|
(
|
|
|
|
|
|
--// checks what biped part is selected
|
|
|
/*Foot*/(cryTools.cryAnim._f.getBipNames 2):
|
|
|
(
|
|
|
try ( child = baseNode.children[1] ) catch()
|
|
|
if child == undefined then
|
|
|
child = baseNode
|
|
|
|
|
|
|
|
|
case (index) of
|
|
|
(
|
|
|
--// returns the pivot position values of the selected biped object
|
|
|
1: vertPos = (in coordsys world baseNode.transform.pos)
|
|
|
2: vertPos = (in coordsys world (getVert baseNode 7))
|
|
|
3: vertPos = (in coordsys world ( ((getVert baseNode 6) + (getVert baseNode 7)) / 2) )
|
|
|
4: vertPos = (in coordsys world (getVert baseNode 6))
|
|
|
5: vertPos = (in coordsys world (getVert baseNode 3))
|
|
|
6: vertPos = (in coordsys world ( ((getVert baseNode 2) + (getVert baseNode 3)) / 2) )
|
|
|
7: vertPos = (in coordsys world (getVert baseNode 2))
|
|
|
8: vertPos = (in coordsys world (getVert child 2))
|
|
|
9: vertPos = (in coordsys world ( ((getVert child 2) + (getVert child 6)) / 2) )
|
|
|
10: vertPos = (in coordsys world (getVert child 6))
|
|
|
)
|
|
|
)
|
|
|
/*Hand*/(cryTools.cryAnim._f.getBipNames 1):
|
|
|
(
|
|
|
local childArray = cryTools.cryAnim._f.getChildren selectedBipPart.object.selected
|
|
|
|
|
|
|
|
|
case (index) of
|
|
|
(
|
|
|
--// STUPID EDIT POLY --
|
|
|
1: vertPos = (in coordsys world baseNode.transform.pos )
|
|
|
2: vertPos = (in coordsys world (getVert baseNode 8))
|
|
|
3: vertPos = (in coordsys world ( ((getVert baseNode 8) + (getVert baseNode 4)) / 2) )
|
|
|
4: vertPos = (in coordsys world (getVert baseNode 4))
|
|
|
5: vertPos = (in coordsys world (getVert baseNode 7))
|
|
|
6: vertPos = (in coordsys world ( ((getVert baseNode 7) + (getVert baseNode 3)) / 2) )
|
|
|
7: vertPos = (in coordsys world (getVert baseNode 3))
|
|
|
)
|
|
|
|
|
|
|
|
|
if index > 7 then
|
|
|
vertPos = (in coordsys world ( ((getVert childArray[index - 7] 7) + (getVert childArray[index - 7] 3)) / 2) )
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return vertPos
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getPivotPointPos" )
|
|
|
)
|
|
|
getPivotPointPos = undefined
|
|
|
logOutput "> Created cryAnim._f.getPivotPointPos function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getNearestSnapshot
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- gets the nearest snapshot of the selected object in the scene
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getNearestSnapshot = function getNearestSnapshot =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempSnapList = #()
|
|
|
local usedSnapshot = undefined
|
|
|
local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
|
|
|
|
|
|
pivotDistance = pivotDistanceStruct()
|
|
|
|
|
|
|
|
|
if selectedBipPart != undefined then
|
|
|
(
|
|
|
if selectedBipPart.object.isPivot == true then
|
|
|
(
|
|
|
--// tries to get the index the last used pivot
|
|
|
local pivotIndex = selectedBipPart.pivotSel.index
|
|
|
--// if not found, pivot will be set to 1
|
|
|
if pivotIndex == undefined then pivotIndex = 1
|
|
|
|
|
|
|
|
|
--// snapshot function does not work with fingers, in this case the pivot point will be used
|
|
|
if selectedBipPart.part.bodyPart == "Hand" then
|
|
|
if selectedBipPart.pivotSel.pivObject != undefined then
|
|
|
if findString selectedBipPart.pivotSel.pivObject "Finger" != undefined then
|
|
|
return undefined
|
|
|
|
|
|
addModifier selectedBipPart.object.selected (edit_mesh())
|
|
|
--// gets the pivot position of the biped object
|
|
|
local bipPivotPos = (cryTools.cryAnim._f.getPivotPointPos pivotIndex selectedBipPart.object.selected)
|
|
|
deleteModifier selectedBipPart.object.selected 1
|
|
|
|
|
|
|
|
|
|
|
|
for i = 1 to Objects.count do
|
|
|
(
|
|
|
|
|
|
if pivotIndex <= 7 then
|
|
|
--// gets all available snapshots and stores it temporary in tempSnap
|
|
|
local tempSnap = getNodeByName (selectedBipPart.name + "0" + i as String)
|
|
|
else
|
|
|
--// gets all available snapshot toes and stores it temporary in tempSnap
|
|
|
local tempSnap = getNodeByName (selectedBipPart.object.selected.children[1].name + i as String)
|
|
|
|
|
|
|
|
|
if tempSnap != undefined then
|
|
|
(
|
|
|
--// stores founded snapshots in tempSnapList
|
|
|
append tempSnapList tempSnap.name
|
|
|
|
|
|
--// gets pivot position of the snapshot
|
|
|
local snapshotPivotPos = (cryTools.cryAnim._f.getPivotPointPos pivotIndex tempSnap)
|
|
|
|
|
|
|
|
|
if pivotDistance.distance == undefined then
|
|
|
(
|
|
|
----// for initialisation
|
|
|
--// gets the distance between the pivot of snapshot and biped object and stores it in pivotDistance
|
|
|
pivotDistance.distance = distance bipPivotPos snapshotPivotPos
|
|
|
pivotDistance.name = tempSnap.name
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
--// gets the distance from snapshot and biped object pivot
|
|
|
local tempDistance = (distance bipPivotPos snapshotPivotPos)
|
|
|
--// checks, which distance is smaller and stores the distance and name of the snapshot in pivotDistance
|
|
|
if pivotDistance.distance > tempDistance then
|
|
|
(
|
|
|
pivotDistance.distance = distance bipPivotPos snapshotPivotPos
|
|
|
pivotDistance.name = tempSnap.name
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if tempSnapList.count > 0 then
|
|
|
return (getNodeByName pivotDistance.name)
|
|
|
)
|
|
|
)
|
|
|
--// otherwise undefined
|
|
|
return undefined
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getNearestSnapshot" )
|
|
|
)
|
|
|
getNearestSnapshot = undefined
|
|
|
logOutput "> Created cryAnim._f.getNearestSnapshot function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.moveBipPartPivPoint
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves node to the pivot point
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.moveBipPartPivPoint = function moveBipPartPivPoint =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
|
|
|
(
|
|
|
if selectedBipPart.object.isPivot == true then
|
|
|
(
|
|
|
if selectedBipPart.pivotSel.pivPoint.position != undefined then
|
|
|
(
|
|
|
selectedObject = selectedBipPart.object.selected
|
|
|
|
|
|
|
|
|
addModifier selectedBipPart.object.selected (edit_mesh())
|
|
|
bipPivotPos = ( cryTools.cryAnim._f.getPivotPointPos selectedBipPart.pivotSel.index selectedBipPart.object.selected )
|
|
|
deleteModifier selectedBipPart.object.selected 1
|
|
|
|
|
|
offsetPos = (selectedBipPart.pivotSel.pivPoint.position - bipPivotPos)
|
|
|
tempRot = selectedObject.transform.rotation as eulerangles
|
|
|
in coordsys world (move selectedObject offsetPos)
|
|
|
|
|
|
if selectedBipPart.part.bodyPart == "Hand" then
|
|
|
biped.setTransform selectedObject #rotation tempRot true
|
|
|
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
return false
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.moveBipPartPivPoint" )
|
|
|
)
|
|
|
moveBipPartPivPoint = undefined
|
|
|
logOutput "> Created cryAnim._f.moveBipPartPivPoint function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.moveRotBipPartPivPoint
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves and rotates node to pivot point
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.moveRotBipPartPivPoint = function moveRotBipPartPivPoint =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
if selectedBipPart != undefined then
|
|
|
(
|
|
|
if selectedBipPart.object.isPivot == true then
|
|
|
(
|
|
|
if selectedBipPart.pivotSel.pivPoint.name != undefined then
|
|
|
(
|
|
|
--try
|
|
|
--(
|
|
|
local tempString = "pivSnap" + (substring selectedBipPart.pivotSel.pivPoint.name 9 selectedBipPart.pivotSel.pivPoint.name.count)
|
|
|
biped.setTransform selectedBipPart.object.selected #rotation (getNodeByName tempString).transform.rotation true
|
|
|
cryTools.cryAnim._f.moveBipPartPivPoint()
|
|
|
return true
|
|
|
--)catch()
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
return undefined
|
|
|
|
|
|
return false
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.moveRotBipPartPivPoint" )
|
|
|
)
|
|
|
moveRotBipPartPivPoint = undefined
|
|
|
logOutput "> Created cryAnim._f.moveRotBipPartPivPoint function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.moveBipPart
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves node to the pivot of the nearest snapshot
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.moveBipPart = function moveBipPart =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
pivotIndex = undefined
|
|
|
selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
if selectedBipPart != undefined then
|
|
|
(
|
|
|
if selectedBipPart.object.isPivot == true then
|
|
|
(
|
|
|
--// if last used pivot is undefined then start selection tool
|
|
|
if selectedBipPart.pivotSel.index == undefined then
|
|
|
(
|
|
|
pivotIndex = 1
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
--// gets the initial letter of the pivot name ("e" or "p" (edge or point))
|
|
|
case (substring selectedBipPart.pivotSel.pivotName 1 1) of
|
|
|
(
|
|
|
"p":
|
|
|
(
|
|
|
pivotIndex = selectedBipPart.pivotSel.index
|
|
|
)
|
|
|
"e":
|
|
|
(
|
|
|
angleY = 0.0
|
|
|
angleZ = 0.0
|
|
|
|
|
|
--// due to different order of the edges the pivot will be choosen for the edge
|
|
|
case selectedBipPart.pivotSel.index of
|
|
|
(
|
|
|
1: pivotIndex = 2
|
|
|
2: pivotIndex = 5
|
|
|
3: pivotIndex = 7
|
|
|
4: pivotIndex = 4
|
|
|
)
|
|
|
|
|
|
--// gets nearest snapshot and applys the transform matrix on the variable
|
|
|
if (tempSnapMatrix = cryTools.cryAnim._f.getNearestSnapshot() ) != undefined then
|
|
|
(
|
|
|
tempSnapMatrix = tempSnapMatrix.transform
|
|
|
|
|
|
--// gets the transform matrix of the selected object
|
|
|
tempBipMatrix = selectedBipPart.object.selected.transform
|
|
|
|
|
|
--// which edges are selected
|
|
|
if mod selectedBipPart.pivotSel.index 2 == 0.0 then
|
|
|
(
|
|
|
--// 2 or 4 is selected
|
|
|
angleY = 0.0
|
|
|
--// gets angle of row2
|
|
|
angleZ = acos ( dot (normalize [tempBipMatrix.row2.x, tempBipMatrix.row2.y, tempBipMatrix.row2.z]) (normalize [tempBipMatrix.row2.x, tempBipMatrix.row2.y, 0]))
|
|
|
--// if row2 is smaller than 0 (rotated downward)
|
|
|
if tempBipMatrix.row2.z < 0 then
|
|
|
--// stores negative value
|
|
|
angleZ -= angleZ*2
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
--// 1 or 3 is selected
|
|
|
--// gets angle of row3
|
|
|
angleY = acos ( dot (normalize [tempBipMatrix.row3.x, tempBipMatrix.row3.y, tempBipMatrix.row3.z]) (normalize [tempBipMatrix.row3.x, tempBipMatrix.row3.y, 0]))
|
|
|
angleZ = 0.0
|
|
|
--// if row3 is bigger than 0 (rotated to the right)
|
|
|
if tempBipMatrix.row3.z > 0 then
|
|
|
--// stores negative value
|
|
|
angleY -= angleY*2
|
|
|
)
|
|
|
--// creates new matrix with the rotation of the snapshot, but transition of the biped part
|
|
|
newMatrix = matrix3 tempSnapMatrix.row1 tempSnapMatrix.row2 tempSnapMatrix.row3 tempBipMatrix.row4
|
|
|
--// applys new transformation matrix to the selected biped part
|
|
|
selectedBipPart.object.selected.transform = newMatrix
|
|
|
|
|
|
--// rotates the selected biped part with the angle of the original rotation
|
|
|
in coordsys local rotate selectedBipPart.object.selected (eulerangles 0 angleY angleZ )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
addModifier selectedBipPart.object.selected (edit_mesh())
|
|
|
--// gets pivot position of the biped object
|
|
|
local bipPivotPos = ( cryTools.cryAnim._f.getPivotPointPos pivotIndex selectedBipPart.object.selected )
|
|
|
deleteModifier selectedBipPart.object.selected 1
|
|
|
|
|
|
--// gets nearest snapshot
|
|
|
local tempSnap = cryTools.cryAnim._f.getNearestSnapshot()
|
|
|
|
|
|
--// if snapshot is not available or in the scene, then return false
|
|
|
if tempSnap == undefined then return false
|
|
|
--// gets pivot position of the nearest snapshot
|
|
|
local snapshotPivotPos = (cryTools.cryAnim._f.getPivotPointPos pivotIndex tempSnap )
|
|
|
|
|
|
--// generates the offset for moving the biped object to the new snapshot location
|
|
|
local bipPivotOffset = snapshotPivotPos - bipPivotPos
|
|
|
--// moves biped object to new location
|
|
|
local tempRot = $.transform.rotation as eulerangles
|
|
|
in coordsys world (move $ bipPivotOffset)
|
|
|
|
|
|
if selectedBipPart.part.bodyPart == "Hand" then
|
|
|
biped.setTransform $ #rotation tempRot true
|
|
|
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.moveBipPart" )
|
|
|
)
|
|
|
moveBipPart = undefined
|
|
|
logOutput "> Created cryAnim._f.moveBipPart function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.moveRotBipPart
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves and rotates node to the nearest snapshots pivot
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.moveRotBipPart = function moveRotBipPart =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// get selected object and check if not unselected
|
|
|
pivotIndex = undefined
|
|
|
|
|
|
if ( selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
|
|
|
(
|
|
|
if selectedBipPart.object.isPivot == true then
|
|
|
(
|
|
|
if selectedBipPart.pivotSel.index == undefined then
|
|
|
pivotIndex = 1
|
|
|
else
|
|
|
pivotIndex = selectedBipPart.pivotSel.index
|
|
|
|
|
|
--// gets nearest snapshot
|
|
|
tempSnap = cryTools.cryAnim._f.getNearestSnapshot()
|
|
|
if tempSnap != undefined then
|
|
|
(
|
|
|
--// gets the rotation of snapshot
|
|
|
tempRot = tempSnap.rotation
|
|
|
--// inverts the angle of rotation
|
|
|
tempRot.w = tempRot.w - (tempRot.w * 2)
|
|
|
--// checks, if the toe pivot is selected
|
|
|
if pivotIndex <= 7 then
|
|
|
(
|
|
|
--// if available, then apply rotation of the snapshot to the selected biped object
|
|
|
biped.setTransform selectedBipPart.object.selected #rotation tempRot true
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
--// if toe is selected, then apply rotation to the toe (child of foot)
|
|
|
biped.setTransform selectedBipPart.object.selected.children[1] #rotation tempRot true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
--// tries to translate the biped object to the snapshot
|
|
|
if cryTools.cryAnim._f.moveBipPart() == true then
|
|
|
return true
|
|
|
else
|
|
|
return false
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.moveRotBipPart" )
|
|
|
)
|
|
|
moveRotBipPart = undefined
|
|
|
logOutput "> Created cryAnim._f.moveRotBipPart function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.moveToFloor
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves the selected foot to the floor
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.moveToFloor = function moveToFloor value:undefined getHeight:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if ( selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
|
|
|
(
|
|
|
if selectedBipPart.object.isPivot == true then
|
|
|
(
|
|
|
--// creates a matrix to rotate the selected object
|
|
|
tempMatrix = selectedBipPart.object.selected.transform
|
|
|
|
|
|
--// creates the height of the foot out of the distance between the heighest vert (5) and lowest vert (6)
|
|
|
if value == undefined then
|
|
|
(
|
|
|
addModifier selectedBipPart.object.selected (edit_mesh())
|
|
|
tempHeight = distance (getVert selectedBipPart.object.selected 5) (getVert selectedBipPart.object.selected 6)
|
|
|
deleteModifier selectedBipPart.object.selected 1
|
|
|
)
|
|
|
else
|
|
|
tempHeight = value
|
|
|
|
|
|
if getHeight != undefined then
|
|
|
return tempHeight
|
|
|
|
|
|
--// sets new rotation to the matrix, so that it keeps the horizontal rotation
|
|
|
tempMatrix = matrix3 [0, 0, -1] [tempMatrix.row2.x, tempMatrix.row2.y, 0] [tempMatrix.row3.x, tempMatrix.row3.y, 0] [tempMatrix.row4.x, tempMatrix.row4.y, tempHeight]
|
|
|
--// sets the foot to the floor
|
|
|
selectedBipPart.object.selected.transform = tempMatrix
|
|
|
biped.setTransform selectedBipPart.object.selected #pos [tempMatrix.pos[1], tempMatrix.pos[2], tempMatrix.pos[3]] true
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
else
|
|
|
return undefined
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.moveToFloor" )
|
|
|
)
|
|
|
moveToFloor = undefined
|
|
|
logOutput "> Created cryAnim._f.moveToFloor function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.resetRotation
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- applies the parent rotation to the child
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.resetRotation = function resetRotation =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if selection.count > 0 then
|
|
|
(
|
|
|
for obj in selection do
|
|
|
(
|
|
|
if obj.classID[1] == 37157 then
|
|
|
(
|
|
|
if obj.parent != undefined then
|
|
|
(
|
|
|
local newRotation = obj.parent.transform.rotation
|
|
|
|
|
|
if findString obj.name "Toe" != undefined then
|
|
|
newRotation = (matrix3 obj.parent.transform.row2 -obj.parent.transform.row1 obj.parent.transform.row3 obj.transform.row4).rotation
|
|
|
if findString obj.name "Hand" != undefined then
|
|
|
newRotation = (matrix3 obj.parent.transform.row1 -obj.parent.transform.row3 obj.parent.transform.row2 obj.transform.row4).rotation
|
|
|
|
|
|
biped.setTransform obj #rotation newRotation true
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if obj.parent != undefined then
|
|
|
(
|
|
|
local newMatrix = obj.transform
|
|
|
|
|
|
newMatrix.rotation = obj.parent.transform.rotation
|
|
|
newMatrix.position = obj.transform.position
|
|
|
obj.transform = newMatrix
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.resetRotation" )
|
|
|
)
|
|
|
resetRotation = undefined
|
|
|
logOutput "> Created cryAnim._f.resetRotation function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--//################################################################
|
|
|
--// DEF:cryTools.cryAnim._f.rotate180
|
|
|
--//--------------------------------------------------------------------------------------------------------------------------------
|
|
|
--// rotates the biped around 180<38>
|
|
|
--//################################################################
|
|
|
--/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.rotateAnim = function rotateAnim animDir range:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if classOf animDir == Integer or classOf animDir == Float then
|
|
|
(
|
|
|
if selection.count > 0 then
|
|
|
local usedNode = (getCurrentSelection())[1]
|
|
|
else
|
|
|
if $Bip01 != undefined then
|
|
|
usedNode = $Bip01
|
|
|
|
|
|
if usedNode != undefined then
|
|
|
(
|
|
|
if usedNode.classID[1] == 37157 then
|
|
|
(
|
|
|
usedNode = usedNode.controller.rootNode
|
|
|
local undoString = "rotate " + animDir as String
|
|
|
undo undoString on
|
|
|
(
|
|
|
if range != undefined then
|
|
|
(
|
|
|
at time animationRange.start
|
|
|
(
|
|
|
with animate off
|
|
|
(
|
|
|
usedNode.controller.moveAllMode = true
|
|
|
rotate usedNode (eulerangles 0 0 animDir)
|
|
|
biped.collapseMoveAllMode usedNode.controller
|
|
|
usedNode.controller.moveAllMode = false
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if $Locator_Locomotion != undefined then
|
|
|
(
|
|
|
if $Locator_Locomotion.classID[1] == 37157 then
|
|
|
(
|
|
|
at time animationRange.start
|
|
|
(
|
|
|
with animate off
|
|
|
(
|
|
|
rotRoot = box pos:usedNode.transform.pos name:"rotRoot"
|
|
|
locClone = (cryTools.cryAnim._f.createSnapshot object:$Locator_Locomotion)[1]
|
|
|
locClone.parent = rotRoot
|
|
|
)
|
|
|
)
|
|
|
|
|
|
for i = animationRange.start to animationRange.end do
|
|
|
(
|
|
|
with animate on
|
|
|
at time i
|
|
|
locClone.transform = $Locator_Locomotion.transform
|
|
|
)
|
|
|
|
|
|
with animate off
|
|
|
(
|
|
|
at time animationRange.start
|
|
|
rotate rotRoot (eulerangles 0 0 animDir)
|
|
|
)
|
|
|
|
|
|
|
|
|
with redraw off
|
|
|
(
|
|
|
for i = animationRange.start to animationRange.end do
|
|
|
(
|
|
|
sliderTime = i
|
|
|
(
|
|
|
with animate on
|
|
|
(
|
|
|
biped.setTransform $Locator_Locomotion #rotation locClone.transform.rotation true
|
|
|
biped.setTransform $Locator_Locomotion #pos locClone.transform.pos true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
sliderTime = animationRange.start + 1
|
|
|
sliderTime = animationRange.start
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
with animate on
|
|
|
rotate usedNode (eulerangles 0 0 animDir)
|
|
|
|
|
|
if $Locator_Locomotion != undefined then
|
|
|
(
|
|
|
if $Locator_Locomotion.classID[1] == 37157 then
|
|
|
(
|
|
|
with animate off
|
|
|
(
|
|
|
rotRoot = box pos:usedNode.transform.pos name:"rotRoot"
|
|
|
locClone = (cryTools.cryAnim._f.createSnapshot object:$Locator_Locomotion)[1]
|
|
|
locClone.parent = rotRoot
|
|
|
rotate rotRoot (eulerangles 0 0 animDir)
|
|
|
)
|
|
|
|
|
|
with animate on
|
|
|
(
|
|
|
biped.setTransform $Locator_Locomotion #rotation locClone.transform.rotation true
|
|
|
biped.setTransform $Locator_Locomotion #pos locClone.transform.pos true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
try
|
|
|
(
|
|
|
delete rotRoot
|
|
|
delete locClone
|
|
|
)catch()
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.rotateAnim" )
|
|
|
)
|
|
|
rotateAnim = undefined
|
|
|
logOutput "> Created cryAnim._f.rotateAnim function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.bipToZero2
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves Bip01 to [0,0,z]
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.bipToZero2 = function bipToZero2 =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
biped.setTransform $Bip01 #pos [0,0,($Bip01.transform.pos[3])] true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.bipToZero2" )
|
|
|
)
|
|
|
bipToZero2 = undefined
|
|
|
logOutput "> Created cryAnim._f.bipToZero2 function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.bipToZero3
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves Bip01 to [0,0,0]
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.bipToZero3 = function bipToZero3 =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
biped.setTransform $Bip01 #pos [0,0,0] true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.bipToZero3" )
|
|
|
)
|
|
|
bipToZero3 = undefined
|
|
|
logOutput "> Created cryAnim._f.bipToZero3 function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.setTrajectories
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- shows trajectory of selected objects
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.setTrajectories = function setTrajectories dir =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
|
|
|
case dir of
|
|
|
(
|
|
|
#show:
|
|
|
(
|
|
|
for obj in $selection do
|
|
|
setTrajectoryOn obj true
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
#hide:
|
|
|
(
|
|
|
for obj in Objects do
|
|
|
setTrajectoryOn obj false
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
#checkHide:
|
|
|
(
|
|
|
for obj in Objects do
|
|
|
if (getTrajectoryOn obj) == true then
|
|
|
return true
|
|
|
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.setTrajectories" )
|
|
|
)
|
|
|
setTrajectories = undefined
|
|
|
logOutput "> Created cryAnim._f.setTrajectories function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.resetLocator
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- resets locator to [0,0,0] Y+/Y-
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.resetLocator = function resetLocator forceDir:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if $Locator_Locomotion != undefined then
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
biped.deleteKeys $'Locator_Locomotion'.controller #allKeys
|
|
|
biped.addNewKey $'Locator_Locomotion'.controller animationRange.start
|
|
|
|
|
|
propKey = biped.getKey $'Locator_Locomotion'.controller 1
|
|
|
|
|
|
propKey.posSpace = 0
|
|
|
propKey.rotSpace = 0
|
|
|
|
|
|
sliderTime = animationRange.start
|
|
|
|
|
|
bipRot = $Bip01.transform.rotation as eulerangles
|
|
|
|
|
|
biped.setTransform $'Locator_Locomotion' #pos (in coordsys world [0,0,0]) true
|
|
|
|
|
|
if forceDir == undefined then
|
|
|
(
|
|
|
if bipRot.z > 0 and bipRot.z < 180 then
|
|
|
(
|
|
|
--// new, proper character rotation
|
|
|
biped.setTransform $'Locator_Locomotion' #rotation (quat 0 0 0 1) true
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
--// used for Crysis but old character rotation
|
|
|
biped.setTransform $'Locator_Locomotion' #rotation (quat 0 0 -1 0) true
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
biped.setTransform $'Locator_Locomotion' #rotation (quat 0 0 -1 0) true
|
|
|
|
|
|
local tempItem = getCurrentSelection()
|
|
|
if findItem tempItem $Locator_Locomotion == 0 then
|
|
|
select $'Locator_Locomotion'
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch( return false)
|
|
|
)
|
|
|
else
|
|
|
print "No Locator in Scene"
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.resetLocator" )
|
|
|
)
|
|
|
resetLocator = undefined
|
|
|
logOutput "> Created cryAnim._f.resetLocator function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.moveToBodyMass
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- moves the locator to the body mass
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.moveToBodyMass = function moveToBodyMass =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
function getMaxValue root index =
|
|
|
(
|
|
|
if root != undefined then
|
|
|
(
|
|
|
maxValue = #(index, root.transform.pos[index], root.transform.pos[index])
|
|
|
|
|
|
for obj in root.children do
|
|
|
if obj.isHidden == false and obj.isFrozen == false then
|
|
|
maxValue = cryTools.cryAnim._f.getChildExtent obj maxValue
|
|
|
|
|
|
return maxValue
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
partPos = [0,0,0]
|
|
|
|
|
|
for i = 1 to 3 do
|
|
|
(
|
|
|
local newPos = getMaxValue $'Bip01 Spine' i
|
|
|
newPos = (newPos[2] + newPos[3]) / 2
|
|
|
partPos[i] = newPos
|
|
|
)
|
|
|
|
|
|
|
|
|
diffPos = ($'Bip01 Pelvis'.transform.pos - $'Bip01 Spine3'.transform.pos) / 2
|
|
|
bodyPos = $'Bip01 Pelvis'.transform.pos - diffPos
|
|
|
|
|
|
|
|
|
partPos = partPos * 1/3
|
|
|
bodyPos = bodyPos * 2/3
|
|
|
|
|
|
finalPos = partPos + bodyPos
|
|
|
finalPos[3] = 0
|
|
|
|
|
|
biped.setTransform $Locator_Locomotion #pos finalPos true
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.moveToBodyMass" )
|
|
|
)
|
|
|
moveToBodyMass = undefined
|
|
|
logOutput "> Created cryAnim._f.moveToBodyMass function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getChildren
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- gets all children of a node
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getChildren = function getChildren baseObject =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
function childToArray childArray =
|
|
|
(
|
|
|
local tempArray = #()
|
|
|
for i = 1 to childArray.count do
|
|
|
(
|
|
|
if childArray[i].classID[1] == 37157 then
|
|
|
if childArray[i].isHidden == false and childArray[i].isFrozen == false then
|
|
|
append tempArray childArray[i]
|
|
|
)
|
|
|
|
|
|
return tempArray
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
local baseArray = childToArray baseObject.children
|
|
|
|
|
|
for obj in baseArray do
|
|
|
(
|
|
|
if obj.children.count != 0 then
|
|
|
(
|
|
|
local tempArray = childToArray obj.children
|
|
|
join baseArray tempArray
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return baseArray
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getChildren" )
|
|
|
)
|
|
|
getChildren = undefined
|
|
|
logOutput "> Created cryAnim._f.getChildren function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.getChildExtent
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the extremes of the children positions
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.getChildExtent = function getChildExtent root maxValue =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if root.transform.pos[maxValue[1]] > maxValue[2] then
|
|
|
maxValue[2] = root.transform.pos[maxValue[1]]
|
|
|
|
|
|
if root.transform.pos[maxValue[1]] < maxValue[3] then
|
|
|
maxValue[3] = root.transform.pos[maxValue[1]]
|
|
|
|
|
|
if root.children != undefined then
|
|
|
(
|
|
|
for obj in root.children do
|
|
|
if obj.isHidden == false and obj.isFrozen == false then
|
|
|
cryTools.cryAnim._f.getChildExtent obj maxValue
|
|
|
)
|
|
|
return maxValue
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.getChildExtent" )
|
|
|
)
|
|
|
getChildExtent = undefined
|
|
|
logOutput "> Created cryAnim._f.getChildExtent function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.createSnapshot
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates snapshots of the selected node or with "object" specified node
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.createSnapshot = function createSnapshot children:unsupplied object:unsupplied =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
baseArray = #()
|
|
|
snapArray = #()
|
|
|
|
|
|
function copyMesh baseObject =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempSnap = snapshot baseObject
|
|
|
tempSnap.parent = undefined
|
|
|
tempSnap.transform = baseObject.transform
|
|
|
tempSnap.wirecolor = baseObject.wirecolor
|
|
|
return tempSnap
|
|
|
)
|
|
|
catch
|
|
|
return undefined
|
|
|
)
|
|
|
|
|
|
|
|
|
if object == unsupplied then
|
|
|
(
|
|
|
for obj in $selection do
|
|
|
(
|
|
|
local newArray = #( obj )
|
|
|
if children == true then
|
|
|
join newArray (cryTools.cryAnim._f.getChildren obj)
|
|
|
|
|
|
for obj in newArray do
|
|
|
(
|
|
|
append snapArray (copyMesh obj)
|
|
|
)
|
|
|
|
|
|
append baseArray newArray
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
append snapArray (copyMesh object)
|
|
|
)
|
|
|
|
|
|
if snapArray.count > 0 then
|
|
|
return snapArray
|
|
|
else
|
|
|
return undefined
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.createSnapshot" )
|
|
|
)
|
|
|
createSnapshot = undefined
|
|
|
logOutput "> Created cryAnim._f.createSnapshot function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.lockRotation
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- locks rotation of the selected node
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.lockRotation = function lockRotation =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if selection.count > 0 then
|
|
|
(
|
|
|
if cryTools.cryAnim._v.lockRotation == undefined then
|
|
|
(
|
|
|
cryTools.cryAnim._v.lockRotation = $.transform.rotation
|
|
|
return true
|
|
|
)
|
|
|
else
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.lockRotation" )
|
|
|
)
|
|
|
lockRotation = undefined
|
|
|
logOutput "> Created cryAnim._f.lockRotation function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim._f.pasteTransform
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- pastes the transform (#transform, #pos, #rotation)
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim._f.pasteTransform = function pasteTransform obj value op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
case op of
|
|
|
(
|
|
|
#transform:
|
|
|
(
|
|
|
biped.setTransform obj #rotation value.rotation true
|
|
|
biped.setTransform obj #pos value.pos true
|
|
|
biped.setTransform obj #rotation value.rotation true
|
|
|
)
|
|
|
#pos:
|
|
|
(
|
|
|
biped.setTransform obj #pos value.pos true
|
|
|
)
|
|
|
#rotation:
|
|
|
(
|
|
|
biped.setTransform obj #rotation value.rotation true
|
|
|
biped.setTransform obj #rotation value.pos true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempTransform = obj.transform
|
|
|
|
|
|
case op of
|
|
|
(
|
|
|
#transform:
|
|
|
(
|
|
|
tempTransform = value
|
|
|
/*
|
|
|
obj.transform.rotation = value.rotation
|
|
|
obj.transform.pos = value.pos
|
|
|
obj.transform.rotation = value.rotation
|
|
|
*/
|
|
|
)
|
|
|
#pos:
|
|
|
(
|
|
|
tempTransform.pos = value.pos
|
|
|
tempTransform.rotation = obj.rotation
|
|
|
--obj.transform.pos = value.pos
|
|
|
)
|
|
|
#rotation:
|
|
|
(
|
|
|
tempTransform.rotation = value.rotation
|
|
|
tempTransform.pos = obj.pos
|
|
|
--obj.transform.rotation = value.rotation
|
|
|
)
|
|
|
)
|
|
|
obj.transform = tempTransform
|
|
|
)
|
|
|
catch()
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim._f.pasteTransform" )
|
|
|
)
|
|
|
pasteTransform = undefined
|
|
|
logOutput "> Created cryAnim._f.pasteTransform function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.createPivotEdge
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates the cylinders for visualizing selection and hovering of edges
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.createPivotEdge = function createPivotEdge index positionFrom positionTo =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (alignLayer = layerManager.newLayerFromName "alignTool") == undefined then
|
|
|
alignLayer = layerManager.getLayerFromName "alignTool"
|
|
|
|
|
|
alignLayer.current = true
|
|
|
|
|
|
--// gets selected biped object
|
|
|
selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
|
|
|
--// creates a cylinder and stores it in edgeList
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index] = cylinder()
|
|
|
--// creates and stores name, and other various values
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].name = ("e" + (index as String) + "_(" + selectedBipPart.name + ")")
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].radius = 0.1
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].sides = 5
|
|
|
--// sets position to the inital position
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].position = positionFrom
|
|
|
--// calculates distance between 2 pivot points and applies to the height
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].height = distance positionFrom positionTo
|
|
|
|
|
|
|
|
|
|
|
|
if selectedBipPart.pivotSel.index != undefined then
|
|
|
(
|
|
|
--// checks, if this pivotEdge was used before
|
|
|
--if cryTools.cryAnim.align._v.edgeList.pivot[index].index == selectedBipPart.pivotSel.index then
|
|
|
if index == selectedBipPart.pivotSel.index then
|
|
|
--// if used, set the color to red
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].wireColor = (color 255 0 0)
|
|
|
else
|
|
|
--// otherwise to "edgeBlue"
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].wireColor = (color 20 50 100)
|
|
|
)
|
|
|
else
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].wireColor = (color 20 50 100)
|
|
|
|
|
|
--// generates a tape with target for excact rotation of the cylinder
|
|
|
tempTape = tape pos:positionFrom target:(targetObject pos:positionTo)
|
|
|
--// applies transform from generated tape to the cylinder
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].transform = tempTape.transform
|
|
|
--// the cylinder is rotated 180<38>, so it will be rotated to the other side of the pivot
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[index].position = positionTo
|
|
|
|
|
|
--// temporary tape will be deleted
|
|
|
cryTools.cryAnim.align._v.edgeList.selection[index] = cylinder radius:0.5 sides:5 height:cryTools.cryAnim.align._v.edgeList.pivot[index].height
|
|
|
cryTools.cryAnim.align._v.edgeList.selection[index].name = ("sE" + (index as String) + "_(" + selectedBipPart.name + ")")
|
|
|
cryTools.cryAnim.align._v.edgeList.selection[index].transform = tempTape.transform
|
|
|
cryTools.cryAnim.align._v.edgeList.selection[index].position = positionTo
|
|
|
--// hides the node (intersectRay still finds the mesh intersection of hidden nodes)
|
|
|
cryTools.cryAnim.align._v.edgeList.selection[index].isHidden = true
|
|
|
|
|
|
delete tempTape
|
|
|
|
|
|
tempBaseLayer = layerManager.getLayer 0
|
|
|
tempBaseLayer.current = true
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.createPivotEdge" )
|
|
|
)
|
|
|
createPivotEdge = undefined
|
|
|
logOutput "> Created cryAnim.align._f.createPivotEdge function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.createPivotPoint
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates the spheres for visualizing selection and hovering of points
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.createPivotPoint = function createPivotPoint index position =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (alignLayer = layerManager.newLayerFromName "alignTool") == undefined then
|
|
|
alignLayer = layerManager.getLayerFromName "alignTool"
|
|
|
|
|
|
alignLayer.current = true
|
|
|
|
|
|
|
|
|
--// gets selected object
|
|
|
selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
--// generates sphere (point)
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index] = sphere()
|
|
|
--// sets name and other values
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].name = ("p" + (index as String) + "_(" + selectedBipPart.name + ")")
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].radius = 0.5
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].segs = 10
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].position = position
|
|
|
|
|
|
|
|
|
if selectedBipPart.pivotSel.index != undefined then
|
|
|
(
|
|
|
--// checks, if the pivot was used before
|
|
|
--if cryTools.cryAnim.align._v.pointList.pivot[index]. == selectedBipPart.pivotSel.index then
|
|
|
if index == selectedBipPart.pivotSel.index then
|
|
|
--// if used, the color will be set to red
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].wireColor = (color 255 0 0)
|
|
|
else
|
|
|
--// otherwise to blue
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].wireColor = (color 0 0 255)
|
|
|
)
|
|
|
else
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[index].wireColor = (color 0 0 255)
|
|
|
|
|
|
--// generates the selection area for pivot points
|
|
|
cryTools.cryAnim.align._v.pointList.selection[index] = sphere pos:cryTools.cryAnim.align._v.pointList.pivot[index].pos radius:1
|
|
|
cryTools.cryAnim.align._v.pointList.selection[index].name = ("sP" + (index as String) + "_(" + selectedBipPart.name + ")")
|
|
|
|
|
|
--// hides the node (intersectRay still finds the mesh intersection of hidden nodes)
|
|
|
cryTools.cryAnim.align._v.pointList.selection[index].isHidden = true
|
|
|
|
|
|
tempBaseLayer = layerManager.getLayer 0
|
|
|
tempBaseLayer.current = true
|
|
|
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.createPivotPoint" )
|
|
|
)
|
|
|
createPivotPoint = undefined
|
|
|
logOutput "> Created cryAnim.align._f.createPivotPoint function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align.createPointEdge
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates the points and edges for the selection
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.createPointEdge = function createPointEdge =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// gets selected object
|
|
|
local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
local editMeshAdded = #()
|
|
|
|
|
|
if selectedBipPart != undefined then
|
|
|
(
|
|
|
with redraw off
|
|
|
(
|
|
|
local baseMeshNotFound = undefined
|
|
|
|
|
|
try ( getVert selectedBipPart.object.selected 1 ) catch ( baseMeshNotFound = true)
|
|
|
|
|
|
if baseMeshNotFound == true then
|
|
|
(
|
|
|
addModifier selectedBipPart.object.selected (edit_mesh())
|
|
|
append editMeshAdded selectedBipPart.object.selected
|
|
|
)
|
|
|
--// checks, what body part is selected
|
|
|
case (selectedBipPart.part.bodyPart) of
|
|
|
(
|
|
|
/*Foot*/(cryTools.cryAnim._f.getBipNames 2):
|
|
|
(
|
|
|
local child = undefined
|
|
|
local meshNotFound = undefined
|
|
|
|
|
|
try ( child = selectedBipPart.object.selected.children[1] ) catch()
|
|
|
if child != undefined then
|
|
|
(
|
|
|
try ( getVert child 1 ) catch ( meshNotFound = true )
|
|
|
|
|
|
if meshNotFound == true then
|
|
|
(
|
|
|
addModifier child (edit_mesh())
|
|
|
append editMeshAdded child
|
|
|
)
|
|
|
)
|
|
|
|
|
|
for i = 1 to 10 do
|
|
|
(
|
|
|
--// generates pivot points
|
|
|
cryTools.cryAnim.align._f.createPivotPoint i (cryTools.cryAnim._f.getPivotPointPos i selectedBipPart.object.selected)
|
|
|
--// generates pivot edges
|
|
|
case i of
|
|
|
(
|
|
|
2:( cryTools.cryAnim.align._f.createPivotEdge 1 ( cryTools.cryAnim._f.getPivotPointPos 2 selectedBipPart.object.selected ) ( cryTools.cryAnim._f.getPivotPointPos 5 selectedBipPart.object.selected ) )
|
|
|
5:( cryTools.cryAnim.align._f.createPivotEdge 2 ( cryTools.cryAnim._f.getPivotPointPos 5 selectedBipPart.object.selected ) ( cryTools.cryAnim._f.getPivotPointPos 7 selectedBipPart.object.selected ) )
|
|
|
7:( cryTools.cryAnim.align._f.createPivotEdge 3 ( cryTools.cryAnim._f.getPivotPointPos 7 selectedBipPart.object.selected ) ( cryTools.cryAnim._f.getPivotPointPos 4 selectedBipPart.object.selected ) )
|
|
|
4:( cryTools.cryAnim.align._f.createPivotEdge 4 ( cryTools.cryAnim._f.getPivotPointPos 4 selectedBipPart.object.selected ) ( cryTools.cryAnim._f.getPivotPointPos 2 selectedBipPart.object.selected ) )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
/*Hand*/(cryTools.cryAnim._f.getBipNames 1):
|
|
|
(
|
|
|
--// gets children of the selected object (fingers)
|
|
|
local childArray = cryTools.cryAnim._f.getChildren selectedBipPart.object.selected
|
|
|
|
|
|
for i = 1 to 7 do
|
|
|
(
|
|
|
--// creates pivot points for the hand
|
|
|
cryTools.cryAnim.align._f.createPivotPoint i (cryTools.cryAnim._f.getPivotPointPos i selectedBipPart.object.selected )
|
|
|
)
|
|
|
for i = 8 to (childArray.count + 7) do
|
|
|
(
|
|
|
try (getVert childArray[i - 7] 1)
|
|
|
catch
|
|
|
(
|
|
|
addModifier childArray[i - 7] (edit_mesh())
|
|
|
append editMeshAdded childArray[i - 7]
|
|
|
)
|
|
|
--// creates pivot points for the fingers
|
|
|
cryTools.cryAnim.align._f.createPivotPoint i (cryTools.cryAnim._f.getPivotPointPos i selectedBipPart.object.selected )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
for i = 1 to editMeshAdded.count do
|
|
|
deleteModifier editMeshAdded[i] 1
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
#stop
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.createPointEdge" )
|
|
|
)
|
|
|
createPointEdge = undefined
|
|
|
logOutput "> Created cryAnim.align._f.createPointEdge function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.initVars
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- deletes pivot points and initializes default pivot selection
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.initVars = function initVars =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// if there are still pivots in the scene, delete old pivots by deletePivotPoints() function
|
|
|
try
|
|
|
(
|
|
|
if cryTools.cryAnim.align._v.pointList.pivot.count > 0 then
|
|
|
cryTools.cryAnim.align._f.deletePivotPoints()
|
|
|
) catch()
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.initVars" )
|
|
|
)
|
|
|
initVars = undefined
|
|
|
logOutput "> Created cryAnim.align._f.initVars function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.interactPivotPoints
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- user interaction with pivot points and edges
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.interactPivotPoint = function interactPivotPoint =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// gets selected bip object
|
|
|
local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
|
|
|
--// var initialisation part
|
|
|
local worldRay = undefined
|
|
|
local tempDistance = #()
|
|
|
|
|
|
local activePivot = #()
|
|
|
local nearestPivot = undefined
|
|
|
|
|
|
--// stores all points and edges in pointEdgeSt structure via array
|
|
|
local pointEdgeList = pointEdgeSt pivot:(cryTools.cryAnim.align._v.pointList.pivot + cryTools.cryAnim.align._v.edgeList.pivot) selection:(cryTools.cryAnim.align._v.pointList.selection + cryTools.cryAnim.align._v.edgeList.selection)
|
|
|
|
|
|
for i = 1 to pointEdgeList.selection.count do
|
|
|
(
|
|
|
--// generates a ray from the mousecursor position into the viewport
|
|
|
worldRay = mapScreenToWorldRay (in coordsys screen mouse.pos)
|
|
|
--// checks, if the mouse cursor is over a pivot point or edge (worldRay intersects with geometry)
|
|
|
tempPivotRay = intersectRay pointEdgeList.selection[i] worldRay
|
|
|
|
|
|
--// if the ray intersects with the pivot selection
|
|
|
if tempPivotRay != undefined then
|
|
|
(
|
|
|
--// if the pivot selection is not the pivot selected already
|
|
|
if pointEdgeList.pivot[i].name != selectedBipPart.pivotSel.pivotName then
|
|
|
--// adds the hovered pivot point or edge to the activePivot list struct
|
|
|
append activePivot (activePivotSt interPivot:pointEdgeList.pivot[i] interPos:tempPivotRay.pos)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
--// if a pivot is hovered
|
|
|
if activePivot.count > 0 then
|
|
|
(
|
|
|
--// if more than 1 pivot is hovered (happens when in left or front view for example
|
|
|
if activePivot.count > 1 then
|
|
|
(
|
|
|
for i = 1 to activePivot.count do
|
|
|
--// stores all distances between the cursor pos (screen) and intersection position of the pivot point or edge
|
|
|
tempDistance[i] = (distance worldRay.pos activePivot[i].interPos)
|
|
|
|
|
|
for i = 1 to activePivot.count do
|
|
|
(
|
|
|
if nearestPivot == undefined then
|
|
|
-- if there is no nearestPivot before, make one
|
|
|
nearestPivot = activePivot[i]
|
|
|
else
|
|
|
--// checks, if the distance of the activePivot before, has a bigger distance then the current one
|
|
|
if (tempDistance[i]) < ( distance worldRay.pos nearestPivot.interPos ) then
|
|
|
--// if so, the current activePivot is the new one
|
|
|
nearestPivot = activePivot[i]
|
|
|
)
|
|
|
--// interPivot (the pivot point or edge) is the new nearestPivot
|
|
|
nearestPivot = nearestPivot.interPivot
|
|
|
)
|
|
|
else
|
|
|
--// if there is no further pivot point or edge in line, take the first one in list
|
|
|
nearestPivot = activePivot[1].interPivot
|
|
|
)
|
|
|
else
|
|
|
--// if no pivot point or edge is hovered, set nearestPivot to undefined
|
|
|
nearestPivot = undefined
|
|
|
|
|
|
if nearestPivot != undefined then
|
|
|
(
|
|
|
--// if the hovered nearest pivot is not an already selected one
|
|
|
if nearestPivot.name != selectedBipPart.pivotSel.pivotName then
|
|
|
(
|
|
|
--// set the wireColor to the hovered color
|
|
|
nearestPivot.wireColor = (color 250 190 30)
|
|
|
--// and set to tempSelection - used for clickAction
|
|
|
cryTools.cryAnim.align._v.pivotLast.tempSelection = nearestPivot
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
--// if there is no pivot selected, set tempSelection - used for clickAction - to undefined
|
|
|
cryTools.cryAnim.align._v.pivotLast.tempSelection = undefined
|
|
|
|
|
|
for i = 1 to pointEdgeList.pivot.count do
|
|
|
(
|
|
|
if pointEdgeList.pivot[i].name != selectedBipPart.pivotSel.pivotName then
|
|
|
(
|
|
|
if pointEdgeList.pivot[i] != nearestPivot then
|
|
|
(
|
|
|
--// if no pivot point or edge is already selected or hovered, then apply wireColor
|
|
|
if (substring pointEdgeList.pivot[i].name 1 1) == "p" then
|
|
|
--// for points
|
|
|
pointEdgeList.pivot[i].wireColor = (color 0 0 255)
|
|
|
else
|
|
|
--// for edges
|
|
|
pointEdgeList.pivot[i].wireColor = (color 20 50 100)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.interactPivotPoint" )
|
|
|
)
|
|
|
interactPivotPoint = undefined
|
|
|
logOutput "> Created cryAnim.align._f.interactPivotPoint function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.setPivotPoint
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- sets the selected pivot point to the structure
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.setPivotPoint = function setPivotPoint tempPivot =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
|
|
|
--// filters the name to have only the number of the pivot
|
|
|
local tempFilterString = filterString tempPivot.name "_"
|
|
|
tempFilterString = substring tempFilterString[1] 2 tempFilterString[1].count
|
|
|
|
|
|
--// sets the pivotList.pivotLast part to the selected pivot
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".index = " + tempFilterString )
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivotName = \"" + tempPivot.name + "\"")
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".position = " + (tempPivot.pos as String))
|
|
|
local childArray = cryTools.cryAnim._f.getChildren selectedBipPart.object.selected
|
|
|
local tempPivotIndex = tempFilterString as Integer
|
|
|
|
|
|
|
|
|
if tempPivotIndex <= 7 then
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivObject = \"" + selectedBipPart.object.selected.name + "\"" )
|
|
|
else
|
|
|
(
|
|
|
if selectedBipPart.part.bodyPart == "Hand" then
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivObject = \"" + childArray[tempPivotIndex - 7].name + "\"" )
|
|
|
else
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivObject = \"" + childArray[1].name + "\"" )
|
|
|
)
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.setPivotPoint" )
|
|
|
)
|
|
|
setSelectedBipPart = undefined
|
|
|
logOutput "> Created cryAnim.align._f.setPivotPoint function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.clickAction
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- user interaction for the pivot selection
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.clickAction = function clickAction =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
--// checks, if there was a pivot selected before
|
|
|
if selectedBipPart == undefined then return false
|
|
|
|
|
|
--// if no pivot is selected before
|
|
|
if selectedBipPart.pivotSel.index == undefined then
|
|
|
(
|
|
|
--// if there is a pivot currently hovered
|
|
|
if cryTools.cryAnim.align._v.pivotLast.tempSelection != undefined then
|
|
|
(
|
|
|
--// on mouse click, set color of the current pivot to red
|
|
|
cryTools.cryAnim.align._v.pivotLast.tempSelection.wireColor = (color 255 0 0)
|
|
|
|
|
|
--// stores all the infos in the state variable for use of other _f
|
|
|
cryTools.cryAnim.align._f.setPivotPoint cryTools.cryAnim.align._v.pivotLast.tempSelection
|
|
|
)
|
|
|
)
|
|
|
--// if a pivot were selected before
|
|
|
else
|
|
|
(
|
|
|
--// if a pivot is currently hovered
|
|
|
if cryTools.cryAnim.align._v.pivotLast.tempSelection != undefined then
|
|
|
(
|
|
|
--// on mouseclick sets color to red
|
|
|
cryTools.cryAnim.align._v.pivotLast.tempSelection.wireColor = (color 255 0 0)
|
|
|
--// stores the values in the variable for the use of other _f
|
|
|
cryTools.cryAnim.align._f.setPivotPoint cryTools.cryAnim.align._v.pivotLast.tempSelection
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.align._v.pointList.pivot.count do
|
|
|
(
|
|
|
--// checks, if the pivot in list is not the current pivot
|
|
|
if cryTools.cryAnim.align._v.pointList.pivot[i] != cryTools.cryAnim.align._v.pivotLast.tempSelection then
|
|
|
--// and sets the color to blue (because of not selected)
|
|
|
cryTools.cryAnim.align._v.pointList.pivot[i].wireColor = (color 0 0 255)
|
|
|
)
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.align._v.edgeList.pivot.count do
|
|
|
(
|
|
|
--// checks, if the current pivot is not the current edge
|
|
|
if cryTools.cryAnim.align._v.edgeList.pivot[i] != cryTools.cryAnim.align._v.pivotLast.tempSelection then
|
|
|
--// and sets the color to "edgeBlue"
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot[i].wireColor = (color 20 50 100)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.clickAction" )
|
|
|
)
|
|
|
clickAction = undefined
|
|
|
logOutput "> Created cryAnim.align._f.clickAction function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.deletePivotPoints
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- deletes pivot points (spheres and edges)
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.deletePivotPoints = function deletePivotPoints =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.align._v.pointList.pivot.count do
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// tries to delete the pivot points
|
|
|
delete cryTools.cryAnim.align._v.pointList.pivot[i]
|
|
|
delete cryTools.cryAnim.align._v.pointList.selection[i]
|
|
|
)catch()
|
|
|
)
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.align._v.edgeList.pivot.count do
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// tries to delete the pivot edges
|
|
|
delete cryTools.cryAnim.align._v.edgeList.pivot[i]
|
|
|
delete cryTools.cryAnim.align._v.edgeList.selection[i]
|
|
|
)catch()
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.align._v.pointList.pivot = #()
|
|
|
cryTools.cryAnim.align._v.pointList.selection = #()
|
|
|
|
|
|
cryTools.cryAnim.align._v.edgeList.pivot = #()
|
|
|
cryTools.cryAnim.align._v.edgeList.selection = #()
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.deletePivotPoints" )
|
|
|
)
|
|
|
deletePivotPoints = undefined
|
|
|
logOutput "> Created cryAnim.align._f.deletePivotPoints function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.switchViewPort
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- switches between viewports, if there are more than 1 viewport
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.switchViewPort = function switchViewPort =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local numViews = viewport.numViews
|
|
|
local viewSize = getViewSize()
|
|
|
|
|
|
|
|
|
case numViews of
|
|
|
(
|
|
|
4:
|
|
|
(
|
|
|
if mouse.screenpos[1] < viewSize[1] then
|
|
|
(
|
|
|
if mouse.screenpos[2] < (viewSize[2]+74) then
|
|
|
if viewport.activeViewport != 1 then viewport.activeViewport = 1
|
|
|
if mouse.screenpos[2] > (viewSize[2]+74) then
|
|
|
if viewport.activeViewport != 3 then viewport.activeViewport = 3
|
|
|
)
|
|
|
|
|
|
if mouse.screenpos[1] > viewSize[1] then
|
|
|
(
|
|
|
if mouse.screenpos[2] < (viewSize[2]+74) then
|
|
|
if viewport.activeViewport != 2 then viewport.activeViewport = 2
|
|
|
if mouse.screenpos[2] > (viewSize[2]+74) then
|
|
|
if viewport.activeViewport != 4 then viewport.activeViewport = 4
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.switchViewPort" )
|
|
|
)
|
|
|
switchViewPort = undefined
|
|
|
logOutput "> Created cryAnim.align._f.switchViewPort function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.align._f.callPivotSelect
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates the tool
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.align._f.callPivotSelect = function callPivotSelect =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart()
|
|
|
if selectedBipPart == undefined then return undefined
|
|
|
if selectedBipPart.object.isPivot == false then return false
|
|
|
|
|
|
|
|
|
tool pivotSelect
|
|
|
(
|
|
|
on start do
|
|
|
(
|
|
|
--// initialise variables for global use
|
|
|
cryTools.cryAnim.align._f.initVars()
|
|
|
cryTools.cryAnim.align._f.createPointEdge()
|
|
|
)
|
|
|
|
|
|
on freeMove do
|
|
|
(
|
|
|
--// makes the recognition of mouse interaction
|
|
|
cryTools.cryAnim.align._f.switchViewPort()
|
|
|
cryTools.cryAnim.align._f.interactPivotPoint()
|
|
|
)
|
|
|
|
|
|
on mousePoint click do
|
|
|
(
|
|
|
--// switches trough pivots and highlights them, as well sets global variables for other _f
|
|
|
cryTools.cryAnim.align._f.switchViewPort()
|
|
|
cryTools.cryAnim.align._f.clickAction()
|
|
|
)
|
|
|
|
|
|
on mouseMove click do
|
|
|
(
|
|
|
--// after the first click is finished, it waits for the mouse click to start the function
|
|
|
if click == 1 then
|
|
|
--// switches trough pivots and highlights them, as well sets global variables for other _f
|
|
|
cryTools.cryAnim.align._f.clickAction()
|
|
|
|
|
|
--// makes the recognition of mouse interaction
|
|
|
cryTools.cryAnim.align._f.switchViewPort()
|
|
|
cryTools.cryAnim.align._f.interactPivotPoint()
|
|
|
)
|
|
|
|
|
|
on stop do
|
|
|
(
|
|
|
--// deletes the used nodes
|
|
|
cryTools.cryAnim.align._f.deletePivotPoints()
|
|
|
)
|
|
|
)
|
|
|
cryTools.cryAnim.align.pivotSelect = pivotSelect
|
|
|
pivotSelect = undefined
|
|
|
|
|
|
startTool cryTools.cryAnim.align.pivotSelect
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.align._f.callPivotSelect" )
|
|
|
)
|
|
|
callPivotSelect = undefined
|
|
|
logOutput "> Created cryAnim.align._f.callPivotSelect function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main._f.getUI
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the UI element (rollout, rollout controls/control)
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main._f.getUI = function getUI rolloutTitle element =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
tempInt = undefined
|
|
|
tempCon = undefined
|
|
|
tempElement = undefined
|
|
|
local tempArray = #()
|
|
|
|
|
|
|
|
|
try
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.dialog.controls.count do
|
|
|
(
|
|
|
for f = 1 to cryTools.cryAnim.UI.main.dialog.controls[i].rollouts.count do
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.dialog.controls[i].rollouts[f].title == rolloutTitle then
|
|
|
(
|
|
|
tempInt = f
|
|
|
tempCon = i
|
|
|
)
|
|
|
if cryTools.cryAnim.UI.main.dialog.controls[i].rollouts[f].name == rolloutTitle then
|
|
|
(
|
|
|
tempInt = f
|
|
|
tempCon = i
|
|
|
)
|
|
|
|
|
|
append tempArray cryTools.cryAnim.UI.main.dialog.controls[i].rollouts[f]
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch(return undefined)
|
|
|
|
|
|
try
|
|
|
(
|
|
|
if element == "" then
|
|
|
(
|
|
|
if rolloutTitle == "" then
|
|
|
return tempArray
|
|
|
else
|
|
|
return cryTools.cryAnim.UI.main.dialog.controls[tempCon].rollouts[tempInt]
|
|
|
)
|
|
|
)catch()
|
|
|
|
|
|
|
|
|
try
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.dialog.controls[tempCon].rollouts[tempInt].controls.count do
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.dialog.controls[tempCon].rollouts[tempInt].controls[i].name == element then tempElement = i
|
|
|
if cryTools.cryAnim.UI.main.dialog.controls[tempCon].rollouts[tempInt].controls[i].text == element then tempElement = i
|
|
|
)
|
|
|
)
|
|
|
catch(return undefined)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if tempCon != undefined and tempInt != undefined and tempElement != undefined then
|
|
|
try ( execute ("return cryTools.cryAnim.UI.main.dialog.controls[" + tempCon as String + "].rollouts[" + tempInt as String + "].controls[" + tempElement as String + "]") ) catch()
|
|
|
|
|
|
if tempInt != 0 then
|
|
|
try ( execute ("return cryTools.cryAnim.UI.main.dialog.controls[" + tempCon as String + "].rollouts[" + tempInt as String + "].controls") ) catch()
|
|
|
else
|
|
|
return undefined
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.main._f." )
|
|
|
)
|
|
|
getUI = undefined
|
|
|
logOutput "> Created cryAnim.UI.main._f.getUI function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main._f.checkExport
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- checks the file path before saving or exporting, converts file path to .caf or to the project path, creates a folder
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main._f.checkExport = function checkExport op filepath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
abortBool = false
|
|
|
|
|
|
tempArray = filterString (cryTools.cryAnim.base.lowercase filepath) "\\"
|
|
|
tempBUIldPath = (filterString (cryTools.cryAnim.base.lowercase crytools.BUIldPathFull) "\\")
|
|
|
|
|
|
case op of
|
|
|
(
|
|
|
#save:
|
|
|
(
|
|
|
if (biped.getCurrentLayer $'Bip01'.controller) > 0 then
|
|
|
(
|
|
|
messageBox "Collapse Layers or choose Base Layer to Save" title:"Save Biped"
|
|
|
return false
|
|
|
)
|
|
|
|
|
|
/*
|
|
|
if tempArray[1] != tempBUIldPath[1] then abortBool = true
|
|
|
|
|
|
if abortBool == true then
|
|
|
return false
|
|
|
else
|
|
|
return true
|
|
|
*/
|
|
|
return true
|
|
|
)
|
|
|
|
|
|
#saveExport:
|
|
|
(
|
|
|
if (biped.getCurrentLayer $'Bip01'.controller) > 0 then
|
|
|
(
|
|
|
messageBox "Collapse Layers or choose Base Layer to Save" title:"Save Biped"
|
|
|
return false
|
|
|
)
|
|
|
|
|
|
/*
|
|
|
if tempArray[1] != tempBUIldPath[1] then abortBool = true
|
|
|
if tempArray[2] != tempBUIldPath[2] + "_production" then abortBool = true
|
|
|
if tempArray[3] != "art" then abortBool = true
|
|
|
if tempArray[4] != "animation" then abortBool = true
|
|
|
if tempArray[5] != "human" then abortBool = true
|
|
|
|
|
|
|
|
|
if abortBool == true then
|
|
|
(
|
|
|
messageBox ("\nSave to " + (substring crytools.BUIldPathFull 1 (crytools.BUIldPathFull.count - 1)) + "_Production\\Art\\Animation\\Human\\Male\\ \n\n or use the \"Save\" button\n\n(Resource Compiler)") title:"Export Animation"
|
|
|
return false
|
|
|
)
|
|
|
*/
|
|
|
cryTools.cryAnim.UI.main._f.checkExport #createFolder filepath
|
|
|
return true
|
|
|
)
|
|
|
#export:
|
|
|
(
|
|
|
/*
|
|
|
if tempArray[1] != tempBUIldPath[1] then (abortBool = true; print "erste zeile")
|
|
|
if tempArray[2] != tempBUIldPath[2] then (abortBool = true; print "zweite zeile")
|
|
|
if tempArray[3] != "game" then (abortBool = true; print "dritte zeile")
|
|
|
if tempArray[4] != "animations" then (abortBool = true; print "f<>nfte zeile")
|
|
|
|
|
|
if abortBool == true then
|
|
|
(
|
|
|
messageBox ("\nSave to " + crytools.BUIldPathFull + "Game\\Animations\\ \n\n(Resource Compiler)") title:"Export Animation"
|
|
|
return false
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.UI.dialog._f.checkExport #createFolder filepath
|
|
|
*/
|
|
|
return true
|
|
|
)
|
|
|
|
|
|
#ProductionToGame:
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
filepathFilter = filterString filepath "\\"
|
|
|
workingDirFilter = filterString cryTools.cryAnim.UI.main._v.bipWorkingDir "\\"
|
|
|
cafSavePath = cryTools.cryAnim.UI.main._v.cafWorkingDir
|
|
|
|
|
|
if filepathFilter.count != workingDirFilter.count then
|
|
|
(
|
|
|
for i = (workingDirFilter.count + 1) to filepathFilter.count do
|
|
|
cafSavePath += filepathFilter[i] + (if i != filepathFilter.count then "\\" else "")
|
|
|
|
|
|
)
|
|
|
|
|
|
return (cryTools.cryAnim.UI.main._f.checkExport #getCaf cafSavePath)
|
|
|
)
|
|
|
catch ( return cryTools.cryAnim.UI.main._v.cafSavePath )
|
|
|
|
|
|
)
|
|
|
|
|
|
#getCaf:
|
|
|
(
|
|
|
local tempArray = filterString filepath "."
|
|
|
return (tempArray[1] + ".caf")
|
|
|
)
|
|
|
|
|
|
|
|
|
#createFolder:
|
|
|
(
|
|
|
if filePath != undefined then
|
|
|
(
|
|
|
tempPath = filterString filepath "\\"
|
|
|
maxItems = tempPath.count
|
|
|
for i = 1 to tempPath.count do
|
|
|
(
|
|
|
if findString tempPath[i] "." != undefined then
|
|
|
(
|
|
|
maxItems = i - 1
|
|
|
exit
|
|
|
)
|
|
|
)
|
|
|
tempString = ""
|
|
|
for i = 1 to maxItems do
|
|
|
(
|
|
|
if i == 1 then
|
|
|
tempString = tempPath[i]
|
|
|
else
|
|
|
tempString += "\\" + tempPath[i]
|
|
|
|
|
|
makeDir tempString
|
|
|
)
|
|
|
return tempString
|
|
|
)
|
|
|
else return false
|
|
|
)
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.main._f.checkExport" )
|
|
|
)
|
|
|
checkExport = undefined
|
|
|
logOutput "> Created cryAnim.UI.main._f.checkExport function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main._f.updateDialog
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the main dialog, sets new size
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main._f.updateDialog = function updateDialog =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local maxRowHeight = 0
|
|
|
|
|
|
if cryTools.cryAnim.base.iniFile #get #multiRow == true then
|
|
|
(
|
|
|
local rowCount = 0
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.dialog.controls.count do
|
|
|
(
|
|
|
rowHeight = 0
|
|
|
|
|
|
if cryTools.cryAnim.UI.main.dialog.controls[i].rollouts.count > 0 then
|
|
|
rowCount = i
|
|
|
|
|
|
for f = 1 to cryTools.cryAnim.UI.main.dialog.controls[i].rollouts.count do
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.dialog.controls[i].rollouts[f].open == true then
|
|
|
rowHeight += cryTools.cryAnim.UI.main.dialog.controls[i].rollouts[f].height + 4
|
|
|
|
|
|
rowHeight += 21.5
|
|
|
)
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.main.dialog.controls[i].height = rowHeight
|
|
|
|
|
|
if rowHeight > maxRowHeight then
|
|
|
maxRowHeight = rowHeight + 4
|
|
|
)
|
|
|
|
|
|
if maxRowHeight > cryTools.cryAnim.UI.main._v.dialogMaxHeight then
|
|
|
maxRowHeight = cryTools.cryAnim.UI.main._v.dialogMaxHeight
|
|
|
|
|
|
if maxRowHeight > 637 then
|
|
|
maxRowHeight = 637
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.dialog.controls.count do
|
|
|
cryTools.cryAnim.UI.main.dialog.controls[i].height = maxRowHeight + 4
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.main.dialog.height = maxRowHeight + 8
|
|
|
cryTools.cryAnim.UI.main.dialog.width = rowCount * 173
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.dialog.row1.rollouts.count do
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.dialog.row1.rollouts[i].open == true then
|
|
|
maxRowHeight += cryTools.cryAnim.UI.main.dialog.row1.rollouts[i].height + 4
|
|
|
|
|
|
maxRowHeight += 21.5
|
|
|
)
|
|
|
|
|
|
if maxRowHeight > cryTools.cryAnim.UI.main._v.dialogMaxHeight then
|
|
|
maxRowHeight = cryTools.cryAnim.UI.main._v.dialogMaxHeight
|
|
|
|
|
|
cryTools.cryAnim.UI.main.dialog.height = maxRowHeight
|
|
|
cryTools.cryAnim.UI.main.dialog.row1.height = maxRowHeight - 4
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.main._f.updateDialog" )
|
|
|
)
|
|
|
updateDialog = undefined
|
|
|
logOutput "> Created cryAnim.UI.main._f.updateDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main._f.callDialog
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates the main dialog with all the rollouts and elements
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main._f.callDialog = function callDialog =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if cryTools.showSplash == true then
|
|
|
(
|
|
|
if crySplash.open == false then
|
|
|
(
|
|
|
bm = (openBitmap (crytools.BuildPathFull + "Tools\\maxscript\\icons\\splash.png"))
|
|
|
createDialog crysplash style:#(#style_border) modal:false bitmap:bm width:bm.width height:bm.height fgcolor:white
|
|
|
)
|
|
|
try (crysplash.build.text = "LOADING DIALOG") catch()
|
|
|
)
|
|
|
)catch()
|
|
|
|
|
|
|
|
|
if cryTools.cryAnim.UI.main.dialog != undefined then
|
|
|
destroyDialog cryTools.cryAnim.UI.main.dialog
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
global initializeDialog = true
|
|
|
|
|
|
--// dialog template
|
|
|
rollout cryAnimDialog "CryAnim v3.2"
|
|
|
(
|
|
|
subrollout row1 pos:[2,2] width:170 height:(cryTools.cryAnim.UI.main.dialog.height-4)
|
|
|
subrollout row2 pos:[175,2] width:170 height:(cryTools.cryAnim.UI.main.dialog.height-4)
|
|
|
subrollout row3 pos:[348,2] width:170 height:(cryTools.cryAnim.UI.main.dialog.height-4)
|
|
|
subrollout row4 pos:[521,2] width:170 height:(cryTools.cryAnim.UI.main.dialog.height-4)
|
|
|
|
|
|
on cryAnimDialog moved value do
|
|
|
if initializeDialog == undefined then
|
|
|
cryTools.cryAnim.base.iniFile #set #dialogPos
|
|
|
)
|
|
|
cryTools.cryAnim.UI.main.dialog = cryAnimDialog
|
|
|
cryAnimDialog = undefined
|
|
|
|
|
|
createDialog cryTools.cryAnim.UI.main.dialog 173 579 style:#(#style_minimizebox,#style_titlebar,#style_border,#style_sysmenu) lockWidth:true lockHeight:false pos:[-1000,0]
|
|
|
|
|
|
initializeDialog = undefined
|
|
|
|
|
|
cryTools.cryAnim.base.iniFile #set #visible value:"1"
|
|
|
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\target.ms")
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\operation.ms")
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\pivot.ms")
|
|
|
|
|
|
if (maxVersion())[1] >= 9000 then
|
|
|
(
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\batch\\batch9.ms")
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\models\\models9.ms")
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\batch\\batch8.ms")
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\models\\models8.ms")
|
|
|
)
|
|
|
|
|
|
|
|
|
if cryTools.domain == "INTERN.CRYTEK.DE" then
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\muscle.ms")
|
|
|
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\locator.ms")
|
|
|
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\save.ms")
|
|
|
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\pose.ms")
|
|
|
|
|
|
if cryTools.cryAnim._v.perforceDir != undefined then
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\perforce.ms")
|
|
|
fileIn (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\main\\tools.ms")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (local dialogPos = cryTools.cryAnim.base.iniFile #get #dialogPos) != undefined then
|
|
|
try ( setDialogPos cryTools.cryAnim.UI.main.dialog dialogPos )catch()
|
|
|
else
|
|
|
try ( setDialogPos cryTools.cryAnim.UI.main.dialog ( (getMAXWindowSize() / 2) - ((getDialogSize cryTools.cryAnim.UI.main.dialog) / 2) ) )catch()
|
|
|
|
|
|
|
|
|
|
|
|
try destroyDialog crySplash catch()
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.main._f.callDialog" )
|
|
|
)
|
|
|
callDialog = undefined
|
|
|
logOutput "> Created cryAnim.UI.main._f.callDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList = function subRangeUpdateList = --// updateList
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempList = #()
|
|
|
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges
|
|
|
|
|
|
|
|
|
for i = 1 to listEntries.count do
|
|
|
(
|
|
|
local tempStart = listEntries[i].range.start.frame as Integer
|
|
|
local tempStop = listEntries[i].range.end.frame as Integer
|
|
|
local tempObjectsName = ""
|
|
|
|
|
|
for f = 1 to listEntries[i].objects.count do
|
|
|
tempObjectsName += listEntries[i].objects[f] + (if f < listEntries[i].objects.count then "; " else "")
|
|
|
|
|
|
local tempString = listEntries[i].export + " (" + tempObjectsName + ") <" + tempStart as String + "> <" + tempStop as String + ">"
|
|
|
|
|
|
append tempList tempString
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess.subRangeDialog.lbObjects.items = tempList
|
|
|
)
|
|
|
catch()
|
|
|
--catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeUpdateList" )
|
|
|
)
|
|
|
subRangeUpdateList = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeUpdateList function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeGetRange = function subRangeGetRange objectArray = --// getRange
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempStart = 0
|
|
|
local tempStop = 0
|
|
|
|
|
|
for obj in objectArray do
|
|
|
(
|
|
|
if obj != undefined then
|
|
|
(
|
|
|
for i = 1 to 2 do
|
|
|
(
|
|
|
if obj[3][i].keys.count > 0 then
|
|
|
(
|
|
|
if obj[3][i].keys[obj[3][i].keys.count].time.frame > tempStop then
|
|
|
tempStop = obj[3][i].keys[obj[3][i].keys.count].time.frame
|
|
|
|
|
|
if obj[3][i].keys.count > 1 then
|
|
|
if obj[3][i].keys[1].time.frame < tempStart then
|
|
|
tempStart = obj[3][i].keys[1].time.frame
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return (interval (tempStart as Integer) (tempStop as Integer) )
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeGetRange" )
|
|
|
)
|
|
|
subRangeGetRange = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeGetRange function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateRange = function subRangeUpdateRange index = --// updateRange
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.batchProcess.subRangeDialog.open == true then
|
|
|
(
|
|
|
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges
|
|
|
local newObjects = #()
|
|
|
|
|
|
for i = 1 to listEntries[index].objects.count do
|
|
|
newObjects[i] = getNodeByName listEntries[index].objects[i]
|
|
|
|
|
|
|
|
|
|
|
|
local tempRange = cryTools.cryAnim.UI.batchProcess._f.subRangeGetRange newObjects
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges[index].range = tempRange
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeUpdateRange" )
|
|
|
)
|
|
|
subRangeUpdateRange = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeUpdateRange function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues = function subRangeUpdateValues = --// updateValues
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.batchProcess.subRangeDialog.open == true then
|
|
|
(
|
|
|
local lbObjects = cryTools.cryAnim.UI.batchProcess.subRangeDialog.lbObjects
|
|
|
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges
|
|
|
local edAnimName = cryTools.cryAnim.UI.batchProcess.subRangeDialog.edAnimName
|
|
|
local edPrefixName = cryTools.cryAnim.UI.batchProcess.subRangeDialog.edPrefixName
|
|
|
local labObjects = cryTools.cryAnim.UI.batchProcess.subRangeDialog.labObjects
|
|
|
|
|
|
local spnStart = cryTools.cryAnim.UI.batchProcess.subRangeDialog.spnStart
|
|
|
local spnStop = cryTools.cryAnim.UI.batchProcess.subRangeDialog.spnStop
|
|
|
|
|
|
edPrefixName.text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRangePrefix
|
|
|
|
|
|
if lbObjects.selection != 0 then
|
|
|
(
|
|
|
spnStart.value = listEntries[lbObjects.selection].range.start
|
|
|
spnStop.value = listEntries[lbObjects.selection].range.end
|
|
|
|
|
|
local tempObjectsName = ""
|
|
|
for i = 1 to listEntries[lbObjects.selection].objects.count do
|
|
|
tempObjectsName += listEntries[lbObjects.selection].objects[i] + (if i < listEntries[lbObjects.selection].objects.count then "; " else "")
|
|
|
|
|
|
labObjects.text = tempObjectsName
|
|
|
|
|
|
edAnimName.text = listEntries[lbObjects.selection].export
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
spnStart.value = 0
|
|
|
spnStop.value = 0
|
|
|
|
|
|
labObjects.text = "None"
|
|
|
|
|
|
edAnimName.text = ""
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch()
|
|
|
--catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeUpdateValues" )
|
|
|
)
|
|
|
subRangeUpdateValues = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeUpdateValues function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeSetList = function subRangeSetList objArray = --// setList
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.batchProcess.subRangeDialog.open == true then
|
|
|
(
|
|
|
local edPrefixName = cryTools.cryAnim.UI.batchProcess.subRangeDialog.edPrefixName
|
|
|
local tempInterval = cryTools.cryAnim.UI.batchProcess._f.subRangeGetRange objArray
|
|
|
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges
|
|
|
|
|
|
try
|
|
|
(
|
|
|
for i = 1 to objArray.count do
|
|
|
objArray[i] = objArray[i].name
|
|
|
)catch()
|
|
|
|
|
|
append listEntries (subRangeStruct objects:objArray range:tempInterval export:objArray[1])
|
|
|
|
|
|
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRangePrefix == "" then
|
|
|
try (cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRangePrefix = (filterString maxFileName "_")[1]) catch()
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges = listEntries
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeSetList" )
|
|
|
)
|
|
|
subRangeSetList = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeSetList function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeLoadFromDummy = function subRangeLoadFromDummy = --// loadFromDummy
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges
|
|
|
try (local edPrefixName = cryTools.cryAnim.UI.batchProcess.subRangeDialog.edPrefixName) catch()
|
|
|
|
|
|
if (local rangeDummy = getNodeByName "subRangeDummy") != undefined then
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local UDPArray = #()
|
|
|
|
|
|
local prefix = getUserProp rangeDummy "subRangePrefix"
|
|
|
|
|
|
local errorArray = #()
|
|
|
|
|
|
|
|
|
for i = 1 to 100 do
|
|
|
(
|
|
|
if (local UDPString = (getUserProp rangeDummy ("subRange" + i as String))) != undefined then
|
|
|
(
|
|
|
local filterArray = filterString UDPString "#"
|
|
|
local objectsArrayString = filterString filterArray[1] ";"
|
|
|
local objectsArray = #()
|
|
|
|
|
|
local range = execute (filterArray[2])
|
|
|
|
|
|
if objectsArrayString.count > 0 then
|
|
|
append listEntries (subRangeStruct objects:objectsArrayString range:range export:filterArray[3])
|
|
|
)
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges = listEntries
|
|
|
|
|
|
|
|
|
try (edPrefixName.text = prefix) catch()
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRangePrefix = prefix
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
|
|
|
|
|
|
return true
|
|
|
|
|
|
)catch()
|
|
|
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeLoadFromDummy" )
|
|
|
)
|
|
|
subRangeLoadFromDummy = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeLoadFromDummy function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog = function subRangeUpdateDialog =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeUpdateDialog" )
|
|
|
)
|
|
|
subRangeUpdateDialog = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeUpdateDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeCreateUDPString = function createUDPString importIndex:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if importIndex == undefined then
|
|
|
importIndex = cryTools.cryAnim.UI.batchProcess._v.selectedFile
|
|
|
|
|
|
|
|
|
local listEntries = cryTools.cryAnim.UI.batchProcess._v.exportFiles[importIndex]--.subRanges
|
|
|
|
|
|
if $subRangeDummy == undefined then
|
|
|
(
|
|
|
local saveDummy = dummy name:"subRangeDummy"
|
|
|
saveDummy.isHidden = true
|
|
|
)
|
|
|
else
|
|
|
local saveDummy = getNodeByName "subRangeDummy"
|
|
|
|
|
|
|
|
|
local UDPArray = filterString (getUserPropBuffer saveDummy) "\r\n"
|
|
|
|
|
|
local UDPString = ""
|
|
|
for i = 1 to UDPArray.count do
|
|
|
if (findString UDPArray[i] "subRange") == undefined then
|
|
|
UDPString += UDPArray[i] + "\r\n"
|
|
|
|
|
|
|
|
|
|
|
|
UDPString += "subRangePrefix=" + listEntries.subRangePrefix + "\r\n"--edPrefixName.text + "\r\n"
|
|
|
|
|
|
for i = 1 to listEntries.subRanges.count do
|
|
|
(
|
|
|
local listString = "subRange" + i as String + "="
|
|
|
for f = 1 to listEntries.subRanges[i].objects.count do
|
|
|
listString += listEntries.subRanges[i].objects[f] + (if f < listEntries.subRanges[i].objects.count then ";" else "")
|
|
|
|
|
|
listString += "#" + listEntries.subRanges[i].range as String + "#" + listEntries.subRanges[i].export as String + "\r\n"
|
|
|
|
|
|
UDPString += listString
|
|
|
)
|
|
|
|
|
|
return UDPString
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeCreateUDPString" )
|
|
|
)
|
|
|
subRangeCreateUDPString = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeCreateUDPString function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog = function subRangeCallDialog =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
try ( destroyDialog cryTools.cryAnim.UI.batchProcess.subRangeDialog ) catch()
|
|
|
|
|
|
rollout subRangeRO "Sub-Ranges" width:200 height:364
|
|
|
(
|
|
|
|
|
|
button btnAddObjects "Add Entry" pos:[8,10] width:184 height:20
|
|
|
listbox lbObjects "" pos:[8,40] width:184 height:18
|
|
|
label labStart "Start" pos:[22,287] width:32 height:16
|
|
|
spinner spnStart "" pos:[8,303] width:60 height:16 range:[-30000,30000,0] type:#integer scale:0.5
|
|
|
label labStop "Stop" pos:[82,287] width:32 height:14
|
|
|
spinner spnStop "" pos:[72,303] width:56 height:16 range:[-30000,30000,0] type:#integer scale:0.5
|
|
|
button btnDelete "Delete" pos:[140,300] width:50 height:20
|
|
|
|
|
|
label labObjects "None" pos:[8,323] width:70 height:25
|
|
|
button btnObject "Objects" pos:[140,327] width:50 height:20
|
|
|
|
|
|
label labPrefixName "Prefix:" pos:[8,358]
|
|
|
edittext edPrefixName "" pos:[70,355] fieldWidth:118 height:1
|
|
|
|
|
|
label labAnimName "Anim Name:" pos:[8,378]
|
|
|
edittext edAnimName "" pos:[70,375] fieldWidth:118 height:1
|
|
|
|
|
|
button btnSaveToScene "S A V E T O S C E N E" pos:[8,408] width:184 height:20
|
|
|
button btnSaveToMaxFile "S A V E T O M A X F I L E" pos:[8,438] width:184 height:20
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
on subRangeExport open do
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeLoadFromDummy()
|
|
|
|
|
|
|
|
|
if $selection.count > 0 then
|
|
|
(
|
|
|
if (queryBox "Load current Selection into the List?" title:"Sub-Range-Export") == true then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeSetList (selection as Array)
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
return true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
on btnAddObjects pressed do
|
|
|
(
|
|
|
if $selection.count > 0 then
|
|
|
(
|
|
|
if (queryBox "Load current Selection into the List?" title:"Sub-Range-Export") == true then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeSetList (selection as Array)
|
|
|
lbObjects.selection = 1
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
return true
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if (local tempSel = selectByName title:"Select Nodes to be Added") != undefined then
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeSetList tempSel
|
|
|
|
|
|
lbObjects.selection = 1
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
on btnDelete pressed do
|
|
|
(
|
|
|
if lbObjects.selection != 0 then
|
|
|
(
|
|
|
deleteItem cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges lbObjects.selection
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
|
|
|
if lbObjects.selection <= 0 then
|
|
|
lbObjects.selection = lbObjects.items.count
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
on btnObject pressed do
|
|
|
(
|
|
|
if lbObjects.selection != 0 then
|
|
|
(
|
|
|
local tempSel = selectByName title:"Select Nodes"
|
|
|
local newObjects = #()
|
|
|
|
|
|
if tempSel != undefined then
|
|
|
(
|
|
|
for i = 1 to tempSel.count do
|
|
|
tempSel[i] = tempSel[i].name
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges[lbObjects.selection].objects = tempSel
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateRange lbObjects.selection
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
on lbObjects selected value do
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateValues()
|
|
|
)
|
|
|
|
|
|
|
|
|
on spnStart changed value do
|
|
|
(
|
|
|
if lbObjects.selection != 0 then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges[lbObjects.selection].range.start = value
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
on spnStop changed value do
|
|
|
(
|
|
|
if lbObjects.selection != 0 then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges[lbObjects.selection].range.end = value
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
on edPrefixName changed value do
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRangePrefix = value
|
|
|
--cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
on edAnimName changed value do
|
|
|
(
|
|
|
if lbObjects.selection != 0 then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[cryTools.cryAnim.UI.batchProcess._v.selectedFile].subRanges[lbObjects.selection].export = value
|
|
|
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateList()
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
on btnSaveToScene pressed do
|
|
|
(
|
|
|
if lbObjects.items.count == 0 and spnStart.value == 0 and spnStop.value == 0 and edPrefixName.text == "" and edAnimName.text == "" then
|
|
|
(
|
|
|
if (getNodeByName "subRangeDummy") != undefined then
|
|
|
if (queryBox "Delete subRange Dummy in current Scene ?" title:"CryAnim Batch Process") == true then
|
|
|
try delete (getNodeByName "subRangeDummy") catch()
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if $subRangeDummy == undefined then
|
|
|
(
|
|
|
local saveDummy = dummy name:"subRangeDummy"
|
|
|
saveDummy.isHidden = true
|
|
|
)
|
|
|
else
|
|
|
local saveDummy = getNodeByName "subRangeDummy"
|
|
|
|
|
|
|
|
|
local UDPString = cryTools.cryAnim.UI.batchProcess._f.subRangeCreateUDPString()
|
|
|
local importANM = true
|
|
|
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.flags[10] == false then
|
|
|
local importANM = queryBox "Overwrite current Scene ?" title:"CryAnim Batch Process"
|
|
|
|
|
|
|
|
|
|
|
|
if importANM == true then
|
|
|
setUserPropBuffer saveDummy UDPString
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
on btnSaveToMaxFile pressed do
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (queryBox "Save .anm settings to selected .max file ?\n\n(Loads selected max file and saves settings)" title:"CryAnim Batch Process") == true then
|
|
|
(
|
|
|
local tempSel = cryTools.cryAnim.UI.batchProcess._v.selectedFile
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[10] = true
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].btnLoadFile.pressed()
|
|
|
|
|
|
|
|
|
if $subRangeDummy == undefined then
|
|
|
(
|
|
|
local saveDummy = dummy name:"subRangeDummy"
|
|
|
saveDummy.isHidden = true
|
|
|
)
|
|
|
else
|
|
|
local saveDummy = getNodeByName "subRangeDummy"
|
|
|
|
|
|
|
|
|
local UDPString = cryTools.cryAnim.UI.batchProcess._f.subRangeCreateUDPString importIndex:tempSel
|
|
|
local importANM = true
|
|
|
|
|
|
|
|
|
setUserPropBuffer saveDummy UDPString
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].btnImportANM.pressed()
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[10] = false
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch()
|
|
|
)
|
|
|
|
|
|
)
|
|
|
cryTools.cryAnim.UI.batchProcess.subRangeDialog = subRangeRO
|
|
|
subRangeRO = undefined
|
|
|
|
|
|
local newDialogPos = cryTools.cryAnim.UI.batchProcess.dialog.pos - [205,-23]
|
|
|
createDialog cryTools.cryAnim.UI.batchProcess.subRangeDialog 200 464 newDialogPos[1] newDialogPos[2] style:#(#style_border)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryAnim.UI.batchProcess._f.subRangeCallDialog" )
|
|
|
)
|
|
|
subRangeCallDialog = undefined
|
|
|
logOutput "> Created cryAnim.UI.batchProcess._f.subRangeCallDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.addNode
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- adds children to an array
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.addNode = function addNode treeView tempNode tempChildren =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
for child in tempChildren do
|
|
|
(
|
|
|
--// creates an string array of all subfolders
|
|
|
tempString = filterString child "\\"
|
|
|
tempString = tempString[tempString.count]
|
|
|
|
|
|
--// adds the last sub folder to the visible sub folders list
|
|
|
if classOf treeView == ActiveXControl then
|
|
|
(
|
|
|
local newNode = treeView.Nodes.add tempNode.index 4 "" tempString
|
|
|
--// sorts the entry
|
|
|
newNode.sorted = true
|
|
|
)
|
|
|
else
|
|
|
local newNode = tempNode.Nodes.add tempString tempString
|
|
|
|
|
|
--// adds the whole path to the seperate sub folders list
|
|
|
append cryTools.cryAnim.UI.batchProcess._v.subFolders (subFolderStruct path:child node:newNode)
|
|
|
|
|
|
|
|
|
--// gets all directories in the current sub folder
|
|
|
folderArray = getDirectories (child + "*")
|
|
|
cryTools.cryAnim.UI.batchProcess._f.addNode treeView newNode folderArray
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.addNode" )
|
|
|
)
|
|
|
addNode = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.addNode function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- save and get all checked entries into the ini file
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection = function updateSubFolderSelection op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
case op of
|
|
|
(
|
|
|
#set:
|
|
|
(
|
|
|
local tempString = "#"
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.subFolders.count do
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.subFolders[i].node.checked == true then
|
|
|
tempString += (cryTools.cryAnim.base.lowercase cryTools.cryAnim.UI.batchProcess._v.subFolders[i].path) + "#"
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.base.iniFile #set #batchProcessSubFolderSelection value:tempString
|
|
|
)
|
|
|
|
|
|
#get:
|
|
|
(
|
|
|
local tempVar = cryTools.cryAnim.base.iniFile #get #batchProcessSubFolderSelection
|
|
|
if tempVar != "" then
|
|
|
(
|
|
|
local tempFilter = filterString tempVar "#"
|
|
|
|
|
|
cryTools.cryAnim._v.various[120] = true
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.subFolders.count do
|
|
|
(
|
|
|
local oldFolder = cryTools.cryAnim.base.lowercase cryTools.cryAnim.UI.batchProcess._v.subFolders[i].path
|
|
|
if (index = findItem tempFilter oldFolder) != 0 then
|
|
|
(
|
|
|
local tempNode = cryTools.cryAnim.UI.batchProcess._v.subFolders[i].node
|
|
|
tempNode.checked = true
|
|
|
try
|
|
|
(
|
|
|
local parentNode = tempNode.parent
|
|
|
|
|
|
while parentNode != undefined do
|
|
|
(
|
|
|
parentNode.expanded = true
|
|
|
parentNode = parentNode.parent
|
|
|
)
|
|
|
)catch()
|
|
|
)
|
|
|
)
|
|
|
cryTools.cryAnim._v.various[120] = undefined
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection" )
|
|
|
)
|
|
|
updateSubFolderSelection = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getCheckedNodes
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- clears the sub folder list and adds new entries
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getCheckedNodes = function getCheckedNodes =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempArray = #()
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.subFolders.count do
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.subFolders[i].node.checked == true then
|
|
|
append tempArray i
|
|
|
)
|
|
|
return tempArray
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getCheckedNodes" )
|
|
|
)
|
|
|
getCheckedNodes = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getCheckedNodes function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.updateSubFolders
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- clears the sub folder list and updates it with new entries
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateSubFolders = function updateSubFolders =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local lbSubFolders = cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbSubFolders
|
|
|
--// clears lists
|
|
|
lbSubFolders.Nodes.clear()
|
|
|
cryTools.cryAnim.UI.batchProcess._v.subFolders = #()
|
|
|
|
|
|
--// if there is a folder selected in rollout[2]
|
|
|
if findString cryTools.cryAnim.UI.batchProcess._v.sourcePath "\\" != undefined then
|
|
|
(
|
|
|
|
|
|
--// gets latest sub folder name for the root of the sub folders list
|
|
|
rootText = filterString cryTools.cryAnim.UI.batchProcess._v.sourcePath "\\"
|
|
|
rootText = rootText[rootText.count]
|
|
|
|
|
|
--// adds a new entry to the sub folders list
|
|
|
if classOf lbSubFolders != ActiveXControl then
|
|
|
(
|
|
|
root = lbSubFolders.Nodes.add rootText rootText
|
|
|
root.tag = rootText
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
root = lbSubFolders.Nodes.add()
|
|
|
root.text = rootText
|
|
|
)
|
|
|
|
|
|
--// adds the full path of the root folder to the seperate list
|
|
|
append cryTools.cryAnim.UI.batchProcess._v.subFolders (subFolderStruct path:cryTools.cryAnim.UI.batchProcess._v.sourcePath node:root)
|
|
|
|
|
|
if classOf lbSubFolders == ActiveXControl then
|
|
|
(
|
|
|
if (findString (cryTools.cryAnim.base.iniFile #get #batchProcessSubFolderSelection) "\\") == undefined then
|
|
|
(
|
|
|
root.checked = true
|
|
|
cryTools.cryAnim.UI.batchProcess._v.subFolders[cryTools.cryAnim.UI.batchProcess._v.subFolders.count].checked = true
|
|
|
)
|
|
|
)
|
|
|
--// gets sub directories of the root folder
|
|
|
folderArray = getDirectories (cryTools.cryAnim.UI.batchProcess._v.sourcePath + "*")
|
|
|
--// adds all sub folders in sub folders to the list
|
|
|
cryTools.cryAnim.UI.batchProcess._f.addNode lbSubFolders root folderArray
|
|
|
|
|
|
if classOf lbSubFolders == ActiveXControl then
|
|
|
(
|
|
|
root.Expanded = true
|
|
|
root.Bold = true
|
|
|
)
|
|
|
else
|
|
|
root.Expand()
|
|
|
)
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.updateSubFolders" )
|
|
|
)
|
|
|
updateSubFolders = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.updateSubFolders function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.updateCounter
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- gets all selected or unselected files and updates the count string
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateCounter = function updateCounter =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
counter = 0
|
|
|
maxFiles = 0
|
|
|
tempText = "Count :"
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
|
|
|
(
|
|
|
local tempVar = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i]
|
|
|
|
|
|
if tempVar.extension != "folder" then --and tempVar.extension != "scene" then
|
|
|
(
|
|
|
maxFiles += 1
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used = tempVar.node.selected
|
|
|
|
|
|
if tempVar.node.selected == true then
|
|
|
counter += 1
|
|
|
else
|
|
|
(
|
|
|
if tempVar.extension == "scene" then
|
|
|
maxFiles -= 1
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used = false
|
|
|
|
|
|
)
|
|
|
|
|
|
--// if nothing is selected or everything is selected
|
|
|
if (counter == 0) or (counter == maxFiles) then
|
|
|
(
|
|
|
--// go through the files list (scene entry only, if selected) and set used to true
|
|
|
for i = (cryTools.cryAnim.UI.batchProcess._v.exportFiles.count - maxFiles + 1) to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used = true
|
|
|
|
|
|
--// no addition to the counter string
|
|
|
counter = ""
|
|
|
)
|
|
|
--// if something is selected
|
|
|
else
|
|
|
--// add a seperator to the counter string
|
|
|
counter = counter as String + " / "
|
|
|
|
|
|
--// update the count string with the "Count :" and the selected files (if some were selected) and the maximum file count
|
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].labCount.text = tempText + " " + counter + maxFiles as String
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.updateCounter" )
|
|
|
)
|
|
|
updateCounter = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.updateCounter function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getScriptList
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- gets the list of all custom scripts in the batch directory
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getScriptList = function getScriptList scriptPath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempArray = getFiles scriptPath
|
|
|
local tempEntries = #()
|
|
|
|
|
|
if tempArray.count > 0 then
|
|
|
(
|
|
|
|
|
|
for i = 1 to tempArray.count do
|
|
|
(
|
|
|
local tempFilter = filterString tempArray[i] "\\"
|
|
|
local tempString = (filterString tempFilter[tempFilter.count] ".")[1]
|
|
|
|
|
|
|
|
|
append tempEntries tempString
|
|
|
)
|
|
|
)
|
|
|
|
|
|
append tempEntries "----------------------------------------------"
|
|
|
append tempEntries "Cusomize Scripts"
|
|
|
|
|
|
return tempEntries
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getScriptList" )
|
|
|
)
|
|
|
getScriptList = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getScriptList function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.updateScriptLists
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the list of scripts in the customize script drob-down lists
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists = function updateScriptLists scriptUpdate:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local ddOp1 = cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp1
|
|
|
local ddOp2 = cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp2
|
|
|
local ddOp3 = cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp3
|
|
|
local ddOp4 = cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp4
|
|
|
|
|
|
ddOp1.items = cryTools.cryAnim.UI.batchProcess._f.getScriptList (cryTools.buildpathfull + "Tools\\maxscript\\cryAnim\\ui\\batch\\Scripts\\*.ms")
|
|
|
ddOp2.items = cryTools.cryAnim.UI.batchProcess._f.getScriptList (cryTools.buildpathfull + "Tools\\maxscript\\cryAnim\\ui\\batch\\Scripts\\*.ms")
|
|
|
ddOp3.items = cryTools.cryAnim.UI.batchProcess._f.getScriptList (cryTools.buildpathfull + "Tools\\maxscript\\cryAnim\\ui\\batch\\Scripts\\*.ms")
|
|
|
ddOp4.items = cryTools.cryAnim.UI.batchProcess._f.getScriptList (cryTools.buildpathfull + "Tools\\maxscript\\cryAnim\\ui\\batch\\Scripts\\*.ms")
|
|
|
|
|
|
--ddSecondOp.items = cryTools.cryAnim.UI.batchProcess._f.getScriptList (cryTools.buildpathfull + "Tools\\maxscript\\cryAnim\\ui\\batch\\SecondScript\\*.ms")
|
|
|
|
|
|
if scriptUpdate == undefined then
|
|
|
(
|
|
|
ddOp1.selection = ddOp1.items.count - 1
|
|
|
ddOp2.selection = ddOp2.items.count - 1
|
|
|
ddOp3.selection = ddOp3.items.count - 1
|
|
|
ddOp4.selection = ddOp4.items.count - 1
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
local tempFilter = filterString scriptUpdate "|"
|
|
|
|
|
|
if tempFilter.count > 1 then
|
|
|
(
|
|
|
case tempFilter[1] of
|
|
|
(
|
|
|
"1": ddOp1.selection = (findItem ddOp1.items tempFilter[2])
|
|
|
"2": ddOp2.selection = (findItem ddOp2.items tempFilter[2])
|
|
|
"3": ddOp3.selection = (findItem ddOp3.items tempFilter[2])
|
|
|
"4": ddOp4.selection = (findItem ddOp4.items tempFilter[2])
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
case tempFilter[1] of
|
|
|
(
|
|
|
"1": ddOp1.selection = ddOp1.items.count
|
|
|
"2": ddOp2.selection = ddOp2.items.count
|
|
|
"3": ddOp3.selection = ddOp3.items.count
|
|
|
"4": ddOp4.selection = ddOp4.items.count
|
|
|
"None":
|
|
|
(
|
|
|
--ddFirstOp.selection = (findItem ddFirstOp.items cryTools.cryAnim._v.various[33])
|
|
|
--ddSecondOp.selection = (findItem ddSecondOp.items cryTools.cryAnim._v.various[34])
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.updateScriptLists" )
|
|
|
)
|
|
|
updateScriptLists = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.updateScriptLists function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates folder, runs pre-export script and/or exports the file, generates log file
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts = function executeCustomScripts op obj =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempScript = cryTools.cryAnim.UI.batchProcess._v.customScripts[(op as Integer)]
|
|
|
|
|
|
|
|
|
--local tempMaxCount = obj.items.count
|
|
|
--local tempIndex = obj.selection
|
|
|
--local tempSelected = obj.items[tempIndex]
|
|
|
|
|
|
|
|
|
if obj.selection == obj.items.count then
|
|
|
(
|
|
|
if tempScript != "" then
|
|
|
(
|
|
|
--// try to execute it, otherwise print out the error message
|
|
|
try
|
|
|
(
|
|
|
execute( tempScript )
|
|
|
gc()
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
format "*** % ***\n" (getCurrentException())
|
|
|
break
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if obj.selection < (obj.items.count - 1) then
|
|
|
(
|
|
|
local tempString = (cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\batch\\Scripts\\" + obj.items[obj.selection] + ".ms")
|
|
|
try ( fileIn tempString )
|
|
|
catch
|
|
|
(
|
|
|
print ("Can't execute " + tempString)
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
return true
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts" )
|
|
|
)
|
|
|
executeCustomScripts = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getAllFolders
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns an array of all folders selected in the sub folders list
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getAllFolders = function getAllFolders =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local folderArray = #()
|
|
|
local nodeArray = cryTools.cryAnim.UI.batchProcess._f.getCheckedNodes()
|
|
|
|
|
|
--// for entries in the sub folders list
|
|
|
for i = 1 to nodeArray.count do
|
|
|
--// if the entry is checked, add the entry to the folderArray
|
|
|
append folderArray cryTools.cryAnim.UI.batchProcess._v.subFolders[nodeArray[i]].path
|
|
|
|
|
|
--// return checked sub folders
|
|
|
return folderArray
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getAllFolders" )
|
|
|
)
|
|
|
getAllFolders = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getAllfolders function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getAllFiles
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns an array of all files of the checked folders in sub folders list
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getAllFiles = function getAllFiles =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local fileArray = #()
|
|
|
--// gets all checked sub folders
|
|
|
local folderArray = cryTools.cryAnim.UI.batchProcess._f.getAllFolders()
|
|
|
--// for all sub folders
|
|
|
for i = 1 to folderArray.count do
|
|
|
(
|
|
|
--// Add subFolder to list
|
|
|
local tempArray = #(("##" + folderArray[i]))
|
|
|
--// Add subFolderFiles to list
|
|
|
join tempArray (getFiles (folderArray[i] + "*.*" ))
|
|
|
--// Add subFolder + Files to general files list
|
|
|
join fileArray tempArray
|
|
|
|
|
|
)
|
|
|
|
|
|
return fileArray
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getAllFiles" )
|
|
|
)
|
|
|
getAllFiles = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getAllFiles function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getBoneDetection
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- compares the filename with the file parts specified in the boneList and returns the result if the bone is in the file name
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getBoneDetection = function getBoneDetection filename =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local resultArray = #()
|
|
|
local resultActive = false
|
|
|
--// for all items in the bone list
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.boneList.count do
|
|
|
(
|
|
|
local tempString = ""
|
|
|
--// if the entry is activated
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.boneList[i].active == "true" then
|
|
|
(
|
|
|
--// entry is activated and so there is something to use
|
|
|
resultActive = true
|
|
|
--// gets all the parts of the file parts to compare
|
|
|
local tempArray = filterString cryTools.cryAnim.UI.batchProcess._v.boneList[i].external ";"
|
|
|
|
|
|
local foundBones = false
|
|
|
--// for all items in the file parts
|
|
|
for d = 1 to tempArray.count do
|
|
|
--// if the file part is in the filename string
|
|
|
if findString filename tempArray[d] != undefined then
|
|
|
--// bone entry was found and
|
|
|
foundBones = true
|
|
|
|
|
|
--// if an entry was found
|
|
|
if foundBones == true then
|
|
|
--// add the index and name to the result
|
|
|
append resultArray (resultStruct index:i name:cryTools.cryAnim.UI.batchProcess._v.boneList[i].name)
|
|
|
)
|
|
|
)
|
|
|
--// if there is no entry in the bone list is checked
|
|
|
if resultActive == false then
|
|
|
--// return just false
|
|
|
resultArray = #(false)
|
|
|
--// otherwise return the result array
|
|
|
return resultArray
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getBoneDetection" )
|
|
|
)
|
|
|
getBoneDetection = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getBoneDetection function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getFilename
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the filename of the full path
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getFilename = function getFilename filepath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// return new filename
|
|
|
return (filterString (cryTools.cryAnim.base.perforce filepath #getFilename) ".")[1]
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getFilename" )
|
|
|
)
|
|
|
getFilename = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getFilename function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getExtension
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the extension of a filepath
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getExtension = function getExtension filepath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// if a folder is found
|
|
|
--if findString filepath "\\" != undefined and findString filepath "." == undefined then
|
|
|
--return "folder"
|
|
|
|
|
|
if (findString filepath "##") != undefined then
|
|
|
return "folder"
|
|
|
|
|
|
--// divides the string by a "."
|
|
|
local tempFilterString = filterString filepath "."
|
|
|
|
|
|
--// returns the last part of the filepath (extension)
|
|
|
return tempFilterString[tempFilterString.count]
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getExtension" )
|
|
|
)
|
|
|
getExtension = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getExtension function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.findMaskEntry
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns a mask struct with all the entries, in which the filename is part of
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.findMaskEntry = function findMaskEntry tempMask tempString =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempArray = #(false, false, false, false)
|
|
|
|
|
|
--// if the normal criteria is not empty
|
|
|
if tempMask.normal[1] != undefined then
|
|
|
(
|
|
|
--// file is part in normal
|
|
|
tempArray[1] = true
|
|
|
for i = 1 to tempMask.normal.count do
|
|
|
(
|
|
|
--// if the there is a missmatch in the file criteria
|
|
|
if (findString tempString tempMask.normal[i]) == undefined then
|
|
|
--// file is not part in normal
|
|
|
tempArray[1] = false
|
|
|
)
|
|
|
)
|
|
|
--// normal criteria is empty
|
|
|
else
|
|
|
--// file is not part in normal criteria
|
|
|
tempArray[1] = undefined
|
|
|
|
|
|
--// goes through the addition criteria
|
|
|
for i = 1 to tempMask.add.count do
|
|
|
(
|
|
|
--// if the criteria is not empty
|
|
|
if tempMask.add[i] != undefined then
|
|
|
-- // if the criteria is found in the filename
|
|
|
if (findString tempString tempMask.add[i]) != undefined then
|
|
|
--// file is part in addition
|
|
|
tempArray[2] = true
|
|
|
)
|
|
|
|
|
|
--// goes through the substraction criteria
|
|
|
for i = 1 to tempMask.remove.count do
|
|
|
(
|
|
|
--// if the criteria is not empty
|
|
|
if tempMask.remove[i] != undefined then
|
|
|
--// if the criteria is found in the filename
|
|
|
if (findString tempString tempMask.remove[i]) != undefined then
|
|
|
--// file is part in substraction
|
|
|
tempArray[3] = true
|
|
|
)
|
|
|
--// if there is a extension criteria defined
|
|
|
if tempMask.extension[1] != undefined then
|
|
|
(
|
|
|
--// goes through the extension criteria
|
|
|
for i = 1 to tempMask.extension.count do
|
|
|
(
|
|
|
--// if criteria is not empty
|
|
|
if tempMask.extension[i] != undefined then
|
|
|
(
|
|
|
--// seperates the filepath and the extension
|
|
|
tempExtension = filterString tempString "."
|
|
|
--// and gets the extension
|
|
|
tempExtension = tempExtension[tempExtension.count]
|
|
|
--// if the extension criteria is found in the file
|
|
|
if (findString tempExtension tempMask.extension[i]) != undefined then
|
|
|
--// file is part in extension criteria
|
|
|
tempArray[4] = true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
--// if there is no extension criteria defined
|
|
|
else
|
|
|
tempArray[4] = undefined
|
|
|
|
|
|
--// return the list of founded criterias
|
|
|
return tempArray
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.findMaskEntry" )
|
|
|
)
|
|
|
findMaskEntry = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.findMaskEntry function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.getFileFound
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns true, if the file matchs the file mask criteria and other checks
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.getFileFound = function getFileFound filename =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// creates an empty mask struct
|
|
|
fileMask = maskStruct()
|
|
|
--// seperates all entries in the file mask and stores them as an array
|
|
|
fileMaskFilter = filterString cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].etFileMask.text " "
|
|
|
--// end result which will be returned
|
|
|
fileMaskFound = false
|
|
|
|
|
|
--// goes through the sperated mask entries
|
|
|
for f = 1 to fileMaskFilter.count do
|
|
|
(
|
|
|
--// if a substract letter is found, put the part of the string into the remove part
|
|
|
if findString fileMaskFilter[f] "#" != undefined then
|
|
|
append fileMask.remove (substring fileMaskFilter[f] 2 fileMaskFilter[f].count)
|
|
|
|
|
|
--// if an addition letter is found, put the part of the string into the addition part
|
|
|
if findString fileMaskFilter[f] "*" != undefined then
|
|
|
append fileMask.add (substring fileMaskFilter[f] 2 fileMaskFilter[f].count)
|
|
|
|
|
|
--// if an additon letter and a substract letter is not found, put the part of the string into the normal part
|
|
|
if (findString fileMaskFilter[f] "*" == undefined) and (findString fileMaskFilter[f] "#" == undefined) and (findString fileMaskFilter[f] "$" == undefined) then
|
|
|
append fileMask.normal fileMaskFilter[f]
|
|
|
|
|
|
--// if a file type letter is found, put the part of the string into the extension part
|
|
|
if findString fileMaskFilter[f] "$" != undefined then
|
|
|
append fileMask.extension (cryTools.cryAnim.base.lowercase(substring fileMaskFilter[f] 2 fileMaskFilter[f].count))
|
|
|
)
|
|
|
|
|
|
|
|
|
--// gets the result, if the file is part of the substract, add, normal or extension criteria
|
|
|
maskArray = cryTools.cryAnim.UI.batchProcess._f.findMaskEntry fileMask filename
|
|
|
|
|
|
|
|
|
--// if the file extension is found
|
|
|
if maskArray[4] != false then
|
|
|
(
|
|
|
--// if the file is part in normal or is not specified then file is found
|
|
|
if (maskArray[1] == true or maskArray[1] == undefined) then
|
|
|
--// file is found
|
|
|
fileMaskFound = true
|
|
|
else
|
|
|
--// otherwise not
|
|
|
fileMaskFound = false
|
|
|
|
|
|
--// if the file is part in substraction
|
|
|
if maskArray[3] == true then
|
|
|
--// file is hidden
|
|
|
fileMaskFound = false
|
|
|
--// if the file is part in addition
|
|
|
if maskArray[2] == true then
|
|
|
--// file is found
|
|
|
fileMaskFound = true
|
|
|
)
|
|
|
--// if the file extension is not found
|
|
|
else
|
|
|
--// file is hidden
|
|
|
fileMaskFound = false
|
|
|
|
|
|
--// returns the result if the file is visible or not
|
|
|
return fileMaskFound
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.getFileFound" )
|
|
|
)
|
|
|
getFileFound = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.getFileFound function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.refreshFiles
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- clears the file list, fills it with found files and sets the extent for the columns
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.refreshFiles = function refreshFiles =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// empty array of column text extents
|
|
|
local newExtent = #(0,0,0,0,0)
|
|
|
local lbFiles = cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbFiles
|
|
|
--// clears the file list
|
|
|
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.flags[1] == true then
|
|
|
(
|
|
|
if classOf lbFiles == ActiveXControl then
|
|
|
lbFiles.listItems.clear()
|
|
|
else
|
|
|
lbFiles.items.clear()
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
--// goes through the file list
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
|
|
|
(
|
|
|
local lbFilesFile = ""
|
|
|
local foreColor = [0,0,0]
|
|
|
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.flags[1] == true then
|
|
|
(
|
|
|
--// adds the line with the name
|
|
|
if classOf lbFiles == ActiveXControl then
|
|
|
(
|
|
|
lbFilesFile = lbFiles.listItems.Add text:cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename
|
|
|
--// adds the Details
|
|
|
lbFilesFile.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details
|
|
|
--// adds the Export
|
|
|
lbFilesFile.listSubItems.Add text:""
|
|
|
--// adds the Extension
|
|
|
lbFilesFile.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension
|
|
|
--// adds the Anm
|
|
|
lbFilesFile.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
lbFilesFile = lbFiles.items.Add cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename
|
|
|
lbFilesFile.subItems.Add cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details
|
|
|
lbFilesFile.subItems.Add ""
|
|
|
lbFilesFile.subItems.Add cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension
|
|
|
lbFilesFile.subItems.Add cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if classOf lbFiles == ActiveXControl then
|
|
|
(
|
|
|
lbFilesFile = lbFiles.listItems[i]
|
|
|
lbFilesFile.listSubItems[1].text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details
|
|
|
lbFilesFile.listSubItems[2].text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process
|
|
|
lbFilesFile.listSubItems[4].text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
lbFilesFile = lbFiles.items.item (i - 1)
|
|
|
(lbFilesFile.subItems.get_item 1).text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details
|
|
|
(lbFilesFile.subItems.get_item 2).text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process
|
|
|
(lbFilesFile.subItems.get_item 4).text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm
|
|
|
)
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].node = lbFilesFile
|
|
|
|
|
|
local textExtent = #(0,0,0,0,0)
|
|
|
|
|
|
|
|
|
if classOf lbFiles == ActiveXControl then
|
|
|
(
|
|
|
--// if a the "file" is a folder
|
|
|
case cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension of
|
|
|
(
|
|
|
"folder": lbFilesFile.Bold = true
|
|
|
"scene": lbFilesFile.Bold = true
|
|
|
)
|
|
|
|
|
|
--// extent of the current filename
|
|
|
textExtent[1] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename)[1]) * 30
|
|
|
--// extent of the current details
|
|
|
textExtent[2] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details)[1]) * 40
|
|
|
--// extent of the current export
|
|
|
textExtent[3] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process)[1]) * 40
|
|
|
--// extent of the current extension
|
|
|
textExtent[4] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension)[1]) * 50
|
|
|
--// extent of the current .anm
|
|
|
textExtent[5] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm)[1]) * 50
|
|
|
|
|
|
--// goes through the extent list
|
|
|
for f = 1 to textExtent.count do
|
|
|
--// if the current extent is higher than the result extent
|
|
|
if textExtent[f] > newExtent[f] then
|
|
|
--// result extent is current extent
|
|
|
newExtent[f] = textExtent[f]
|
|
|
|
|
|
--// files which are selected before will be selected again
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
--// adds the Details
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details != "" then
|
|
|
(
|
|
|
if (findString cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details ";") != undefined then
|
|
|
foreColor = [200,150,50]
|
|
|
else
|
|
|
foreColor = [0,0,150]
|
|
|
)
|
|
|
--// adds the Process
|
|
|
lbFilesFile.subItems.Add cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process != "" then
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process == "Done" then
|
|
|
foreColor = [0,200,0]
|
|
|
else
|
|
|
foreColor = [255,0,0]
|
|
|
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process == "Load" then
|
|
|
foreColor = [0,0,255]
|
|
|
)
|
|
|
|
|
|
--// adds the Extension
|
|
|
case cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension of
|
|
|
(
|
|
|
"folder": foreColor = [200,0,0]
|
|
|
"scene": foreColor = [0,0,200]
|
|
|
)
|
|
|
|
|
|
|
|
|
lbFilesFile.ForeColor = lbFilesFile.ForeColor.FromArgb foreColor[1] foreColor[2] foreColor[3]
|
|
|
|
|
|
--// extent of the current filename
|
|
|
textExtent[1] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename)[1])
|
|
|
--// extent of the current details
|
|
|
textExtent[2] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details)[1])
|
|
|
--// extent of the current process
|
|
|
textExtent[3] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process)[1])
|
|
|
--// extent of the current extension
|
|
|
textExtent[4] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension)[1])
|
|
|
--// extent of the current .anm
|
|
|
textExtent[5] = ((getTextExtent cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm)[1])
|
|
|
|
|
|
--// goes through the extent list
|
|
|
for f = 1 to textExtent.count do
|
|
|
--// if the current extent is higher than the result extent
|
|
|
if textExtent[f] > newExtent[f] then
|
|
|
--// result extent is current extent
|
|
|
newExtent[f] = textExtent[f] + 12 --// additional number so entries are not cut
|
|
|
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
--// goes through the result extent list
|
|
|
for f = 1 to newExtent.count do
|
|
|
(
|
|
|
--// applys the weidth of the column with the text extent
|
|
|
if classOf lbFiles == ActiveXControl then
|
|
|
lbFiles.columnHeaders[f].width = newExtent[f]
|
|
|
else
|
|
|
(lbFiles.Columns.item (f - 1)).width = newExtent[f]
|
|
|
)
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = false
|
|
|
|
|
|
--// updates the counter
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.refreshFiles" )
|
|
|
)
|
|
|
refreshFiles = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.refreshFiles function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.updateDialog
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the whole dialog analyze the file mask and files
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog = function updateDialog updateFromExport:false =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// if the function is called after the process file function
|
|
|
if updateFromExport == false then
|
|
|
--// don't clear the file list, as it stores the export results
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles = #()
|
|
|
|
|
|
|
|
|
--// if the source path is not empty
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
|
|
|
(
|
|
|
--// gets all selected folders
|
|
|
local folderArray = cryTools.cryAnim.UI.batchProcess._f.getAllFolders()
|
|
|
--// creates array with the scene entry first
|
|
|
local fileArray = #(" --- Current Scene ---.scene")
|
|
|
--// attaches all files in the selected folders
|
|
|
join fileArray (cryTools.cryAnim.UI.batchProcess._f.getAllFiles())
|
|
|
|
|
|
|
|
|
--// goes through all files in the folders
|
|
|
for i = 1 to fileArray.count do
|
|
|
(
|
|
|
tempFilename = #()
|
|
|
--// gets the filename with extension
|
|
|
tempFilename[1] = cryTools.cryAnim.base.perforce fileArray[i] #getFilename
|
|
|
--// gets filename without extension
|
|
|
tempFilename[2] = cryTools.cryAnim.UI.batchProcess._f.getFilename fileArray[i]
|
|
|
--// gets the whole file path
|
|
|
tempFilename[3] = fileArray[i]
|
|
|
|
|
|
|
|
|
--// checks, if the filename is part of the bone detection criteria
|
|
|
boneFound = cryTools.cryAnim.UI.batchProcess._f.getBoneDetection tempFilename[2]
|
|
|
--// checks, if the filename is part of show-criteria
|
|
|
fileFound = cryTools.cryAnim.UI.batchProcess._f.getFileFound tempFilename[1]
|
|
|
|
|
|
|
|
|
--// if file will be shown at the end
|
|
|
fileUsed = false
|
|
|
--// if the entry is a folder
|
|
|
folderFound = false
|
|
|
--// if the entry is the scene
|
|
|
sceneFound = false
|
|
|
--// if a bone criteria was detected
|
|
|
tempDetail = ""
|
|
|
|
|
|
--// if a folder is found (definition of a folder is ##)
|
|
|
if (findString tempFilename[3] "##") != undefined then
|
|
|
(
|
|
|
--// gets all subfolders of the file
|
|
|
tempFolderFilter = filterString tempFilename[3] "\\"
|
|
|
--// gets all subfolders of the source path
|
|
|
tempOpenFilter = filterString cryTools.cryAnim.UI.batchProcess._v.sourcePath "\\"
|
|
|
--// seperator at the beginning
|
|
|
tempFolderString = " --- "
|
|
|
|
|
|
--// differentiate the subfolders from source and file path
|
|
|
for i = tempOpenFilter.count to tempFolderFilter.count do
|
|
|
--// adds the sub folder to the temporary string
|
|
|
tempFolderString += tempFolderFilter[i] + (if i != tempFolderFilter.count then " \\ " else " ---")
|
|
|
|
|
|
--// filename is now sub folder structure
|
|
|
tempFilename[2] = tempFolderString
|
|
|
|
|
|
--// folder is found
|
|
|
folderFound = true
|
|
|
)
|
|
|
|
|
|
if (cryTools.cryAnim.UI.batchProcess._f.getExtension tempFilename[1]) == "scene" then
|
|
|
sceneFound = true
|
|
|
|
|
|
|
|
|
if folderFound == false then
|
|
|
(
|
|
|
--// if a boneDetection criteria is found
|
|
|
if (boneFound.count > 0) and (boneFound[1] != false) then
|
|
|
(
|
|
|
local tempBoneString = ""
|
|
|
--// goes through the criteria
|
|
|
for f = 1 to boneFound.count do
|
|
|
--// adds the name of the criteria
|
|
|
tempBoneString += boneFound[f].name + (if f != boneFound.count then "; " else "")
|
|
|
|
|
|
--// "Details" is bone criteria
|
|
|
tempDetail = tempBoneString
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--// only bone detected files will be shown
|
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked == true then
|
|
|
(
|
|
|
--// if a bone detection criteria is found
|
|
|
if boneFound.count > 0 then
|
|
|
(
|
|
|
--// if file is visible
|
|
|
if fileFound == true then
|
|
|
--// file will be used
|
|
|
fileUsed = true
|
|
|
)
|
|
|
)
|
|
|
--// if not only bone detected files will be shown
|
|
|
else
|
|
|
(
|
|
|
--// if only not bone detected files be shown
|
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked == true then
|
|
|
(
|
|
|
--// if no bone detect criteria is found or no bone detect criteria is set up
|
|
|
if (boneFound.count == 0) or (boneFound[1] == false) then
|
|
|
(
|
|
|
--// if file is visible
|
|
|
if fileFound == true then
|
|
|
--// file will be used
|
|
|
fileUsed = true
|
|
|
)
|
|
|
)
|
|
|
--// if both, only and no bone detection is checked
|
|
|
else
|
|
|
(
|
|
|
--// if file is visible
|
|
|
if fileFound == true then
|
|
|
--// file will be used
|
|
|
fileUsed = true
|
|
|
)
|
|
|
)
|
|
|
|
|
|
local tempExt = (cryTools.cryAnim.UI.batchProcess._f.getExtension tempFilename[3])
|
|
|
case tempExt of
|
|
|
(
|
|
|
"bip":()
|
|
|
"fbx":()
|
|
|
"max":()
|
|
|
"folder":()
|
|
|
"scene":()
|
|
|
default: (tempDetail = "File type not supported")
|
|
|
)
|
|
|
|
|
|
|
|
|
--// if file is visible or a folder is found
|
|
|
if (fileFound == true) or (folderFound == true) or (sceneFound == true) then
|
|
|
(
|
|
|
--// if the update dialog is not called after the files where processed
|
|
|
if updateFromExport == false then
|
|
|
if boneFound[1] == false or ((cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked == true and boneFound.count > 0) or (cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked == true and boneFound.count == 0) or (cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked == false and cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked == false)) or folderFound == true or sceneFound == true then
|
|
|
--// add the file details to the internal files list
|
|
|
append cryTools.cryAnim.UI.batchProcess._v.exportFiles (batchFileStruct filename:tempFilename[2] path:tempFilename[3] details:tempDetail process:"" used:fileUsed extension:(cryTools.cryAnim.UI.batchProcess._f.getExtension tempFilename[3]) anm:"")
|
|
|
|
|
|
)
|
|
|
)
|
|
|
|
|
|
--// clears the list, fills it with files and sets text extent
|
|
|
cryTools.cryAnim.UI.batchProcess._f.refreshFiles()
|
|
|
--// updates the counter
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.updateDialog" )
|
|
|
)
|
|
|
updateDialog = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.updateDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.generateOutput
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates and fills log file
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.generateOutput = function generateOutput op filepath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// generates the log file and adds time tag
|
|
|
if op == #generate then
|
|
|
(
|
|
|
--// seperates date and time
|
|
|
tempLocalTime = filterString localTime " "
|
|
|
--// gets date
|
|
|
tempDate = tempLocalTime[1]
|
|
|
|
|
|
--// if a different region other then GMT is set
|
|
|
if tempLocalTime.count > 2 then
|
|
|
(
|
|
|
--// seperate hour, minute second
|
|
|
tempTimeArray = filterString tempLocalTime[2] ":"
|
|
|
--// if it is afternoon
|
|
|
if tempLocalTime[3] == "PM" then
|
|
|
--// converts 12h to 24h system
|
|
|
tempTimeArray[1] = tempTimeArray[1] as Integer + 12
|
|
|
|
|
|
--// sets 24h system
|
|
|
tempLocalTime[2] = tempTimeArray[1] as String
|
|
|
|
|
|
--// adds the rest of the time with ":"
|
|
|
for index = 2 to tempTimeArray.count do
|
|
|
tempLocalTime[2] += ":" + tempTimeArray[index]
|
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
--// sets new time
|
|
|
tempTime = tempLocalTime[2]
|
|
|
|
|
|
--// if non GMT is found
|
|
|
if findString tempDate "/" != undefined then
|
|
|
(
|
|
|
--// seperate month,day,year
|
|
|
tempDateFilter = filterString tempDate "/"
|
|
|
--// adds "." to the date and converts to GMT system
|
|
|
tempDate = tempDateFilter[2] + "." + tempDateFilter[1] + "." + tempDateFilter[3]
|
|
|
)
|
|
|
|
|
|
|
|
|
--// seperates hour,minute,second
|
|
|
local timeExtension = filterString tempTime ":"
|
|
|
|
|
|
tempString = ""
|
|
|
--// goes through the list and replaces ":" with "'"
|
|
|
for i = 1 to timeExtension.count do
|
|
|
(
|
|
|
tempString += timeExtension[i]
|
|
|
if i != timeExtension.count then
|
|
|
tempString += "'"
|
|
|
)
|
|
|
|
|
|
--// set new time string
|
|
|
timeExtension = tempString
|
|
|
|
|
|
--// batchProcess folder
|
|
|
local filepath = cryTools.cryTemp + "batchAnimExport"
|
|
|
--// if there is no folder, create one
|
|
|
cryTools.cryAnim.UI.main._f.checkExport #createFolder filepath
|
|
|
|
|
|
--// generates file path out of day and time
|
|
|
filepath += "\\" + tempDate + "_" + timeExtension + ".txt"
|
|
|
|
|
|
--// if file is already there, delete it
|
|
|
try ( deleteFile filepath ) catch()
|
|
|
--// create file and filestream
|
|
|
local fileStream = createFile filepath
|
|
|
|
|
|
|
|
|
--// header of the log file: date, time, source folder and insert it to the file
|
|
|
format "% %\n===================================================================================================================\n\n" localTime cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].labSourceFolder.text to:fileStream
|
|
|
--// cleses file/filestream
|
|
|
close filestream
|
|
|
|
|
|
--// returns the log file path
|
|
|
return filepath
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
--// if a file should be logged
|
|
|
if op != #generate and op != undefined then
|
|
|
(
|
|
|
--// open the file
|
|
|
local filestream = openFile filepath mode:"a+"
|
|
|
--// add the file and status
|
|
|
format "%\n" op to:filestream
|
|
|
--// close file again
|
|
|
close filestream
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.generateOutput" )
|
|
|
)
|
|
|
generateOutput = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.generateOutput function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.updateExtent
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the extent of the text in pixel
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateExtent = function updateExtent =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
newExtent = #(0,0,0)
|
|
|
local lbList = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList
|
|
|
|
|
|
for i = 0 to (lbList.Items.count - 1) do
|
|
|
(
|
|
|
local tempItem = lbList.Items.item i
|
|
|
local textExtent = #(0,0,0)
|
|
|
--// extent of the current filename
|
|
|
textExtent[1] = (getTextExtent (tempItem.SubItems.item 0).text)[1] + 12
|
|
|
textExtent[2] = (getTextExtent (tempItem.SubItems.item 1).text)[1]
|
|
|
textExtent[3] = (getTextExtent (tempItem.SubItems.item 2).text)[1]
|
|
|
|
|
|
for f = 1 to textExtent.count do
|
|
|
--// if the current extent is higher than the result extent
|
|
|
if textExtent[f] > newExtent[f] then
|
|
|
--// result extent is current extent
|
|
|
newExtent[f] = textExtent[f] + 12 --// additional number so entries are not cut
|
|
|
)
|
|
|
|
|
|
for f = 1 to newExtent.count do
|
|
|
if (lbList.Columns.item (f - 1)).width < newExtent[f] then
|
|
|
--// applys the weidth of the column with the text extent
|
|
|
(lbList.Columns.item (f - 1)).width = newExtent[f]
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.updateExtent" )
|
|
|
)
|
|
|
updateExtent = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.updateExtent function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.loadBatchFile = function loadBatchFile filepath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local extension = cryTools.cryAnim.UI.batchProcess._f.getExtension filepath
|
|
|
|
|
|
case extension of
|
|
|
(
|
|
|
--// if a bip file is in queue
|
|
|
"bip":
|
|
|
(
|
|
|
--// if there is no biped character in the scene
|
|
|
if cryTools.cryAnim._f.getBaseBip() == undefined then
|
|
|
(
|
|
|
return "Error: No Biped in Scene " --false
|
|
|
)
|
|
|
--// wait until the biped file is opened
|
|
|
while ((tempBool = (cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "Load Biped File").pressed())[1] != true) do
|
|
|
escapeEnable = true
|
|
|
|
|
|
--// if an error occured while loading the file
|
|
|
if tempBool[2] == false then
|
|
|
return "Error loading file "
|
|
|
)
|
|
|
|
|
|
--// if a fbx file is in queue
|
|
|
"fbx":
|
|
|
(
|
|
|
--// load the NullScene which has nothing in it, just to reset the scene without reset dialog
|
|
|
--loadMaxFile (cryTools.BUIldPathFull + "Tools\\maxscript\\ref\\NullSceneMax8.max")
|
|
|
resetMaxFile #noPrompt
|
|
|
|
|
|
--// imports the fbx file in queue
|
|
|
if (importFile filepath #noPrompt) != true then
|
|
|
return "Error loading file "
|
|
|
|
|
|
--// creates a dummy used for "Object Export" in CryEngine2 exporter
|
|
|
local tempDummy = dummy name:"tempDummy"
|
|
|
|
|
|
|
|
|
|
|
|
--// tries to get the animation range, if it can't, the animation range is in most cases 0,0 which 3dmax can't handle
|
|
|
try
|
|
|
(
|
|
|
--// sets animation range by the key times of the pelvis
|
|
|
animationRange = interval $'Bip01 Pelvis'.pos.controller.keys[1].time $'Bip01 Pelvis'.pos.controller.keys[$'Bip01 Pelvis'.pos.controller.keys.count].time
|
|
|
) catch( animationRange = interval 0 1 )
|
|
|
|
|
|
)
|
|
|
|
|
|
--// if a max file is in queue
|
|
|
"max":
|
|
|
(
|
|
|
try
|
|
|
loadMaxFile filepath useFileUnits:true quiet:true
|
|
|
catch
|
|
|
return "Error loading file "
|
|
|
)
|
|
|
|
|
|
|
|
|
"scene": return ""
|
|
|
|
|
|
--// if nothing useful is in queue
|
|
|
default:
|
|
|
(
|
|
|
return "File extension not supported"
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.loadBatchFile" )
|
|
|
)
|
|
|
loadBatchFile = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.loadBatchFile function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.batchProcess._f.processFiles
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates folder, runs pre-export script and/or exports the file, generates log file
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.processFiles = function processFiles op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// rollout to show the progress of the check/export
|
|
|
rollout exportProgress "Animation Export Progress" width:525 height:32
|
|
|
(
|
|
|
label ProgressInfo "Processing Animation :" pos:[10,4] width:150 height:15
|
|
|
--// animation name
|
|
|
label CurrentAnimation "" pos:[160,4] width:370 height:15
|
|
|
--// queue of animations
|
|
|
label CurrentCount "0 / 0" pos:[470,4] width:80 height:15
|
|
|
--// progress bar for all animations
|
|
|
progressBar MainProgress "" pos:[10,23] width:505 height:7 color:green
|
|
|
)
|
|
|
cryTools.cryAnim.UI.batchProcess.progressDialog = exportProgress
|
|
|
exportProgress = undefined
|
|
|
|
|
|
--// creates the progress dialog
|
|
|
createdialog cryTools.cryAnim.UI.batchProcess.progressDialog
|
|
|
|
|
|
--// generates log file
|
|
|
local filepath = cryTools.cryAnim.UI.batchProcess._f.generateOutput #generate ""
|
|
|
|
|
|
|
|
|
--// maximum files used
|
|
|
maxFiles = 0
|
|
|
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
|
|
|
if (cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension != "folder") and (cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used == true) then
|
|
|
maxFiles += 1
|
|
|
|
|
|
--// counter for files only, not folders
|
|
|
counter = 0
|
|
|
|
|
|
with undo off
|
|
|
(
|
|
|
|
|
|
--// goes through the files/folder list
|
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
|
|
|
(
|
|
|
tempStatus = ""
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process = ""
|
|
|
ready2export = true
|
|
|
--// if entry is visible and not a folder
|
|
|
if (cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used == true) and (cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension != "folder") then
|
|
|
(
|
|
|
--// increment the counter
|
|
|
counter += 1
|
|
|
--// allow loop cancelation
|
|
|
escapeEnable = true
|
|
|
--// save variables
|
|
|
tempCheckBeforeExport = cryTools.checkbeforeexport
|
|
|
tempSuppressWarnings = cryTools.suppresswarnings
|
|
|
tempInterval = animationRange
|
|
|
|
|
|
--// set file to be the next in the loading and exporting queue
|
|
|
cryTools.cryAnim.UI.batchProcess._v.fileQue = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].path
|
|
|
cryTools.cryAnim.UI.batchProcess._v.selectedFile = i
|
|
|
|
|
|
--// changes the progress text to the new file name
|
|
|
cryTools.cryAnim.UI.batchProcess.progressDialog.CurrentAnimation.text = cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename
|
|
|
--// and updates the counter text
|
|
|
cryTools.cryAnim.UI.batchProcess.progressDialog.CurrentCount.text = ((counter as String) + " / " + (maxFiles as String) as String)
|
|
|
|
|
|
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension != "scene" then
|
|
|
(
|
|
|
ready2Export = cryTools.cryAnim.UI.batchProcess._f.loadBatchFile cryTools.cryAnim.UI.batchProcess._v.fileQue
|
|
|
|
|
|
if ready2Export != true and ready2Export != false then
|
|
|
(
|
|
|
tempStatus = ready2Export
|
|
|
ready2Export = false
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
case cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension of
|
|
|
(
|
|
|
"fbx":
|
|
|
(
|
|
|
--// deactivate checks, which show error messages (are not needed here)
|
|
|
cryTools.checkbeforeexport = false
|
|
|
cryTools.suppresswarnings = true
|
|
|
|
|
|
--// opens the CryEngine2 Exporter
|
|
|
UtilityPanel.OpenUtility CryEngine2_Exporter
|
|
|
--// sets the "Object Export" list with the dummy
|
|
|
csexport.set_node_list #(tempDummy)
|
|
|
try csexport.set_bone_list #($Bip01) catch()
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
--// converts the file path to caf path
|
|
|
tempCafPath = (cryTools.cryAnim.UI.main._f.checkExport #ProductionToGame cryTools.cryAnim.UI.batchProcess._v.fileQue)
|
|
|
|
|
|
--// use sub folder structure for export
|
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkKeepSubFolders.checked == true then
|
|
|
(
|
|
|
--// seperate sub folders from the source directory
|
|
|
openFilter = filterString cryTools.cryAnim.UI.batchProcess._v.sourcePath "\\"
|
|
|
--// seperate sub folders from the file directory
|
|
|
fileFilter = filterString cryTools.cryAnim.UI.batchProcess._v.fileQue "\\"
|
|
|
|
|
|
--// new export path is set from the batch export dialog
|
|
|
newCafPath = cryTools.cryAnim.UI.batchProcess._v.exportPath
|
|
|
|
|
|
--// if there is a difference in the folder structure = sub folder of source folder
|
|
|
if (fileFilter.count - (openFilter.count - 1)) > 0 then
|
|
|
(
|
|
|
--// goes through the sub folders
|
|
|
for i = (openFilter.count + 1) to fileFilter.count do
|
|
|
--// adds sub folders to the export path
|
|
|
newCafPath += fileFilter[i] + (if i != fileFilter.count then "\\" else "")
|
|
|
|
|
|
--// adds .caf extension to the path
|
|
|
newCafPath = (substring newCafPath 1 (newCafPath.count - 4)) + ".caf"
|
|
|
)
|
|
|
--// if there is no difference
|
|
|
else
|
|
|
newCafPath = cryTools.cryAnim.UI.batchProcess._v.exportPath + (cryTools.cryAnim.UI.main._f.checkExport #getCaf (cryTools.cryAnim.base.perforce cryTools.cryAnim.UI.batchProcess._v.fileQue #getFilename))
|
|
|
|
|
|
--// set new export path
|
|
|
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = newCafPath
|
|
|
)
|
|
|
--// if no sub folders should be used
|
|
|
else
|
|
|
cryTools.cryAnim.UI.main.loadSave._v.cafSavePath = cryTools.cryAnim.UI.batchProcess._v.exportPath + (cryTools.cryAnim.UI.main._f.checkExport #getCaf (cryTools.cryAnim.base.perforce cryTools.cryAnim.UI.batchProcess._v.fileQue #getFilename))
|
|
|
|
|
|
|
|
|
--// if there is no export path folder
|
|
|
if (getDirectories (cryTools.cryAnim.base.perforce cryTools.cryAnim.UI.main.loadSave._v.cafSavePath #getDirectory)).count == 0 then
|
|
|
--// create one
|
|
|
cryTools.cryAnim.UI.main._f.checkExport #createFolder cryTools.cryAnim.UI.main.loadSave._v.cafSavePath
|
|
|
|
|
|
|
|
|
--// if bone detection is activated
|
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkDetect.checked == true then
|
|
|
(
|
|
|
--// get detected bones list
|
|
|
local tempBoneArray = cryTools.cryAnim.UI.batchProcess._f.getBoneDetection cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename
|
|
|
--// if the list is not empty and if there are bones defined
|
|
|
if (tempBoneArray.count > 0) and (tempBoneArray[1] != false) then
|
|
|
(
|
|
|
--// seperate bones names
|
|
|
local tempBoneFilter = filterString cryTools.cryAnim.UI.batchProcess._v.boneList[tempBoneArray[1].index].bones ";"
|
|
|
--// add the bones to the used bones list
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "lbExport").items = tempBoneFilter
|
|
|
)
|
|
|
--// if no bone is detected
|
|
|
else
|
|
|
--// use Bip01 as default
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "lbExport").items = #("Bip01")
|
|
|
)
|
|
|
|
|
|
|
|
|
--// if there is no locator
|
|
|
if $Locator_Locomotion == undefined then
|
|
|
(
|
|
|
--// if the pelvis and Bip01 position are the same, no locator is in the scene
|
|
|
try
|
|
|
(
|
|
|
if $'Bip01 Pelvis'.transform.pos == $Bip01.transform.pos then
|
|
|
--// set export message
|
|
|
tempStatus += "Error: No Locator found "
|
|
|
)
|
|
|
catch()
|
|
|
)
|
|
|
--// if a locator is in the scene
|
|
|
else
|
|
|
(
|
|
|
--// if the locator has no keys (not animated and in default position from biped)
|
|
|
if $Locator_Locomotion.controller.keys.count == 0 then
|
|
|
--// set export message
|
|
|
tempStatus += "Error: No Locator Keys found "
|
|
|
)
|
|
|
|
|
|
|
|
|
--// if a pre-export script is defined
|
|
|
cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts "1" cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp1
|
|
|
cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts "2" cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp2
|
|
|
cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts "3" cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp3
|
|
|
cryTools.cryAnim.UI.batchProcess._f.executeCustomScripts "4" cryTools.cryAnim.UI.batchProcess.dialog.rollouts[2].ddOp4
|
|
|
|
|
|
tempStatus += cryTools.cryAnim.UI.batchProcess._v.customScriptStatus
|
|
|
|
|
|
cryTools.cryAnim.UI.batchProcess._v.customScriptStatus = ""
|
|
|
|
|
|
--// if no error occured
|
|
|
if tempStatus == "" then
|
|
|
--// set export message
|
|
|
tempStatus = "Done"
|
|
|
|
|
|
--// if bone detection is enabled
|
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkDetect.checked == true then
|
|
|
--// reset export bone list
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "lbExport").items = #("Bip01")
|
|
|
|
|
|
--// restore export checks
|
|
|
cryTools.checkbeforeexport = tempCheckBeforeExport
|
|
|
cryTools.suppresswarnings = tempSuppressWarnings
|
|
|
|
|
|
--// update progress bar
|
|
|
cryTools.cryAnim.UI.batchProcess.progressDialog.MainProgress.value = (100 * i) / maxFiles
|
|
|
|
|
|
--// add file to the log
|
|
|
cryTools.cryAnim.UI.batchProcess._f.generateOutput (cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].filename + " | " + cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].details + " | " + tempStatus) filepath
|
|
|
|
|
|
--// update export status of the file
|
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process = tempStatus
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
--// update the whole dialog with export status
|
|
|
--cryTools.cryAnim.UI.batchProcess._f.updateDialog updateFromExport:true
|
|
|
cryTools.cryAnim.UI.batchProcess._f.refreshFiles()
|
|
|
--// reset file queue
|
|
|
cryTools.cryAnim.UI.batchProcess._v.fileQue = undefined
|
|
|
--// reset source path
|
|
|
cryTools.cryAnim.UI.main.loadSave._v.bipOpenPath = cryTools.cryAnim.UI.main._v.bipWorkingDir + "*.bip"
|
|
|
--// kill progress dialog
|
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.progressDialog
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.processFiles" )
|
|
|
)
|
|
|
processFiles = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.processFiles function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.selectItem
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- selects or returns the used item in the filename
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.selectItem = function selectItem itemSelect op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
case op of
|
|
|
(
|
|
|
#set:
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.models._v.itemList.count > 0 then
|
|
|
(
|
|
|
local itemArray = cryTools.cryAnim.UI.main.models._v.itemList
|
|
|
|
|
|
try
|
|
|
(
|
|
|
local tempNodeForDelete = ($_IC_* as array)
|
|
|
for i = 1 to tempNodeForDelete.count do
|
|
|
delete tempNodeForDelete[i]
|
|
|
)catch()
|
|
|
|
|
|
if itemArray[itemSelect].name != "" then
|
|
|
(
|
|
|
if $Bip01 != undefined then
|
|
|
(
|
|
|
local itemUsed = #()
|
|
|
local itemFound = #()
|
|
|
|
|
|
for i = 1 to itemArray.count do
|
|
|
(
|
|
|
if i == itemSelect then
|
|
|
(
|
|
|
for d = 1 to itemArray[i].model.count do
|
|
|
(
|
|
|
local tempNode = getNodeByName itemArray[i].model[d]
|
|
|
|
|
|
if tempNode == undefined then
|
|
|
(
|
|
|
mergeMAXfile (cryTools.BuildPathFull + "tools\\maxscript\\ref\\weapon_positions.max") #(itemArray[itemSelect].model[d]) #alwaysReparent #skipDups #useMergedMtlDups
|
|
|
try
|
|
|
(
|
|
|
local tempNode = getNodebyName itemArray[itemSelect].model
|
|
|
|
|
|
append itemUsed tempNode
|
|
|
append itemFound d
|
|
|
)catch()
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if (findItem itemFound d) == 0 then
|
|
|
(
|
|
|
append itemUsed tempNode
|
|
|
append itemFound d
|
|
|
)
|
|
|
for f = 1 to itemArray[i].model.count do
|
|
|
(
|
|
|
if f != d and (findItem itemFound f) == 0 then
|
|
|
(
|
|
|
if itemArray[i].model[d] == itemArray[i].model[f] then
|
|
|
(
|
|
|
local tempCopy = (cryTools.cryAnim._f.createSnapshot object:(getNodeByName itemArray[i].model[f]) )[1]
|
|
|
tempCopy.name = "_IC_" + tempCopy.name
|
|
|
tempCopy.isFrozen = (getNodeByName itemArray[i].model[f]).isFrozen
|
|
|
|
|
|
append itemUsed tempCopy
|
|
|
append itemFound f
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
for d = 1 to itemArray[i].model.count do
|
|
|
(
|
|
|
local tempNode = getNodeByName itemArray[i].model[d]
|
|
|
|
|
|
if tempNode != undefined then
|
|
|
(
|
|
|
if tempNode.isHidden == false then
|
|
|
tempNode.isHidden = true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
for i = 1 to itemUsed.count do
|
|
|
(
|
|
|
if itemUsed[i].isHidden == true then
|
|
|
itemUsed[i].isHidden = false
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i = 1 to itemArray[itemSelect].model.count do
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (local nodeRef = getNodeByName itemArray[itemSelect].reference[i]) != undefined then
|
|
|
(
|
|
|
in coordsys nodeRef
|
|
|
(
|
|
|
if (local nodeParent = getNodeByName itemArray[itemSelect].parent[i]) != undefined then
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
itemUsed[i].transform = nodeParent.transform
|
|
|
itemUsed[i].parent = nodeParent
|
|
|
)catch()
|
|
|
|
|
|
with animate off
|
|
|
(
|
|
|
nodeParent.rotation = itemArray[itemSelect].rotation[i]
|
|
|
nodeParent.position = itemArray[itemSelect].position[i]
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)catch()
|
|
|
)
|
|
|
|
|
|
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Models" "ddItemSelect").selection = itemSelect
|
|
|
return true
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
return false
|
|
|
)
|
|
|
|
|
|
#getIndex:
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.models._v.itemList.count > 0 then
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.models._v.itemList.count do
|
|
|
(
|
|
|
local tempModels = cryTools.cryAnim.UI.main.models._v.itemList[i].model
|
|
|
local found = false
|
|
|
for d = 1 to tempModels.count do
|
|
|
(
|
|
|
local tempNode = getNodeByName tempModels[d]
|
|
|
if tempNode != undefined then
|
|
|
(
|
|
|
if tempNode.isHidden == false then
|
|
|
found = true
|
|
|
else
|
|
|
found = false
|
|
|
)
|
|
|
)
|
|
|
if found == true then
|
|
|
return i
|
|
|
)
|
|
|
return 1
|
|
|
)
|
|
|
else
|
|
|
return 0
|
|
|
)
|
|
|
|
|
|
#getList:
|
|
|
(
|
|
|
local itemArray = cryTools.cryAnim.base.iniFile #get #items
|
|
|
|
|
|
try
|
|
|
(
|
|
|
--// gets ini info
|
|
|
if itemArray != undefined then
|
|
|
(
|
|
|
tempListArray = #()
|
|
|
tempListArray2 = #()
|
|
|
|
|
|
--// gets the array of properties in the structure of itemArray
|
|
|
local subItemArray = getPropNames itemArray[1]
|
|
|
|
|
|
|
|
|
|
|
|
for i = 1 to itemArray.count do
|
|
|
(
|
|
|
if itemArray[i].name != "" then
|
|
|
(
|
|
|
itemArray[i].model = filterString itemArray[i].model ";"
|
|
|
itemArray[i].reference = filterString itemArray[i].reference ";"
|
|
|
itemArray[i].parent = filterString itemArray[i].parent ";"
|
|
|
itemArray[i].position = filterString itemArray[i].position ";"
|
|
|
itemArray[i].rotation = filterString itemArray[i].rotation ";"
|
|
|
|
|
|
for f = 1 to itemArray[i].model.count do
|
|
|
(
|
|
|
itemArray[i].position[f] = execute (itemArray[i].position[f])
|
|
|
itemArray[i].rotation[f] = execute (itemArray[i].rotation[f])
|
|
|
)
|
|
|
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return itemArray
|
|
|
)
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
itemArray = #()
|
|
|
return itemArray
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.selectItem" )
|
|
|
)
|
|
|
selectItem = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.selectItem function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.selectByNameFilterNode
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- checks, if the node is not an biped object
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.selectByNameFilterNode = function selectByNameFilterNode obj =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if obj.classID[1] != 37157 then
|
|
|
return true
|
|
|
else
|
|
|
return false
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.selectByNameFilterNode" )
|
|
|
)
|
|
|
selectByNameFilterNode = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.selectByNameFilterNode function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.selectByNameFilterParent
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- checks, if the node is not tempObj
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.selectByNameFilterParent = function selectByNameFilterParent objParent =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if objParent.name != tempObj.name then
|
|
|
return true
|
|
|
else
|
|
|
return false
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.selectByNameFilterParent" )
|
|
|
)
|
|
|
selectByNameFilterParent = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.selectByNameFilterParent function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.setVisible
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns true, if the selected index should be visible
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.setVisible = function setVisible index =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
tempArray = cryTools.cryAnim.base.iniFile #get #models
|
|
|
if (tempArray != "") and (tempArray != undefined) then
|
|
|
(
|
|
|
if tempArray[index] != undefined then
|
|
|
return true
|
|
|
else
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.setVisible" )
|
|
|
)
|
|
|
setVisible = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.setVisible function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.getEntries
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns an array of model entries (filter function)
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.getEntries = function getEntries index entriesArray =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if entriesArray[index] != undefined then
|
|
|
return entriesArray[index].name
|
|
|
else
|
|
|
return ""
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.getEntries" )
|
|
|
)
|
|
|
getEntries = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.getEntries function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.loadModel
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- loads the model specified in "entry"
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.loadModel = function loadModel entry =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempVar = loadMaxFile entry.path
|
|
|
if tempVar != false then
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
$'Bip01 R ForeTwist'.parent = $'Bip01 R Forearm'
|
|
|
$'Bip01 L ForeTwist'.parent = $'Bip01 L Forearm'
|
|
|
print "TwistBones reparented..."
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
print "No Biped Loaded..."
|
|
|
)
|
|
|
|
|
|
select $Bip01
|
|
|
setCommandPanelTaskMode #motion
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
messageBox ("File: " + entry.path + " not found") title:"Error Loading Model"
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.loadModel" )
|
|
|
)
|
|
|
loadModel = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.loadModel function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.updateExtent
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the extent of the list view in editItemList
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.updateExtent = function updateExtent =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local newExtent = #(0,0,0,0,0,0,0,0)
|
|
|
local columnExtent = #(0,0,0,0,0,0,0,0)
|
|
|
|
|
|
local lbItems = cryTools.cryAnim.UI.main.models.editItemList.lbItems
|
|
|
|
|
|
|
|
|
for d = 0 to (lbItems.Columns.count - 1) do
|
|
|
(
|
|
|
columnExtent[d+1] = (getTextExtent (lbItems.Columns.item d).text)[1]
|
|
|
|
|
|
if columnExtent[d+1] > newExtent[d+1] then
|
|
|
newExtent[d+1] = columnExtent[d+1] + 12
|
|
|
)
|
|
|
|
|
|
|
|
|
for i = 0 to (lbItems.Items.count - 1) do
|
|
|
(
|
|
|
local tempItem = lbItems.Items.item i
|
|
|
local textExtent = #(0,0,0,0,0,0,0,0)
|
|
|
|
|
|
--// extent of the current filename
|
|
|
for d = 0 to (lbItems.Columns.count - 1) do
|
|
|
try ( textExtent[d+1] = (getTextExtent (tempItem.SubItems.item d).text)[1] + 12) catch()
|
|
|
|
|
|
|
|
|
|
|
|
for f = 1 to textExtent.count do
|
|
|
(
|
|
|
--// if the current extent is higher than the result extent
|
|
|
if textExtent[f] > newExtent[f] then
|
|
|
--// result extent is current extent
|
|
|
newExtent[f] = textExtent[f] --+ 12 --// additional number so entries are not cut
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
for f = 1 to newExtent.count do
|
|
|
--// applys the weidth of the column with the text extent
|
|
|
(lbItems.Columns.item (f - 1)).width = newExtent[f]
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.updateExtent" )
|
|
|
)
|
|
|
updateExtent = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.updateExtent function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.sortList
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- sorts the list view in editItemList
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.sortList = function sortList =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local lbItems = cryTools.cryAnim.UI.main.models.editItemList.lbItems
|
|
|
local newArray = #()
|
|
|
local oldArray = #()
|
|
|
local sortedArray = #()
|
|
|
if classOf lbItems == ActiveXControl then
|
|
|
(
|
|
|
local maxCount = lbItems.ListItems.count
|
|
|
local forStart = 1
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
local maxCount = lbItems.Items.count - 1
|
|
|
local forStart = 0
|
|
|
)
|
|
|
|
|
|
for i = forStart to maxCount do
|
|
|
(
|
|
|
if classOf lbItems == ActiveXControl then
|
|
|
append oldArray (#(lbItems.ListItems[i].text, lbItems.ListItems[i].ListSubItems[1].text, lbItems.ListItems[i].ListSubItems[2].text, lbItems.ListItems[i].ListSubItems[3].text, lbItems.ListItems[i].ListSubItems[4].text, lbItems.ListItems[i].ListSubItems[5].text, lbItems.ListItems[i].ListSubItems[6].text, lbItems.ListItems[i].ListSubItems[7].text))
|
|
|
else
|
|
|
append oldArray (#((lbItems.Items.item i).text, ((lbItems.Items.item i).SubItems.item 1).text, ((lbItems.Items.item i).SubItems.item 2).text, ((lbItems.Items.item i).SubItems.item 3).text, ((lbItems.Items.item i).SubItems.item 4).text, ((lbItems.Items.item i).SubItems.item 5).text, ((lbItems.Items.item i).SubItems.item 6).text, ((lbItems.Items.item i).SubItems.item 7).text))
|
|
|
)
|
|
|
|
|
|
for i = 1 to oldArray.count do
|
|
|
append newArray oldArray[i][1]
|
|
|
|
|
|
sort newArray
|
|
|
|
|
|
for i = 1 to newArray.count do
|
|
|
(
|
|
|
findEntry = newArray[i]
|
|
|
entryFound = 0
|
|
|
for f = 1 to oldArray.count do
|
|
|
(
|
|
|
if oldArray[f][1] == newArray[i] then
|
|
|
(
|
|
|
append sortedArray oldArray[f]
|
|
|
sortedArray[sortedArray.count][1] = newArray[i]
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if classOf lbItems != ActiveXControl then
|
|
|
(
|
|
|
lbItems.BeginUpdate()
|
|
|
lbItems.Items.clear()
|
|
|
)
|
|
|
else
|
|
|
lbItems.ListItems.clear()
|
|
|
|
|
|
for i = 1 to newArray.count do
|
|
|
(
|
|
|
if classOf lbItems == ActiveXControl then
|
|
|
(
|
|
|
local tempItem = lbItems.ListItems.Add text:sortedArray[i][1]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][2]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][3]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][4]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][5]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][6]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][7]
|
|
|
tempItem.listSubItems.Add text:sortedArray[i][8]
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
local tempItem = lbItems.Items.Add sortedArray[i][1]
|
|
|
tempItem.SubItems.Add sortedArray[i][2]
|
|
|
tempItem.SubItems.Add sortedArray[i][3]
|
|
|
tempItem.SubItems.Add sortedArray[i][4]
|
|
|
tempItem.SubItems.Add sortedArray[i][5]
|
|
|
tempItem.SubItems.Add sortedArray[i][6]
|
|
|
tempItem.SubItems.Add sortedArray[i][7]
|
|
|
tempItem.SubItems.Add sortedArray[i][8]
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if classOf lbItems != ActiveXControl then
|
|
|
lbItems.EndUpdate()
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.sortList" )
|
|
|
)
|
|
|
sortList = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.sortList function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.models._f.updateExtentModel
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the extent of the list view in editModelList
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.models._f.updateExtentModel = function updateExtentModel =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local newExtent = #(0,0)
|
|
|
local lbModels = cryTools.cryAnim.UI.main.models.editModelList.lbModels
|
|
|
|
|
|
for i = 0 to (lbModels.Items.count - 1) do
|
|
|
(
|
|
|
local tempItem = lbModels.Items.item i
|
|
|
local textExtent = #(0,0)
|
|
|
--// extent of the current filename
|
|
|
for d = 1 to lbModels.Columns.count do
|
|
|
textExtent[d] = (getTextExtent (tempItem.SubItems.item (d - 1)).text)[1]-- + (if d == 1 then 12 else 0)
|
|
|
|
|
|
|
|
|
for f = 1 to textExtent.count do
|
|
|
--// if the current extent is higher than the result extent
|
|
|
if textExtent[f] > newExtent[f] then
|
|
|
--// result extent is current extent
|
|
|
newExtent[f] = textExtent[f] + 12 --// additional number so entries are not cut
|
|
|
)
|
|
|
|
|
|
for f = 1 to newExtent.count do
|
|
|
if (lbModels.Columns.item (f - 1)).width < newExtent[f] then
|
|
|
--// applys the weidth of the column with the text extent
|
|
|
(lbModels.Columns.item (f - 1)).width = newExtent[f]
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.models._f.updateExtentModel" )
|
|
|
)
|
|
|
updateExtentModel = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.models._f.updateExtentModel function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.operation._f.updateDialog
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the dialog of operationRO
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.operation._f.updateDialog = function updateDialog output:unsupplied =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local ddOperationItems = #( "Planted Key", "Sliding Key", "Free Key", "--------------------------------------------", "Move","Move/Rotate","--------------------------------------------", "Move to Floor","Reset Rotation","Rotate Anim","--------------------------------------------", "Copy" , "Paste", "--------------------------------------------","Bip to [0,0]","Bip to [0,0,0]" )
|
|
|
local ddOperationToItems = #( "Snapshot", "Pivot Point" )
|
|
|
|
|
|
case output of
|
|
|
(
|
|
|
#ddOp:
|
|
|
return ddOperationItems
|
|
|
#ddOpTo:
|
|
|
return ddOperationToItems
|
|
|
)
|
|
|
|
|
|
|
|
|
local ddSel = cryTools.cryAnim.UI.main._f.getUI "Target" "ddSelection"
|
|
|
local ddOp = cryTools.cryAnim.UI.main._f.getUI "Operation" "ddOperation"
|
|
|
local ddOpTo = cryTools.cryAnim.UI.main._f.getUI "Operation" "ddOperationTo"
|
|
|
local spnDistance = cryTools.cryAnim.UI.main._f.getUI "Operation" "spnDistance"
|
|
|
local spnDirection = cryTools.cryAnim.UI.main._f.getUI "Operation" "spnDirection"
|
|
|
local spnSteps = cryTools.cryAnim.UI.main._f.getUI "Operation" "spnSteps"
|
|
|
local labOp = cryTools.cryAnim.UI.main._f.getUI "Operation" "labOperation"
|
|
|
local labDistanceDirection = cryTools.cryAnim.UI.main._f.getUI "Operation" "labDistanceDirection"
|
|
|
local gbOp = cryTools.cryAnim.UI.main._f.getUI "Operation" "gbOperation"
|
|
|
local btnApply = cryTools.cryAnim.UI.main._f.getUI "Operation" "btnApply"
|
|
|
local btnApplyBeginEnd = cryTools.cryAnim.UI.main._f.getUI "Operation" "btnApplyBeginEnd"
|
|
|
local btnApplyRange = cryTools.cryAnim.UI.main._f.getUI "Operation" "btnApplyRange"
|
|
|
local operationRO = cryTools.cryAnim.UI.main._f.getUI "Operation" ""
|
|
|
|
|
|
|
|
|
local ddOperationHidePos = 129
|
|
|
local ddOperationShowPos = 170
|
|
|
local ddSelectionChange = (cryTools.cryAnim.UI.main._f.getUI "Target" "labChange").text
|
|
|
local ddSelIndex = #(5,6,8,10,13)
|
|
|
|
|
|
if ddSel.selection < 2 then
|
|
|
(
|
|
|
ddOp.items = ddOperationItems
|
|
|
|
|
|
if (findItem ddSelIndex ddOp.selection) != 0 then
|
|
|
(
|
|
|
if ddOp.selection == 5 or ddOp.selection == 6 then
|
|
|
ddOpTo.items = #( "Snapshot", "Pivot Point" )
|
|
|
else
|
|
|
ddOpTo.items = #( "Transform", "Position", "Rotation" )
|
|
|
|
|
|
if ddOp.selection == 8 or ddOp.selection == 10 then
|
|
|
(
|
|
|
|
|
|
labDistanceDirection.visible = true
|
|
|
ddOpTo.visible = false
|
|
|
labOp.visible = false
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ddOpTo.visible = true
|
|
|
labOp.visible = true
|
|
|
labDistanceDirection.visible = false
|
|
|
)
|
|
|
|
|
|
if ddOp.selection == 8 then
|
|
|
spnDistance.visible = true
|
|
|
else
|
|
|
spnDistance.visible = false
|
|
|
|
|
|
if ddOp.selection == 10 then
|
|
|
spnDirection.visible = true
|
|
|
else
|
|
|
spnDirection.visible = false
|
|
|
|
|
|
|
|
|
btnApply.enabled = true
|
|
|
|
|
|
btnApply.pos.y = ddOperationShowPos
|
|
|
btnApplyBeginEnd.pos.y = ddOperationShowPos
|
|
|
btnApplyRange.pos.y = ddOperationShowPos
|
|
|
gbOp.height = ( ddOperationShowPos - gbOp.pos.y ) + 28
|
|
|
operationRO.height = ddOperationShowPos + 32
|
|
|
|
|
|
spnSteps.enabled = true
|
|
|
btnApplyBeginEnd.enabled = true
|
|
|
|
|
|
|
|
|
if ddOp.selection == 8 then
|
|
|
(
|
|
|
labDistanceDirection.text = "Floor Distance :"
|
|
|
local tempVar = cryTools.cryAnim._f.moveToFloor getHeight:true
|
|
|
if tempVar != undefined then
|
|
|
if (queryBox "Get Height from Selection?" title:"Move to Floor") == true then
|
|
|
spnDistance.value = tempVar
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
labDistanceDirection.text = "Direction :"
|
|
|
spnSteps.enabled = false
|
|
|
btnApplyBeginEnd.enabled = false
|
|
|
)
|
|
|
|
|
|
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ddOpTo.visible = false
|
|
|
labOp.visible = false
|
|
|
spnDistance.visible = false
|
|
|
spnDirection.visible = false
|
|
|
labDistanceDirection.visible = false
|
|
|
|
|
|
if ddOp.selection == 10 then
|
|
|
(
|
|
|
spnSteps.enabled = false
|
|
|
btnApplyBeginEnd.enabled = false
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
spnSteps.enabled = true
|
|
|
btnApplyBeginEnd.enabled = true
|
|
|
)
|
|
|
|
|
|
btnApply.pos.y = ddOperationHidePos
|
|
|
btnApplyBeginEnd.pos.y = ddOperationHidePos
|
|
|
btnApplyRange.pos.y = ddOperationHidePos
|
|
|
gbOp.height = ( ddOperationHidePos - gbOp.pos.y ) + 28
|
|
|
operationRO.height = ddOperationHidePos + 32
|
|
|
)
|
|
|
|
|
|
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ddOp.items = #( "Move", "Line" )
|
|
|
if ddOp.selection == 0 then ddOp.selection = 1
|
|
|
|
|
|
if ddSelectionChange == "2:Changed" then
|
|
|
(
|
|
|
ddOp.selection = 1
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Target" "labChange").text = "2:Unchanged"
|
|
|
)
|
|
|
|
|
|
|
|
|
spnSteps.enabled = true
|
|
|
btnApplyBeginEnd.enabled = true
|
|
|
|
|
|
ddOpTo.visible = false
|
|
|
labOp.visible = false
|
|
|
|
|
|
spnDistance.visible = false
|
|
|
spnDirection.visible = false
|
|
|
labDistanceDirection.visible = false
|
|
|
|
|
|
|
|
|
btnApply.pos.y = ddOperationHidePos
|
|
|
btnApplyBeginEnd.pos.y = ddOperationHidePos
|
|
|
btnApplyRange.pos.y = ddOperationHidePos
|
|
|
gbOp.height = ( ddOperationHidePos - gbOp.pos.y ) + 28
|
|
|
operationRO.height = ddOperationHidePos + 32
|
|
|
|
|
|
|
|
|
if ddOp.selection == 2 then
|
|
|
(
|
|
|
btnApply.enabled = false
|
|
|
cryTools.cryAnim.UI.main.target._f.updateDDSelection op:false
|
|
|
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
btnApply.enabled = true
|
|
|
cryTools.cryAnim.UI.main.target._f.updateDDSelection op:true
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.operation._f.updateDialog" )
|
|
|
)
|
|
|
updateDialog = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.operation._f.updateDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.operation._f.getSelectedAxis
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns an array of axis which are checked in targetRO
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.operation._f.getSelectedAxis = function getSelectedAxis op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local posAxis = #(false, false, false, false)
|
|
|
local rotAxis = #(false, false, false, false)
|
|
|
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkX.checked == true then posAxis[1] = true
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkY.checked == true then posAxis[2] = true
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkZ.checked == true then posAxis[3] = true
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkPosOffset.checked == true then posAxis[4] = true
|
|
|
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkXRot.checked == true then rotAxis[1] = true
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkYRot.checked == true then rotAxis[2] = true
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkZRot.checked == true then rotAxis[3] = true
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Target" "").chkRotOffset.checked == true then rotAxis[4] = true
|
|
|
|
|
|
case op of
|
|
|
(
|
|
|
#pos: return posAxis
|
|
|
#rot: return rotAxis
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.operation._f.getSelectedAxis" )
|
|
|
)
|
|
|
getSelectedAxis = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.operation._f.updateDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.operation._f.align
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- align the selected node to the list node
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.operation._f.align = function align tempSel tempNode snapshots:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local posAxis = cryTools.cryAnim.UI.main.operation._f.getSelectedAxis #pos
|
|
|
local rotAxis = cryTools.cryAnim.UI.main.operation._f.getSelectedAxis #rot
|
|
|
|
|
|
for i = 1 to tempSel.count do
|
|
|
(
|
|
|
local tempPos = tempSel[i].transform.pos
|
|
|
local tempRot = tempSel[i].transform.rotation as eulerangles
|
|
|
|
|
|
if cryTools.cryAnim._v.various[35] != undefined then
|
|
|
(
|
|
|
with undo off
|
|
|
(
|
|
|
in coordsys tempNode
|
|
|
(
|
|
|
snapshots[i].rotation = cryTools.cryAnim._v.various[35][i].rotation
|
|
|
snapshots[i].pos = cryTools.cryAnim._v.various[35][i].position
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if rotAxis[4] == false then
|
|
|
(
|
|
|
if rotAxis[1] == true then tempRot.x = (tempNode.transform.rotation as eulerangles).x
|
|
|
if rotAxis[2] == true then tempRot.y = (tempNode.transform.rotation as eulerangles).y
|
|
|
if rotAxis[3] == true then tempRot.z = (tempNode.transform.rotation as eulerangles).z
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if rotAxis[1] == true then tempRot.x = (snapshots[i].transform.rotation as eulerangles).x
|
|
|
if rotAxis[2] == true then tempRot.y = (snapshots[i].transform.rotation as eulerangles).y
|
|
|
if rotAxis[3] == true then tempRot.z = (snapshots[i].transform.rotation as eulerangles).z
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if posAxis[4] == false then
|
|
|
(
|
|
|
if posAxis[1] == true then tempPos[1] = tempNode.transform.pos[1]
|
|
|
if posAxis[2] == true then tempPos[2] = tempNode.transform.pos[2]
|
|
|
if posAxis[3] == true then tempPos[3] = tempNode.transform.pos[3]
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if posAxis[1] == true then tempPos[1] = snapshots[i].transform.pos[1]
|
|
|
if posAxis[2] == true then tempPos[2] = snapshots[i].transform.pos[2]
|
|
|
if posAxis[3] == true then tempPos[3] = snapshots[i].transform.pos[3]
|
|
|
)
|
|
|
|
|
|
local tempMatrix = snapshots[i].transform
|
|
|
tempMatrix.rotation = tempRot
|
|
|
tempMatrix.pos = tempPos
|
|
|
|
|
|
|
|
|
try tempSel[i].rotation = tempMatrix.rotation
|
|
|
catch biped.setTransform tempSel[i] #rotation tempMatrix.rotation true
|
|
|
|
|
|
try tempSel[i].pos = tempMatrix.pos
|
|
|
catch biped.setTransform tempSel[i] #pos tempMatrix.pos true
|
|
|
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.operation._f.align" )
|
|
|
)
|
|
|
align = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.operation._f.align function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.operation._f.alignLine
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- align the selected node to the list node in a line
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.operation._f.alignLine = function alignLine startPos endPos axis tempSel tempNode =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local diffAll = endPos[axis] - startPos[axis]
|
|
|
local diffSel = tempNode.transform.pos[axis] - startPos[axis]
|
|
|
|
|
|
local tempPos = 0
|
|
|
try ( tempPos = biped.getTransform tempNode #pos )
|
|
|
catch ( tempPos = tempNode.pos )
|
|
|
|
|
|
|
|
|
|
|
|
local time = diffSel / diffAll
|
|
|
|
|
|
local newPos = (endPos * time) + (startPos * (1 - time))
|
|
|
|
|
|
try
|
|
|
biped.setTransform tempSel #pos newPos true
|
|
|
catch
|
|
|
tempSel.pos = newPos
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.operation._f.alignLine" )
|
|
|
)
|
|
|
alignLine = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.operation._f.alignLine function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.operation._f.applyOperation
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- applies the in operationRO selected operation to the selected node
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.operation._f.applyOperation = function applyOperation operation opTo start end steps =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local ddSelection = cryTools.cryAnim.UI.main._f.getUI "Target" "ddSelection"
|
|
|
local ddOp = cryTools.cryAnim.UI.main._f.getUI "Operation" "ddOperation"
|
|
|
local ddOpTo = cryTools.cryAnim.UI.main._f.getUI "Operation" "ddOperationTo"
|
|
|
|
|
|
|
|
|
if ddSelection.selection != 1 then
|
|
|
snapshots = cryTools.cryAnim._f.createSnapshot()
|
|
|
|
|
|
|
|
|
axis = 0
|
|
|
local startPos = [0,0,0]
|
|
|
local endPos = [0,0,0]
|
|
|
|
|
|
|
|
|
if (ddSelection.selection > 2) and (ddOp.selection == 2) then
|
|
|
(
|
|
|
tempNode = $
|
|
|
|
|
|
sliderTime = animationRange.start
|
|
|
startPos = tempNode.transform.pos
|
|
|
sliderTime = animationRange.end
|
|
|
endPos = tempNode.transform.pos
|
|
|
tempStart = 0
|
|
|
|
|
|
if startPos == endPos then
|
|
|
(
|
|
|
messageBox ("Start point is equal to End Point") title:"Line Operation"
|
|
|
return false
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i = 1 to 3 do
|
|
|
(
|
|
|
local tempStartPos = startPos[i]
|
|
|
local tempEndPos = endPos[i]
|
|
|
|
|
|
if tempStartPos < 0 then tempStartPos -= tempStartPos * 2
|
|
|
if tempEndPos < 0 then tempEndPos -= tempEndPos * 2
|
|
|
|
|
|
|
|
|
|
|
|
local tempPos = tempEndPos - tempStartPos
|
|
|
if tempPos > tempStart then
|
|
|
(
|
|
|
axis = i
|
|
|
tempStart = tempPos
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if operation == 10 then
|
|
|
(
|
|
|
local animDir = (cryTools.cryAnim.UI.main._f.getUI "Operation" "spnDirection").value
|
|
|
local undoString = "rotate " + animDir as String
|
|
|
if start == end then
|
|
|
undo undoString on ( cryTools.cryAnim._f.rotateAnim animDir )
|
|
|
else
|
|
|
(
|
|
|
undo undoString on ( cryTools.cryAnim._f.rotateAnim animDir range:true )
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
|
|
|
saveSliderTime = sliderTime
|
|
|
sliderTime = start
|
|
|
|
|
|
if selection.count == 1 then
|
|
|
disableSceneRedraw()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tempIndex = 1
|
|
|
if operation == 12 then
|
|
|
(
|
|
|
deleteFile cryTools.cryAnim.UI.main._v.tempINIPath
|
|
|
cryTools.cryAnim._v.transformList = #()
|
|
|
for f = 1 to $selection.count do
|
|
|
append cryTools.cryAnim._v.transformList (#())
|
|
|
)
|
|
|
|
|
|
|
|
|
if selection.count == 0 then
|
|
|
(
|
|
|
print "Nothing selected."
|
|
|
return false
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for i = start to end by steps do
|
|
|
(
|
|
|
escapeEnable = true
|
|
|
|
|
|
sliderTime = i
|
|
|
case operation of
|
|
|
(
|
|
|
1:
|
|
|
(
|
|
|
if ddSelection.selection == 1 then
|
|
|
(
|
|
|
undo "make planted key" on
|
|
|
(
|
|
|
for obj in selection do
|
|
|
(
|
|
|
tempArray = obj.controller.keys
|
|
|
keyIndex = 0
|
|
|
for i = 1 to tempArray.count do
|
|
|
if tempArray[i].time == sliderTime then keyIndex = i
|
|
|
try
|
|
|
(
|
|
|
tempKey = biped.getKey obj.controller keyIndex
|
|
|
if tempKey.ikSpace != 1 or tempKey.ikJoinedPivot == false or tempKey.ikBlend != 1.0 then
|
|
|
biped.setPlantedKey obj
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
try ( biped.setPlantedKey obj ) catch ( )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
undo "align biped object" on
|
|
|
cryTools.cryAnim.UI.main.operation._f.align (getCurrentSelection()) (getNodeByName ddSelection.selected) snapshots:snapshots
|
|
|
)
|
|
|
)
|
|
|
2:
|
|
|
(
|
|
|
if ddSelection.selection == 1 then
|
|
|
(
|
|
|
undo "make sliding key" on
|
|
|
(
|
|
|
for obj in selection do
|
|
|
(
|
|
|
local tempArray = obj.controller.keys
|
|
|
local keyIndex = 0
|
|
|
for i = 1 to tempArray.count do
|
|
|
if tempArray[i].time == sliderTime then keyIndex = i
|
|
|
|
|
|
try
|
|
|
(
|
|
|
local tempKey = biped.getKey obj.controller keyIndex
|
|
|
if tempKey.ikSpace != 1 or tempKey.ikJoinedPivot == true or tempKey.ikBlend != 1.0 then
|
|
|
biped.setSlidingKey obj
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
try ( biped.setSlidingKey obj ) catch ( )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
undo "lineOperation" on
|
|
|
(
|
|
|
for obj in selection do
|
|
|
if obj.isHidden == false then
|
|
|
cryTools.cryAnim.UI.main.operation._f.alignLine startPos endPos axis obj (getNodeByName ddSelection.selected)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
3:
|
|
|
(
|
|
|
undo "make free key" on
|
|
|
(
|
|
|
for obj in selection do
|
|
|
(
|
|
|
tempArray = obj.controller.keys
|
|
|
keyIndex = 0
|
|
|
for i = 1 to tempArray.count do
|
|
|
if tempArray[i].time == sliderTime then keyIndex = i
|
|
|
|
|
|
try
|
|
|
(
|
|
|
tempKey = biped.getKey obj.controller keyIndex
|
|
|
if tempKey.ikSpace != 0 or tempKey.ikJoinedPivot == false or tempKey.ikBlend != 0.0 then
|
|
|
biped.setFreeKey obj
|
|
|
)
|
|
|
catch
|
|
|
(
|
|
|
try ( biped.setFreeKey obj ) catch ( )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
5:
|
|
|
(
|
|
|
case ddOpTo.selection of
|
|
|
(
|
|
|
1:( undo "move to snapshot" on ( cryTools.cryAnim._f.moveBipPart() ) )
|
|
|
2:( undo "move to pivot point" on ( cryTools.cryAnim._f.moveBipPartPivPoint() ) )
|
|
|
)
|
|
|
)
|
|
|
6:
|
|
|
(
|
|
|
case ddOpTo.selection of
|
|
|
(
|
|
|
1:( undo "move/rotate to snapshot" on ( cryTools.cryAnim._f.moveRotBipPart() ) )
|
|
|
2:( undo "move/rotate to pivot point" on ( cryTools.cryAnim._f.moveRotBipPartPivPoint() ) )
|
|
|
)
|
|
|
)
|
|
|
|
|
|
8:( undo "move to floor" on ( cryTools.cryAnim._f.moveToFloor value:((cryTools.cryAnim.UI.main._f.getUI "Operation" "spnDistance").value) ) )
|
|
|
9:( undo "reset rotation" on ( cryTools.cryAnim._f.resetRotation() ) )
|
|
|
|
|
|
12:
|
|
|
(
|
|
|
for d = 1 to $selection.count do
|
|
|
(
|
|
|
setINISetting cryTools.cryAnim.UI.main._v.tempINIPath ("Object" + d as String) (tempIndex as String) ($selection[d].transform as String)
|
|
|
)
|
|
|
)
|
|
|
13:
|
|
|
(
|
|
|
undo "paste transform" on
|
|
|
(
|
|
|
for d = 1 to $selection.count do
|
|
|
(
|
|
|
local newTran = getINISetting cryTools.cryAnim.UI.main._v.tempINIPath ("Object" + d as String) (tempIndex as String)
|
|
|
if newTran != "" then
|
|
|
(
|
|
|
newTran = execute ( newTran )
|
|
|
local newObjTran = $selection[d].transform
|
|
|
|
|
|
case ddOpTo.selection of
|
|
|
(
|
|
|
1:( cryTools.cryAnim._f.pasteTransform $selection[d] newTran #transform )
|
|
|
2:( cryTools.cryAnim._f.pasteTransform $selection[d] newTran #pos )
|
|
|
3:( cryTools.cryAnim._f.pasteTransform $selection[d] newTran #rotation )
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
15:( undo "bip to [0,0]" on ( cryTools.cryAnim._f.bipToZero2() ) )
|
|
|
16:( undo "bip to [0,0,0]" on ( cryTools.cryAnim._f.bipToZero3() ) )
|
|
|
)
|
|
|
|
|
|
tempIndex += 1
|
|
|
|
|
|
)
|
|
|
if isSceneRedrawDisabled() == true then
|
|
|
enableSceneRedraw()
|
|
|
|
|
|
if snapshots != undefined then
|
|
|
for obj in snapshots do
|
|
|
delete obj
|
|
|
|
|
|
sliderTime = saveSliderTime
|
|
|
|
|
|
if operation >= 11 and operation <= 13 then
|
|
|
return false
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.operation._f.applyOperation" )
|
|
|
)
|
|
|
applyOperation = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.operation._f.applyOperation function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.pivot._f.pivotPoint
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- applies the in operationRO selected operation to the selected node
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.pivot._f.pivotPoint = function pivotPoint operation =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (selectedBipPart = cryTools.cryAnim._f.getSelectedBipPart() ) != undefined then
|
|
|
(
|
|
|
case operation of
|
|
|
(
|
|
|
#check:
|
|
|
(
|
|
|
if selectedBipPart.pivotSel.pivPoint.position == undefined then
|
|
|
(
|
|
|
return false
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
return true
|
|
|
)
|
|
|
)
|
|
|
#create:
|
|
|
(
|
|
|
ready = true
|
|
|
try
|
|
|
(
|
|
|
addModifier selectedBipPart.object.selected (edit_mesh())
|
|
|
local tempPos = (cryTools.cryAnim._f.getPivotPointPos selectedBipPart.pivotSel.index selectedBipPart.object.selected)
|
|
|
deleteModifier selectedBipPart.object.selected 1
|
|
|
|
|
|
local tempSnap = (cryTools.cryAnim._f.createSnapshot object:(getNodeByName selectedBipPart.pivotSel.pivObject))[1]
|
|
|
tempSnap.wireColor = (color 255 0 0)
|
|
|
tempSnap.showFrozenInGray = false
|
|
|
tempSnap.isFrozen = true
|
|
|
tempSnap.name = ("pivSnap_(" + selectedBipPart.name + ")")
|
|
|
|
|
|
tempSphere = sphere pos:tempPos radius:0.2
|
|
|
tempSphere.wireColor = (color 255 0 0)
|
|
|
tempSphere.showFrozenInGray = false
|
|
|
tempSphere.isFrozen = true
|
|
|
tempSphere.name = ("pivPoint_(" + selectedBipPart.name + ")")
|
|
|
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivPoint.name = \"" + tempSphere.name + "\"")
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivPoint.position = " + (tempPos as String))
|
|
|
)catch()
|
|
|
)
|
|
|
#delete:
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivPoint.name = undefined")
|
|
|
execute ("cryTools.cryAnim.align._v.pivotLast." + selectedBipPart.part.name + ".pivPoint.position = undefined")
|
|
|
delete (getNodeByName selectedBipPart.pivotSel.pivPoint.name)
|
|
|
delete (getNodeByName ("pivSnap" + ( substring selectedBipPart.pivotSel.pivPoint.name 9 selectedBipPart.pivotSel.pivPoint.name.count )) )
|
|
|
return true
|
|
|
)catch()
|
|
|
|
|
|
return false
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
return undefined
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.pivot._f.pivotPoint" )
|
|
|
)
|
|
|
pivotPoint = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.pivot._f.pivotPoint function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.outputINI
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- outputs the poses into the temp\ini file of the character
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.outputINI = function outputINI =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempCharArray = #()
|
|
|
local tempColArray = #()
|
|
|
local tempPoseArray = #()
|
|
|
|
|
|
local poses = cryTools.cryAnim.UI.main.poseManager._v.poses
|
|
|
local tempString = ""
|
|
|
local nodeString = ""
|
|
|
|
|
|
|
|
|
local charFileArray = getFiles (cryTools.cryTemp + "CryAnimPoseManager\\*.ini")
|
|
|
for i = 1 to charFileArray.count do
|
|
|
try ( deleteFile charFileArray[i] ) catch()
|
|
|
|
|
|
|
|
|
--// goes through the characters
|
|
|
for i = 1 to poses.count do
|
|
|
(
|
|
|
local poseCount = 1
|
|
|
local tempCharString = ""
|
|
|
--// sets character filename
|
|
|
for h = 1 to poses[i].nodes.count do
|
|
|
tempCharString += "#" + poses[i].nodes[h]
|
|
|
|
|
|
local tempFilename = (cryTools.cryTemp + "CryAnimPoseManager\\" + poses[i].name + ".ini")
|
|
|
cryTools.cryAnim.UI.main._f.checkExport #createFolder tempFilename
|
|
|
|
|
|
setINISetting tempFilename poses[i].name "nodes" tempCharString
|
|
|
|
|
|
local tempColString = ""
|
|
|
for f = 1 to poses[i].collections.count do
|
|
|
(
|
|
|
tempColString += "#" + poses[i].collections[f].name
|
|
|
|
|
|
local tempPoseString
|
|
|
for d = 1 to poses[i].collections[f].poses.count do
|
|
|
(
|
|
|
setINISetting tempFilename ("pose" + poseCount as String) "Collection" (f as String)
|
|
|
setINISetting tempFilename ("pose" + poseCount as String) "Name" poses[i].collections[f].poses[d].name
|
|
|
|
|
|
for k = 1 to poses[i].collections[f].poses[d].nodes.count do
|
|
|
(
|
|
|
local tempPoseString = poses[i].collections[f].poses[d].nodes[k].name + "/" + poses[i].collections[f].poses[d].nodes[k].transform as String
|
|
|
setINISetting tempFilename ("pose" + poseCount as String) ("node" + k as String) tempPoseString
|
|
|
)
|
|
|
|
|
|
poseCount += 1
|
|
|
)
|
|
|
)
|
|
|
setINISetting tempFilename poses[i].name "collections" tempColString
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.pivotPoint" )
|
|
|
)
|
|
|
outputINI = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.outputINI function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.inputINI
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- inputs the poses from the temp\ini file of the character
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.inputINI = function inputINI =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
global superTempArray = #()
|
|
|
local charFileArray = getFiles (cryTools.cryTemp + "CryAnimPoseManager\\*.ini")
|
|
|
if charFileArray.count > 0 then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.main.poseManager._v.poses = #()
|
|
|
|
|
|
for i = 1 to charFileArray.count do
|
|
|
(
|
|
|
local charEntry = cryTools.cryAnim.base.perforce charFileArray[i] #getFilename
|
|
|
charEntry = substring charEntry 1 (charEntry.count - 4)
|
|
|
local charNodes = getINISetting charFileArray[i] charEntry "nodes"
|
|
|
local charCollections = getINISetting charFileArray[i] charEntry "collections"
|
|
|
|
|
|
if charNodes != "" then
|
|
|
charNodes = filterString charNodes "#"
|
|
|
else
|
|
|
charNodes = #()
|
|
|
|
|
|
if charCollections != "" then
|
|
|
charCollections = filterString charCollections "#"
|
|
|
else
|
|
|
charCollections = #()
|
|
|
|
|
|
for i = 1 to charCollections.count do
|
|
|
charCollections[i] = collectionStruct name:charCollections[i]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local tempPoseArray = #()
|
|
|
for h = 1 to 200 do
|
|
|
(
|
|
|
if (local poseName = getINISetting charFileArray[i] ("pose" + h as String) "Name" ) != "" then
|
|
|
(
|
|
|
local poseNodeArray = #()
|
|
|
local colIndex = (getINISetting charFileArray[i] ("pose" + h as String) "Collection") as Integer
|
|
|
|
|
|
for g = 1 to 600 do
|
|
|
(
|
|
|
if (local tempNode = getINISetting charFileArray[i] ("pose" + h as String) ("node" + g as String)) != "" then
|
|
|
(
|
|
|
local tempArray = filterString tempNode "/"
|
|
|
local tempValue = execute (tempArray[2])
|
|
|
append poseNodeArray (nodeStruct name:tempArray[1] transform:tempValue )
|
|
|
)
|
|
|
)
|
|
|
|
|
|
append charCollections[colIndex].poses (poseStruct name:poseName nodes:poseNodeArray)
|
|
|
)
|
|
|
)
|
|
|
append cryTools.cryAnim.UI.main.poseManager._v.poses (charStruct name:charEntry nodes:charNodes collections:charCollections)
|
|
|
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.inputINI" )
|
|
|
)
|
|
|
inputINI = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.inputINI function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.createPoseBitmap
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- renders a bitmap of the current scene and outputs them to the character folder
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.createPoseBitmap = function createPoseBitmap outputPath =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local chkNodesOnly = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "chkNodesOnly"
|
|
|
local lbNodes = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "lbNodes"
|
|
|
|
|
|
|
|
|
if chkNodesOnly.checked == true then
|
|
|
(
|
|
|
nodeRenderArray = Objects as Array
|
|
|
newNodeRenderArray = #()
|
|
|
for obj in Objects do
|
|
|
append newNodeRenderArray obj.renderable
|
|
|
|
|
|
for i = 1 to nodeRenderArray.count do
|
|
|
(
|
|
|
if (findItem lbNodes.items nodeRenderArray[i].name) != 0 then
|
|
|
nodeRenderArray[i].renderable = true
|
|
|
else
|
|
|
nodeRenderArray[i].renderable = false
|
|
|
)
|
|
|
)
|
|
|
|
|
|
local tempRender = render frame:#current outputsize:[144,110] renderhiddenobjects:false rendSimplifyAreaLights:true renderatmosphericeffects:false vfb:false outputHDRbitmap:false ComputeRadiosity:false progressbar:false renderMultiPassEffects:false mapping:false shadows:false autoReflect:false objectMotionBlur:false imageMotionBlur:false quiet:true
|
|
|
if tempRender != undefined then
|
|
|
(
|
|
|
cryTools.cryAnim.UI.main._f.checkExport #createFolder outputPath
|
|
|
tempRender.filename = outputPath
|
|
|
save tempRender
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "bmpPreview").bitmap = tempRender
|
|
|
|
|
|
if chkNodesOnly.checked == true then
|
|
|
(
|
|
|
for i = 1 to nodeRenderArray.count do
|
|
|
nodeRenderArray[i].renderable = newNodeRenderArray[i]
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.outputPath" )
|
|
|
)
|
|
|
outputPath = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.outputPath function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.updateList
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the pose managers lists with the input ini settings
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList = function updateList objectName initial:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local ddCharacter = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCharacter"
|
|
|
local btnDeleteCharacter = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "btnDeleteCharacter"
|
|
|
local ddCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCollection"
|
|
|
local btnDeleteCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "btnDeleteCollection"
|
|
|
local btnCreateCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "btnCreateCollection"
|
|
|
local ddPose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddPose"
|
|
|
local btnDeletePose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "btnDeletePose"
|
|
|
local btnCreatePose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "btnCreatePose"
|
|
|
local btnPastePose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "btnPastePose"
|
|
|
local lbNodes = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "lbNodes"
|
|
|
local edCharacter = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "edCharacter"
|
|
|
local edCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "edCollection"
|
|
|
local edPose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "edPose"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case objectName of
|
|
|
(
|
|
|
#character:
|
|
|
(
|
|
|
local tempCharNameArray = #()
|
|
|
local tempColNameArray = #()
|
|
|
local tempPoseNameArray = #()
|
|
|
|
|
|
if cryTools.cryAnim.UI.main.poseManager._v.poses.count > 0 then
|
|
|
(
|
|
|
if initial == undefined then
|
|
|
ddCharSel = ddCharacter.selection
|
|
|
else
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.poseManager._v.poses.count do
|
|
|
append tempCharNameArray cryTools.cryAnim.UI.main.poseManager._v.poses[i].name
|
|
|
|
|
|
ddCharacter.items = tempCharNameArray
|
|
|
ddCharSel = 1
|
|
|
)
|
|
|
|
|
|
ddCollection.selection = 1
|
|
|
ddPose.selection = 1
|
|
|
|
|
|
lbNodes.items = cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].nodes
|
|
|
|
|
|
if cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].collections.count > 0 then
|
|
|
(
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].collections.count do
|
|
|
append tempColNameArray cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].collections[i].name
|
|
|
|
|
|
if cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].collections[1].poses.count > 0 then
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].collections[1].poses.count do
|
|
|
append tempPoseNameArray cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharSel].collections[1].poses[i].name
|
|
|
)
|
|
|
)
|
|
|
|
|
|
ddCollection.items = tempColNameArray
|
|
|
ddPose.items = tempPoseNameArray
|
|
|
|
|
|
)
|
|
|
|
|
|
#collection:
|
|
|
(
|
|
|
local tempPoseNameArray = #()
|
|
|
|
|
|
if cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].collections.count > 0 then
|
|
|
(
|
|
|
if cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].collections[ddCollection.selection].poses.count > 0 then
|
|
|
for i = 1 to cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].collections[ddCollection.selection].poses.count do
|
|
|
append tempPoseNameArray cryTools.cryAnim.UI.main.poseManager._v.poses[ddCharacter.selection].collections[ddCollection.selection].poses[i].name
|
|
|
)
|
|
|
|
|
|
ddPose.items = tempPoseNameArray
|
|
|
ddPose.selection = 1
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if ddCharacter.items.count > 0 then
|
|
|
(
|
|
|
try(edCharacter.text = ddCharacter.items[ddCharSel])catch()
|
|
|
btnDeleteCharacter.enabled = true
|
|
|
ddCharacter.enabled = true
|
|
|
edCharacter.enabled = true
|
|
|
btnCreateCollection.enabled = true
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
edCharacter.text = ""
|
|
|
btnDeleteCharacter.enabled = false
|
|
|
ddCharacter.enabled = false
|
|
|
edCharacter.enabled = false
|
|
|
btnCreateCollection.enabled = false
|
|
|
)
|
|
|
|
|
|
|
|
|
if ddCollection.items.count > 0 then
|
|
|
(
|
|
|
try(edCollection.text = ddCollection.items[ddCollection.selection])catch()
|
|
|
btnDeleteCollection.enabled = true
|
|
|
ddCollection.enabled = true
|
|
|
edCollection.enabled = true
|
|
|
btnCreatePose.enabled = true
|
|
|
btnPastePose.enabled = true
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
edCollection.text = ""
|
|
|
btnDeleteCollection.enabled = false
|
|
|
ddCollection.enabled = false
|
|
|
edCollection.enabled = false
|
|
|
btnCreatePose.enabled = false
|
|
|
btnPastePose.enabled = false
|
|
|
)
|
|
|
|
|
|
if ddPose.items.count > 0 then
|
|
|
(
|
|
|
edPose.text = ddPose.items[ddPose.selection]
|
|
|
btnDeletePose.enabled = true
|
|
|
ddPose.enabled = true
|
|
|
edPose.enabled = true
|
|
|
btnPastePose.enabled = true
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
edPose.text = ""
|
|
|
btnDeletePose.enabled = false
|
|
|
ddPose.enabled = false
|
|
|
edPose.enabled = false
|
|
|
btnPastePose.enabled = false
|
|
|
)
|
|
|
|
|
|
|
|
|
try ( local tempBitmap = openBitMap (cryTools.cryTemp + "CryAnimPoseManager\\" + ddCharacter.items[ddCharacter.selection] + "\\" + ddCollection.items[ddCollection.selection] + "_" + ddPose.items[ddPose.selection] + ".jpg") )catch()
|
|
|
if tempBitmap == undefined then
|
|
|
tempBitmap = bitmap 144 110 color:(color 190 190 190)
|
|
|
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "bmpPreview").bitmap = tempBitmap
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.updateList" )
|
|
|
)
|
|
|
updateList = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.updateList function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.addEntry
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the pose managers lists with the input ini settings
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.addEntry = function addEntry edText objectName =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local lbNodes = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "lbNodes")
|
|
|
local ddChar = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCharacter")
|
|
|
local ddCol = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCollection")
|
|
|
local ddPose = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddPose")
|
|
|
local poses = cryTools.cryAnim.UI.main.poseManager._v.poses
|
|
|
|
|
|
local tempNodesArray = #()
|
|
|
local tempCharArray = #()
|
|
|
local tempVar = #()
|
|
|
|
|
|
if edText != "" then
|
|
|
(
|
|
|
|
|
|
case objectName of
|
|
|
(
|
|
|
"Character":
|
|
|
(
|
|
|
if $selection.count != 0 then
|
|
|
(
|
|
|
if (queryBox "Take Nodes from Selection?" title:"Adding Nodes") == true then
|
|
|
tempVar = getCurrentSelection()
|
|
|
else
|
|
|
tempVar = selectByName title:"Create Character Nodes Selection" showHidden:false single:false
|
|
|
)
|
|
|
else
|
|
|
tempVar = selectByName title:"Create Character Nodes Selection" showHidden:false single:false
|
|
|
|
|
|
if classOf tempVar == Array and tempVar.count > 0 then
|
|
|
(
|
|
|
--// sorts nodes list by root->children
|
|
|
tempNodesArray = cryTools.sortRootChildren tempVar
|
|
|
|
|
|
append cryTools.cryAnim.UI.main.poseManager._v.poses (charStruct name:edText)
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._v.poses[cryTools.cryAnim.UI.main.poseManager._v.poses.count].nodes = deepcopy tempNodesArray
|
|
|
|
|
|
tempCharArray = ddChar.items
|
|
|
append tempCharArray edText
|
|
|
|
|
|
|
|
|
ddChar.items = tempCharArray
|
|
|
lbNodes.items = tempNodesArray
|
|
|
ddChar.selection = tempCharArray.count
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #character
|
|
|
)
|
|
|
else
|
|
|
messageBox "No nodes selected." title:"Error creating Character"
|
|
|
)
|
|
|
|
|
|
"Collection":
|
|
|
(
|
|
|
local tempNodesArray = ddCol.items
|
|
|
append tempNodesArray edText
|
|
|
append cryTools.cryAnim.UI.main.poseManager._v.poses[ddChar.selection].collections (collectionStruct name:edText)
|
|
|
ddCol.items = tempNodesArray
|
|
|
ddCol.selection = ddCol.items.count
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #collection
|
|
|
)
|
|
|
|
|
|
"Pose":
|
|
|
(
|
|
|
local tempArray = #()
|
|
|
|
|
|
in coordsys world
|
|
|
(
|
|
|
for i = 1 to poses[ddChar.selection].nodes.count do
|
|
|
(
|
|
|
local tempObj = getNodeByName poses[ddChar.selection].nodes[i]
|
|
|
|
|
|
if tempObj != undefined then
|
|
|
(
|
|
|
--// find sliderManipulator
|
|
|
if tempObj.classID[1] == 1205540079 then
|
|
|
local tempTransform = tempObj.value
|
|
|
--// or normal node
|
|
|
else
|
|
|
local tempTransform = tempObj.transform
|
|
|
|
|
|
try
|
|
|
(
|
|
|
if getClassName tempObj.controller.position.controller == "Path Constraint" then
|
|
|
tempTransform = tempObj.controller.position.controller.percent
|
|
|
)catch()
|
|
|
|
|
|
append tempArray (nodeStruct name:tempObj.name transform:tempTransform)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
local tempNodesArray = ddPose.items
|
|
|
append tempNodesArray edText
|
|
|
append cryTools.cryAnim.UI.main.poseManager._v.poses[ddChar.selection].collections[ddCol.selection].poses (poseStruct name:edText nodes:tempArray)
|
|
|
ddPose.items = tempNodesArray
|
|
|
ddPose.selection = ddPose.items.count
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.createPoseBitmap (cryTools.cryTemp + "CryAnimPoseManager\\" + ddChar.items[ddChar.selection] + "\\" + ddCol.items[ddCol.selection] + "_" + ddPose.items[ddPose.selection] + ".jpg")
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #default
|
|
|
)
|
|
|
)
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.outputINI()
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.addEntry" )
|
|
|
)
|
|
|
addEntry = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.addEntry function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.createEntry
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates a new entry and adds the default text to the corresponding edittext
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.createEntry = function createEntry objectName =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local ddCharacter = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCharacter"
|
|
|
local ddCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCollection"
|
|
|
|
|
|
|
|
|
local edName = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" ("ed" + objectName)
|
|
|
local ddList = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" ("dd" + objectName)
|
|
|
|
|
|
cryTools.cryAnim._v.various[55] = objectName
|
|
|
local maxDefaultEntriesFound = 0
|
|
|
|
|
|
for i = 1 to ddList.items.count do
|
|
|
(
|
|
|
local tempString = objectName + (if i < 10 then "0" else "") + i as String
|
|
|
if (findItem ddList.items tempString ) != 0 then
|
|
|
maxDefaultEntriesFound += 1
|
|
|
)
|
|
|
|
|
|
maxDefaultEntriesFound += 1
|
|
|
|
|
|
|
|
|
local entryText = objectName + (if maxDefaultEntriesFound < 10 then "0" else "") + maxDefaultEntriesFound as String
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.addEntry entryText objectName
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.createEntry" )
|
|
|
)
|
|
|
createEntry = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.createEntry function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.deleteEntry
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- deletes the selected entry of the corresponding listbox
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.deleteEntry = function deleteEntry objectName =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local lbNodes = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "lbNodes")
|
|
|
local ddChar = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCharacter")
|
|
|
local ddCol = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCollection")
|
|
|
local ddPose = (cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddPose")
|
|
|
local edName = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" ("ed" + objectName)
|
|
|
local poses = cryTools.cryAnim.UI.main.poseManager._v.poses
|
|
|
|
|
|
case objectName of
|
|
|
(
|
|
|
"Character":
|
|
|
(
|
|
|
if ddChar.items.count > 0 then
|
|
|
(
|
|
|
if queryBox ("Delete " + ddChar.items[ddChar.selection] + " ?") title:"Delete Item" == true then
|
|
|
(
|
|
|
lbNodes.items = #()
|
|
|
local tempArray = ddChar.items
|
|
|
|
|
|
try (deleteFile (cryTools.cryTemp + "CryAnimPoseManager\\" + ddChar.items[ddChar.selection] + ".ini") )catch()
|
|
|
|
|
|
local tempFileArray = getFiles (cryTools.cryTemp + "CryAnimPoseManager\\" + ddChar.items[ddChar.selection] + "\\*.jpg")
|
|
|
|
|
|
for i = 1 to tempFileArray.count do
|
|
|
try (deleteFile tempFileArray[i] )catch()
|
|
|
|
|
|
|
|
|
local tempSelection = ddChar.selection
|
|
|
deleteItem cryTools.cryAnim.UI.main.poseManager._v.poses ddChar.selection
|
|
|
deleteItem tempArray ddChar.selection
|
|
|
ddChar.items = tempArray
|
|
|
ddChar.selection = ddChar.items.count
|
|
|
|
|
|
if tempSelection > 1 then
|
|
|
ddChar.selection = tempSelection - 1
|
|
|
else
|
|
|
ddChar.selection = tempSelection
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #character
|
|
|
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
"Collection":
|
|
|
(
|
|
|
if ddCol.items.count > 0 then
|
|
|
(
|
|
|
if queryBox ("Delete " + ddCol.items[ddCol.selection] + " ?") title:"Delete Item" == true then
|
|
|
(
|
|
|
local tempArray = ddCol.items
|
|
|
for i = 1 to poses[ddChar.selection].collections[ddCol.selection].poses.count do
|
|
|
try (deleteFile (cryTools.cryTemp + "CryAnimCharacter_" + poses[ddChar.selection].name + "_" + poses[ddChar.selection].collections[ddCol.selection].name + "_" + poses[ddChar.selection].collections[ddCol.selection].poses[i].name + ".jpg") )catch()
|
|
|
local tempSelection = ddCol.selection
|
|
|
deleteItem cryTools.cryAnim.UI.main.poseManager._v.poses[ddChar.selection].collections ddCol.selection
|
|
|
deleteItem tempArray ddCol.selection
|
|
|
ddCol.items = tempArray
|
|
|
|
|
|
if tempSelection > 1 then
|
|
|
ddCol.selection = tempSelection - 1
|
|
|
else
|
|
|
ddCol.selection = tempSelection
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #collection
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
"Pose":
|
|
|
(
|
|
|
if ddPose.items.count > 0 then
|
|
|
(
|
|
|
if queryBox ("Delete " + ddPose.items[ddPose.selection] + " ?") title:"Delete Item" == true then
|
|
|
(
|
|
|
local tempArray = ddPose.items
|
|
|
try (deleteFile (cryTools.cryTemp + "CryAnimPoseManager\\" + ddCharacter.items[ddCharacter.selection] + "\\" + ddCollection.items[ddCollection.selection] + "_" + ddPose.items[ddPose.selection] + ".jpg") )catch()
|
|
|
local tempSelection = ddPose.selection
|
|
|
deleteItem cryTools.cryAnim.UI.main.poseManager._v.poses[ddChar.selection].collections[ddCol.selection].poses ddPose.selection
|
|
|
deleteItem tempArray ddPose.selection
|
|
|
ddPose.items = tempArray
|
|
|
|
|
|
if tempSelection > 1 then
|
|
|
ddPose.selection = tempSelection - 1
|
|
|
else
|
|
|
ddPose.selection = tempSelection
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #default
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.outputINI()
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.deleteEntry" )
|
|
|
)
|
|
|
deleteEntry = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.deleteEntry function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.renameEntry
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- renames the selected entry of the corresponding listbox
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.renameEntry = function renameEntry objectName =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local poses = cryTools.cryAnim.UI.main.poseManager._v.poses
|
|
|
local tempPath = (cryTools.cryTemp + "CryAnimPoseManager\\")
|
|
|
|
|
|
local ddCharacter = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCharacter"
|
|
|
local ddCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCollection"
|
|
|
local ddPose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddPose"
|
|
|
local ddList = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" ("dd" + objectName)
|
|
|
local edName = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" ("ed" + objectName)
|
|
|
|
|
|
local tempArray = ddList.items
|
|
|
|
|
|
case objectName of
|
|
|
(
|
|
|
"Character":
|
|
|
(
|
|
|
try ( renameFile (tempPath + ddCharacter.items[ddCharacter.selection]) (tempPath + edName.text) ) catch()
|
|
|
|
|
|
poses[ddCharacter.selection].name = edName.text
|
|
|
)
|
|
|
|
|
|
"Collection":
|
|
|
(
|
|
|
local tempFileArray = getFiles (tempPath + ddCharacter.items[ddCharacter.selection] + "\\" + ddCollection.items[ddCollection.selection] + "*.jpg")
|
|
|
if tempFileArray.count > 0 then
|
|
|
(
|
|
|
for i = 1 to tempFileArray.count do
|
|
|
(
|
|
|
local tempFileFilter = filterString tempFileArray[i] "\\"
|
|
|
local tempFileString = ""
|
|
|
for f = 1 to (tempFileFilter.count - 1) do
|
|
|
tempFileString += tempFileFilter[f] + "\\"
|
|
|
|
|
|
tempFileString += edName.text + "_" + (filterString tempFileFilter[tempFileFilter.count] "_")[2]
|
|
|
|
|
|
try ( renameFile tempFileArray[i] tempFileString ) catch()
|
|
|
)
|
|
|
)
|
|
|
|
|
|
poses[ddCharacter.selection].collections[ddCollection.selection].name = edName.text
|
|
|
)
|
|
|
|
|
|
"Pose":
|
|
|
(
|
|
|
tempFilePath = tempPath + ddCharacter.items[ddCharacter.selection] + "\\" + ddCollection.items[ddCollection.selection] + "_"
|
|
|
try ( renameFile (tempFilePath + ddPose.items[ddPose.selection] + ".jpg") (tempFilePath + edName.text + ".jpg") ) catch()
|
|
|
|
|
|
poses[ddCharacter.selection].collections[ddCollection.selection].poses[ddPose.selection].name = edName.text
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
tempArray[ddList.selection] = edName.text
|
|
|
ddList.items = tempArray
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.outputINI()
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.updateList #collection
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.renameEntry" )
|
|
|
)
|
|
|
renameEntry = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.renameEntry function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.poseManager._f.applyPose
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- applies the selected pose to the character
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.poseManager._f.applyPose = function applyPose =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
--// poses array with characters, collections and poses
|
|
|
local poses = cryTools.cryAnim.UI.main.poseManager._v.poses
|
|
|
local ddCharacter = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCharacter"
|
|
|
local ddCollection = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddCollection"
|
|
|
local ddPose = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "ddPose"
|
|
|
local lbNodes = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "lbNodes"
|
|
|
|
|
|
local chkBoneOnly = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "chkBoneOnly"
|
|
|
local chkControllerValue = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "chkControllerValue"
|
|
|
local chkPasteRotation = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "chkPasteRotation"
|
|
|
local chkPastePosition = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "chkPastePosition"
|
|
|
local chkByVelocity = cryTools.cryAnim.UI.main._f.getUI "Pose Manager" "chkByVelocity"
|
|
|
---------------------------------------------------------------------------
|
|
|
local tempNodeArray = #()
|
|
|
|
|
|
if chkBoneOnly.checked == false then
|
|
|
tempNodeArray = poses[ddCharacter.selection].collections[ddCollection.selection].poses[ddPose.selection].nodes
|
|
|
else
|
|
|
(
|
|
|
local tempSelArray = lbNodes.selection as Array
|
|
|
for i = 1 to tempSelArray.count do
|
|
|
append tempNodeArray poses[ddCharacter.selection].collections[ddCollection.selection].poses[ddPose.selection].nodes[tempSelArray[i]]
|
|
|
)
|
|
|
|
|
|
---------------------------------------------------------------------------
|
|
|
local boneMissingMessage = "Could not find Bones:\n\n"
|
|
|
local boneMissing = false
|
|
|
|
|
|
for i = 1 to tempNodeArray.count do
|
|
|
(
|
|
|
if (getNodeByName tempNodeArray[i].name) == undefined then
|
|
|
(
|
|
|
boneMissingMessage += tempNodeArray[i].name + "\n"
|
|
|
boneMissing = true
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if boneMissing == true then
|
|
|
(
|
|
|
if queryBox (boneMissingMessage + "\n\nContinue with pasting the pose?") title:"Bones Missing" == false then
|
|
|
return undefined
|
|
|
)
|
|
|
---------------------------------------------------------------------------
|
|
|
--// get root node
|
|
|
local root = getNodeByName poses[ddCharacter.selection].collections[ddCollection.selection].poses[ddPose.selection].nodes[1].name
|
|
|
|
|
|
if root == undefined then
|
|
|
return undefined
|
|
|
|
|
|
--// get Locator_Locomotion (prop1) if available
|
|
|
try (local bipProp = biped.getNode (getNodeByName poses[ddCharacter.selection].nodes[1]) #prop1) catch()
|
|
|
---------------------------------------------------------------------------
|
|
|
|
|
|
with redraw off
|
|
|
(
|
|
|
for i = 1 to tempNodeArray.count do
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
in coordsys world
|
|
|
(
|
|
|
local tempNode = getNodeByName tempNodeArray[i].name
|
|
|
if tempNode != undefined then
|
|
|
(
|
|
|
local newPos = tempNode.transform.pos
|
|
|
local safePos = tempNode.transform.pos
|
|
|
|
|
|
--// node is a sliderManipulator
|
|
|
case tempNode.classID[1] of
|
|
|
(
|
|
|
--// sliderManipulator
|
|
|
1205540079:
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if chkControllerValue.checked == true then
|
|
|
tempNode.value = tempNodeArray[i].transform
|
|
|
)catch()
|
|
|
)
|
|
|
--// biped object
|
|
|
37157:
|
|
|
(
|
|
|
if chkPasteRotation.checked == true then
|
|
|
try ( biped.setTransform tempNode #rotation tempNodeArray[i].transform.rotation true ) catch()
|
|
|
|
|
|
if chkPastePosition.checked == true then
|
|
|
(
|
|
|
if chkByVelocity.checked == false then
|
|
|
(
|
|
|
try ( biped.setTransform tempNode #pos tempNodeArray[i].transform.pos true ) catch()
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
if tempNodeArray[i].name != root.name then
|
|
|
(
|
|
|
local offsetPos = tempNodeArray[1].transform.pos - tempNodeArray[i].transform.pos
|
|
|
local newOffsetPos = root.transform.pos - offsetPos
|
|
|
|
|
|
try ( biped.setTransform tempNode #pos newOffsetPos true ) catch()
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
default:
|
|
|
(
|
|
|
local isNormalNode = false
|
|
|
|
|
|
--// if node is path constraint
|
|
|
try
|
|
|
(
|
|
|
if getClassName tempNode.controller.position.controller == "Path Constraint" then
|
|
|
(
|
|
|
if chkControllerValue.checked == true then
|
|
|
try ( tempNode.controller.position.controller.percent = tempNodeArray[i].transform ) catch()
|
|
|
)
|
|
|
else
|
|
|
isNormalNode = true
|
|
|
)
|
|
|
catch( isNormalNode = true)
|
|
|
|
|
|
--// normal node
|
|
|
if isNormalNode == true then
|
|
|
(
|
|
|
if chkPasteRotation.checked == true then
|
|
|
try ( tempNode.rotation = inverse tempNodeArray[i].transform.rotation ) catch()
|
|
|
|
|
|
if chkPastePosition.checked == true then
|
|
|
(
|
|
|
if chkByVelocity.checked == false then
|
|
|
newPos = tempNodeArray[i].transform.pos
|
|
|
else
|
|
|
(
|
|
|
if tempNodeArray[i].name != root.name then
|
|
|
(
|
|
|
local offsetPos = tempNodeArray[1].transform.pos - tempNodeArray[i].transform.pos
|
|
|
newPos = root.transform.pos - offsetPos
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
newPos = safePos
|
|
|
|
|
|
try ( tempNode.pos = newPos ) catch()
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch()
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.poseManager._f.applyPose" )
|
|
|
)
|
|
|
applyPose = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.poseManager._f.applyPose function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.loadSave._f.checkRange
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- checks the range of the animation and timeline range
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.loadSave._f.checkRange = function checkRange begin end =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempTextString = "The current timeline range differs from the selected range.\nDo you want to use the current time range?\n\n"
|
|
|
|
|
|
local tempTimeString = #( ( (animationRange.start.frame as Integer) as String + " -> " + (animationRange.end.frame as Integer) as String), ( begin as String + " -> " + end as String ) )
|
|
|
|
|
|
local tempInt = #( (getTextExtent tempTimeString[1])[1], (getTextExtent tempTimeString[2])[1] )
|
|
|
local tempSep = #()
|
|
|
|
|
|
|
|
|
|
|
|
for i = 1 to tempInt.count do
|
|
|
(
|
|
|
tempSepString = ""
|
|
|
for f = 1 to tempInt[i] by 3 do
|
|
|
tempSepString += " "
|
|
|
|
|
|
tempSep[i] = tempSepString
|
|
|
)
|
|
|
|
|
|
tempSep[2] = substring tempSep[2] 1 (tempSep[2].count - (tempSep[1].count - tempSep[2].count))
|
|
|
|
|
|
|
|
|
|
|
|
if ( queryBox (tempTextString + " " + tempTimeString[1] + " " + tempSep[2] + tempTimeString[2] ) title:("Animation Range") ) == true then
|
|
|
return interval animationRange.start.frame animationRange.end.frame
|
|
|
else
|
|
|
return interval begin end
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.loadSave._f.checkRange" )
|
|
|
)
|
|
|
checkRange = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.loadSave._f.checkRange function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.loadSave._f.getProgressInfo
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the current progress text or the width
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.loadSave._f.getProgressInfo = function getProgressInfo op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempString = (" Processing Animation: " + cryTools.cryAnim.base.perforce cryTools.cryAnim.UI.main.loadSave._v.cafSavePath #getFilename)
|
|
|
local tempSize = getTextExtent tempString
|
|
|
case op of
|
|
|
(
|
|
|
#width:
|
|
|
return tempSize[1]
|
|
|
#text:
|
|
|
return tempString
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.loadSave._f.getProgressInfo" )
|
|
|
)
|
|
|
getProgressInfo = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.loadSave._f.getProgressInfo function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.loadSave._f.updateProgressBar
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- refreshes the progressbar
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.loadSave._f.updateProgressBar = function updateProgressBar tempBitmap phase =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
maxColor = (color 255 0 0)--(color 230 100 0)
|
|
|
minColor = (color 0 0 0)--(color 110 120 130)
|
|
|
|
|
|
|
|
|
for x = 0 to tempBitmap.width do
|
|
|
(
|
|
|
tempColor = (getPixels tempBitmap [x,0] 1)[1]
|
|
|
|
|
|
for y = 0 to tempBitmap.height + 1 do
|
|
|
(
|
|
|
diff = phase - x
|
|
|
if diff < 0 then
|
|
|
diff -= diff * 2
|
|
|
|
|
|
|
|
|
percent = ((diff * 100) / tempBitmap.width)
|
|
|
newColor = (maxColor / percent) + minColor
|
|
|
|
|
|
setPixels tempBitmap [x,y] #(newColor)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
return tempBitmap
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.loadSave._f.updateProgressBar" )
|
|
|
)
|
|
|
updateProgressBar = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.loadSave._f.updateProgressBar function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.loadSave._f.progressDialog
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- creates or deletes the test bar progress dialog
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.loadSave._f.progressDialog = function progressDialog op =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
case op of
|
|
|
(
|
|
|
#destroy:
|
|
|
(
|
|
|
destroyDialog cryTools.cryAnim.UI.main.loadSave.testBar
|
|
|
)
|
|
|
#generate:
|
|
|
(
|
|
|
try (destroyDialog cryTools.cryAnim.UI.main.loadSave.testBar) catch()
|
|
|
rollout testBar "Exporting Animation" width:300 height:32
|
|
|
(
|
|
|
label progressInfo "" pos:[10,5] height:15 align:#left
|
|
|
bitmap progressBar pos:[10,20] bitmap:(bitmap ((getProgressInfo #width) + 20) 5 color:(color 80 80 80))
|
|
|
timer clock interval:80 active:true
|
|
|
|
|
|
on testBar open do
|
|
|
(
|
|
|
progressInfo.text = cryTools.cryAnim.UI.main.loadSave._f.getProgressInfo #text
|
|
|
testBar.width = (cryTools.cryAnim.UI.main.loadSave._f.getProgressInfo #width) + 40
|
|
|
forward = true
|
|
|
global colorDirection = true
|
|
|
global tempX = 0
|
|
|
)
|
|
|
|
|
|
on clock tick do
|
|
|
(
|
|
|
progressBar.bitmap = cryTools.cryAnim.UI.main.loadSave._f.updateProgressBar progressBar.bitmap tempX
|
|
|
if tempX >= progressBar.bitmap.width then
|
|
|
colorDirection = false
|
|
|
if tempX <= 0 then
|
|
|
colorDirection = true
|
|
|
|
|
|
if colorDirection == true then
|
|
|
tempX += 10
|
|
|
else
|
|
|
tempX -= 10
|
|
|
)
|
|
|
|
|
|
)
|
|
|
cryTools.cryAnim.UI.main.loadSave.testBar = testBar
|
|
|
testBar = undefined
|
|
|
|
|
|
createDialog cryTools.cryAnim.UI.main.loadSave.testBar --style:#(#style_sunkenedge)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.loadSave._f.progressDialog" )
|
|
|
)
|
|
|
progressDialog = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.loadSave._f.progressDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- bakes muscle bones to keys
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones = function bakeMuscleBones =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Muscles" "Auto-Muscles").checked == true then
|
|
|
(
|
|
|
if $'_Bip01 L knee_Con' != undefined then
|
|
|
(
|
|
|
global automateAnimateMuscles = false
|
|
|
global useMuscleKeys = undefined
|
|
|
|
|
|
saveSliderTime = sliderTime
|
|
|
sliderTime = animationRange.end
|
|
|
|
|
|
local tempMode = getCommandPanelTaskMode()
|
|
|
setCommandPanelTaskMode #motion
|
|
|
|
|
|
|
|
|
for i = animationRange.start to animationRange.end do
|
|
|
(
|
|
|
escapeEnable = true
|
|
|
sliderTime = i
|
|
|
)
|
|
|
|
|
|
sliderTime = saveSliderTime
|
|
|
|
|
|
global automateAnimateMuscles = false
|
|
|
global useMuscleKeys = true
|
|
|
)
|
|
|
else
|
|
|
return undefined
|
|
|
)
|
|
|
else return false
|
|
|
|
|
|
|
|
|
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Muscles" "Auto-Muscles").checked == true then
|
|
|
global automateAnimateMuscles = undefined
|
|
|
else
|
|
|
global automateAnimateMuscles = false
|
|
|
|
|
|
if (cryTools.cryAnim.UI.main._f.getUI "Muscles" "Use Keys").checked == true then
|
|
|
global useMusclesKeys = true
|
|
|
else
|
|
|
global useMusclesKeys = undefined
|
|
|
|
|
|
return true
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones" )
|
|
|
)
|
|
|
bakeMuscleBones = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.loadSave._f.bakeMuscleBones function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- returns the extent of the lbStatus entry
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents = function getStatusExtents =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempSLB = (cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "").lbStatus
|
|
|
local tempSFLB = (cryTools.cryAnim.UI.main._f.getUI "Load / Save / Export" "").lbStatusFilepath
|
|
|
local tempSize = getTextExtent tempSFLB.items[tempSLB.selection]
|
|
|
|
|
|
return tempSize[1]
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents" )
|
|
|
)
|
|
|
getStatusExtents = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.loadSave._f.getStatusExtents function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.target._f.updateDDSelection
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- updates the listbox in targetRO and changes settings in operationRO
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.target._f.updateDDSelection = function updateDDSelection op:undefined =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local ddSelection = cryTools.cryAnim.UI.main._f.getUI "Target" "ddSelection"
|
|
|
local grpAxis = cryTools.cryAnim.UI.main._f.getUI "Target" "grpAxis"
|
|
|
local labX = cryTools.cryAnim.UI.main._f.getUI "Target" "labX"
|
|
|
local labY = cryTools.cryAnim.UI.main._f.getUI "Target" "labY"
|
|
|
local labZ = cryTools.cryAnim.UI.main._f.getUI "Target" "labZ"
|
|
|
local labOffset = cryTools.cryAnim.UI.main._f.getUI "Target" "labOffset"
|
|
|
local labPos = cryTools.cryAnim.UI.main._f.getUI "Target" "labPos"
|
|
|
local chkX = cryTools.cryAnim.UI.main._f.getUI "Target" "chkX"
|
|
|
local chkY = cryTools.cryAnim.UI.main._f.getUI "Target" "chkY"
|
|
|
local chkZ = cryTools.cryAnim.UI.main._f.getUI "Target" "chkZ"
|
|
|
local chkPosOffset = cryTools.cryAnim.UI.main._f.getUI "Target" "chkPosOffset"
|
|
|
local labRot = cryTools.cryAnim.UI.main._f.getUI "Target" "labRot"
|
|
|
local chkXRot = cryTools.cryAnim.UI.main._f.getUI "Target" "chkXRot"
|
|
|
local chkYRot = cryTools.cryAnim.UI.main._f.getUI "Target" "chkYRot"
|
|
|
local chkZRot = cryTools.cryAnim.UI.main._f.getUI "Target" "chkZRot"
|
|
|
local chkRotOffset = cryTools.cryAnim.UI.main._f.getUI "Target" "chkRotOffset"
|
|
|
local btnSetOffset = cryTools.cryAnim.UI.main._f.getUI "Target" "btnSetOffset"
|
|
|
local labEditOffset1 = cryTools.cryAnim.UI.main._f.getUI "Target" "labEditOffset1"
|
|
|
local labEditOffset2 = cryTools.cryAnim.UI.main._f.getUI "Target" "labEditOffset2"
|
|
|
local edOffset1 = cryTools.cryAnim.UI.main._f.getUI "Target" "edOffset1"
|
|
|
local edOffset2 = cryTools.cryAnim.UI.main._f.getUI "Target" "edOffset2"
|
|
|
|
|
|
|
|
|
local tempArray = #()
|
|
|
local tempArrayNames = #()
|
|
|
|
|
|
for obj in objects do
|
|
|
(
|
|
|
if obj.isHidden == false then
|
|
|
append tempArray obj.name
|
|
|
)
|
|
|
|
|
|
sort tempArray
|
|
|
|
|
|
if tempArray.count != 0 then
|
|
|
insertItem "----------------------------------------" tempArray 1
|
|
|
|
|
|
insertItem "--------- Update List -----------" tempArray 1
|
|
|
insertItem "----- Current Selection ------" tempArray 1
|
|
|
|
|
|
if ddSelection.items.count != tempArray.count then
|
|
|
ddSelection.items = tempArray
|
|
|
|
|
|
local groupArray = #(\
|
|
|
grpAxis, labX, labY, labZ, labOffset, \
|
|
|
labPos, chkX, chkY, chkZ, chkPosOffset, \
|
|
|
labRot, chkXRot, chkYRot, chkZRot, chkRotOffset, btnSetOffset, \
|
|
|
labEditOffset1, labEditOffset2, edOffset1, edOffset2 )
|
|
|
|
|
|
if op == false then
|
|
|
(
|
|
|
for i = 1 to groupArray.count do
|
|
|
groupArray[i].enabled = false
|
|
|
|
|
|
)
|
|
|
if op == true then
|
|
|
(
|
|
|
for i = 1 to groupArray.count do
|
|
|
groupArray[i].enabled = true
|
|
|
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.target._f.updateDDSelection" )
|
|
|
)
|
|
|
updateDDSelection = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.target._f.updateDDSelection function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.target._f.updateOffset
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- generates the offset of the selected node and selected item in the list
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.target._f.updateOffset = function updateOffset =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempArray = #([0,0,0], (eulerangles 0 0 0))
|
|
|
local chkPosOffset = cryTools.cryAnim.UI.main._f.getUI "Target" "chkPosOffset"
|
|
|
local chkRotOffset = cryTools.cryAnim.UI.main._f.getUI "Target" "chkRotOffset"
|
|
|
local labEditOffset1 = cryTools.cryAnim.UI.main._f.getUI "Target" "labEditOffset1"
|
|
|
local labEditOffset2 = cryTools.cryAnim.UI.main._f.getUI "Target" "labEditOffset2"
|
|
|
local edOffset1 = cryTools.cryAnim.UI.main._f.getUI "Target" "edOffset1"
|
|
|
local edOffset2 = cryTools.cryAnim.UI.main._f.getUI "Target" "edOffset2"
|
|
|
local grpAxis = cryTools.cryAnim.UI.main._f.getUI "Target" "grpAxis"
|
|
|
|
|
|
try
|
|
|
(
|
|
|
if cryTools.cryAnim._v.various[35].count > 0 then
|
|
|
(
|
|
|
if chkPosOffset.checked == true then
|
|
|
tempArray[1] = cryTools.cryAnim._v.various[35][1].position as String
|
|
|
if chkRotOffset.checked == true then
|
|
|
tempArray[2] = cryTools.cryAnim._v.various[35][1].rotation as eulerangles
|
|
|
|
|
|
tempArray[2] = (tempArray[2].x as Integer) as String + " " + (tempArray[2].y as Integer) as String + " " + (tempArray[2].z as Integer) as String
|
|
|
)
|
|
|
)catch()
|
|
|
|
|
|
|
|
|
|
|
|
if chkPosOffset.checked != chkRotOffset.checked then
|
|
|
(
|
|
|
labEditOffset1.visible = true
|
|
|
edOffset1.visible = true
|
|
|
labEditOffset2.visible = false
|
|
|
edOffset2.visible = false
|
|
|
grpAxis.height = 107
|
|
|
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Target" "").height = 148
|
|
|
|
|
|
if chkPosOffset.checked == true then
|
|
|
(
|
|
|
labEditOffset1.text = "Pos"
|
|
|
edOffset1.text = tempArray[1]
|
|
|
)
|
|
|
if chkRotOffset.checked == true then
|
|
|
(
|
|
|
labEditOffset1.text = "Rot"
|
|
|
edOffset1.text = tempArray[2]
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if chkPosOffset.checked == false and chkRotOffset.checked == false then
|
|
|
(
|
|
|
labEditOffset1.visible = false
|
|
|
labEditOffset2.visible = false
|
|
|
edOffset1.visible = false
|
|
|
edOffset2.visible = false
|
|
|
grpAxis.height = 85
|
|
|
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Target" "").height = 128
|
|
|
)
|
|
|
|
|
|
if chkPosOffset.checked == true and chkRotOffset.checked == true then
|
|
|
(
|
|
|
labEditOffset1.visible = true
|
|
|
labEditOffset2.visible = true
|
|
|
edOffset1.visible = true
|
|
|
edOffset2.visible = true
|
|
|
grpAxis.height = 125
|
|
|
|
|
|
labEditOffset1.text = "Pos"
|
|
|
edOffset1.text = tempArray[1]
|
|
|
labEditOffset2.text = "Rot"
|
|
|
edOffset2.text = tempArray[2]
|
|
|
|
|
|
(cryTools.cryAnim.UI.main._f.getUI "Target" "").height = 166
|
|
|
)
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.target._f.updateOffset" )
|
|
|
)
|
|
|
updateOffset = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.target._f.updateOffset function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
--################################################################
|
|
|
-- DEF:cryTools.cryAnim.UI.main.target._f.setManualOffset
|
|
|
----------------------------------------------------------------------------------------------------------------------------------
|
|
|
-- sets the new value for the offset of the selected node and the selected item in the listbox
|
|
|
--################################################################
|
|
|
--///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
cryTools.cryAnim.UI.main.target._f.setManualOffset = function setManualOffset lab ed =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
local tempVar
|
|
|
local error = false
|
|
|
try
|
|
|
(
|
|
|
tempVar = execute ("eulerangles " + ed.text)
|
|
|
)
|
|
|
catch ( error = true )
|
|
|
|
|
|
if lab.text == "Pos" then
|
|
|
(
|
|
|
if error == false then
|
|
|
(
|
|
|
if classOf tempVar == Point3 then
|
|
|
(
|
|
|
cryTools.cryAnim._v.various[35][1].position = tempVar
|
|
|
print "Changed Offset Pos"
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ed.text = cryTools.cryAnim._v.various[35][1].position as String
|
|
|
error = true
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ed.text = cryTools.cryAnim._v.various[35][1].position as String
|
|
|
)
|
|
|
)
|
|
|
if lab.text == "Rot" then
|
|
|
(
|
|
|
local tempRot = cryTools.cryAnim._v.various[35][1].rotation as eulerangles
|
|
|
tempRot = (tempRot.x as Integer) as String + " " + (tempRot.y as Integer) as String + " " + (tempRot.z as Integer) as String
|
|
|
if error == false then
|
|
|
(
|
|
|
if classOf tempVar == EulerAngles then
|
|
|
(
|
|
|
cryTools.cryAnim._v.various[35][1].rotation = tempVar
|
|
|
print "Changed Offset Rot"
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ed.text = tempRot
|
|
|
error = true
|
|
|
)
|
|
|
)
|
|
|
else
|
|
|
(
|
|
|
ed.text = tempRot
|
|
|
)
|
|
|
)
|
|
|
|
|
|
if error == true then
|
|
|
messageBox "Invalid value entered" title:("Manual " + lab.text + " Offset")
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.target._f.setManualOffset" )
|
|
|
)
|
|
|
setManualOffset = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.target._f.setManualOffset function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.main.settings._f.callCustomizeDialog = function callCustomizeDialog =
|
|
|
(
|
|
|
try
|
|
|
(
|
|
|
rollout customizeRolloutsRO "Customize Rollouts"
|
|
|
(
|
|
|
|
|
|
label labRow1 "Row 1" pos:[28,8]
|
|
|
dropdownlist ddRow1_1 "" pos:[8,25] width:90 height:15
|
|
|
dropdownlist ddRow1_2 "" pos:[8,45] width:90 height:15
|
|
|
dropdownlist ddRow1_3 "" pos:[8,65] width:90 height:15
|
|
|
dropdownlist ddRow1_4 "" pos:[8,85] width:90 height:15
|
|
|
dropdownlist ddRow1_5 "" pos:[8,105] width:90 height:15
|
|
|
dropdownlist ddRow1_6 "" pos:[8,125] width:90 height:15
|
|
|
dropdownlist ddRow1_7 "" pos:[8,145] width:90 height:15
|
|
|
dropdownlist ddRow1_8 "" pos:[8,165] width:90 height:15
|
|
|
dropdownlist ddRow1_9 "" pos:[8,185] width:90 height:15
|
|
|
dropdownlist ddRow1_10 "" pos:[8,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
label labRow2 "Row 2" pos:[128,8]
|
|
|
dropdownlist ddRow2_1 "" pos:[108,25] width:90 height:15
|
|
|
dropdownlist ddRow2_2 "" pos:[108,45] width:90 height:15
|
|
|
dropdownlist ddRow2_3 "" pos:[108,65] width:90 height:15
|
|
|
dropdownlist ddRow2_4 "" pos:[108,85] width:90 height:15
|
|
|
dropdownlist ddRow2_5 "" pos:[108,105] width:90 height:15
|
|
|
dropdownlist ddRow2_6 "" pos:[108,125] width:90 height:15
|
|
|
dropdownlist ddRow2_7 "" pos:[108,145] width:90 height:15
|
|
|
dropdownlist ddRow2_8 "" pos:[108,165] width:90 height:15
|
|
|
dropdownlist ddRow2_9 "" pos:[108,185] width:90 height:15
|
|
|
dropdownlist ddRow2_10 "" pos:[108,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
label labRow3 "Row 3" pos:[228,8]
|
|
|
dropdownlist ddRow3_1 "" pos:[208,25] width:90 height:15
|
|
|
dropdownlist ddRow3_2 "" pos:[208,45] width:90 height:15
|
|
|
dropdownlist ddRow3_3 "" pos:[208,65] width:90 height:15
|
|
|
dropdownlist ddRow3_4 "" pos:[208,85] width:90 height:15
|
|
|
dropdownlist ddRow3_5 "" pos:[208,105] width:90 height:15
|
|
|
dropdownlist ddRow3_6 "" pos:[208,125] width:90 height:15
|
|
|
dropdownlist ddRow3_7 "" pos:[208,145] width:90 height:15
|
|
|
dropdownlist ddRow3_8 "" pos:[208,165] width:90 height:15
|
|
|
dropdownlist ddRow3_9 "" pos:[208,185] width:90 height:15
|
|
|
dropdownlist ddRow3_10 "" pos:[208,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow4 "Row 4" pos:[328,8]
|
|
|
dropdownlist ddRow4_1 "" pos:[308,25] width:90 height:15
|
|
|
dropdownlist ddRow4_2 "" pos:[308,45] width:90 height:15
|
|
|
dropdownlist ddRow4_3 "" pos:[308,65] width:90 height:15
|
|
|
dropdownlist ddRow4_4 "" pos:[308,85] width:90 height:15
|
|
|
dropdownlist ddRow4_5 "" pos:[308,105] width:90 height:15
|
|
|
dropdownlist ddRow4_6 "" pos:[308,125] width:90 height:15
|
|
|
dropdownlist ddRow4_7 "" pos:[308,145] width:90 height:15
|
|
|
dropdownlist ddRow4_8 "" pos:[308,165] width:90 height:15
|
|
|
dropdownlist ddRow4_9 "" pos:[308,185] width:90 height:15
|
|
|
dropdownlist ddRow4_10 "" pos:[308,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow5 "Row 5" pos:[428,8]
|
|
|
dropdownlist ddRow5_1 "" pos:[408,25] width:90 height:15
|
|
|
dropdownlist ddRow5_2 "" pos:[408,45] width:90 height:15
|
|
|
dropdownlist ddRow5_3 "" pos:[408,65] width:90 height:15
|
|
|
dropdownlist ddRow5_4 "" pos:[408,85] width:90 height:15
|
|
|
dropdownlist ddRow5_5 "" pos:[408,105] width:90 height:15
|
|
|
dropdownlist ddRow5_6 "" pos:[408,125] width:90 height:15
|
|
|
dropdownlist ddRow5_7 "" pos:[408,145] width:90 height:15
|
|
|
dropdownlist ddRow5_8 "" pos:[408,165] width:90 height:15
|
|
|
dropdownlist ddRow5_9 "" pos:[408,185] width:90 height:15
|
|
|
dropdownlist ddRow5_10 "" pos:[408,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow6 "Row 6" pos:[528,8]
|
|
|
dropdownlist ddRow6_1 "" pos:[508,25] width:90 height:15
|
|
|
dropdownlist ddRow6_2 "" pos:[508,45] width:90 height:15
|
|
|
dropdownlist ddRow6_3 "" pos:[508,65] width:90 height:15
|
|
|
dropdownlist ddRow6_4 "" pos:[508,85] width:90 height:15
|
|
|
dropdownlist ddRow6_5 "" pos:[508,105] width:90 height:15
|
|
|
dropdownlist ddRow6_6 "" pos:[508,125] width:90 height:15
|
|
|
dropdownlist ddRow6_7 "" pos:[508,145] width:90 height:15
|
|
|
dropdownlist ddRow6_8 "" pos:[508,165] width:90 height:15
|
|
|
dropdownlist ddRow6_9 "" pos:[508,185] width:90 height:15
|
|
|
dropdownlist ddRow6_10 "" pos:[508,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow7 "Row 7" pos:[628,8]
|
|
|
dropdownlist ddRow7_1 "" pos:[608,25] width:90 height:15
|
|
|
dropdownlist ddRow7_2 "" pos:[608,45] width:90 height:15
|
|
|
dropdownlist ddRow7_3 "" pos:[608,65] width:90 height:15
|
|
|
dropdownlist ddRow7_4 "" pos:[608,85] width:90 height:15
|
|
|
dropdownlist ddRow7_5 "" pos:[608,105] width:90 height:15
|
|
|
dropdownlist ddRow7_6 "" pos:[608,125] width:90 height:15
|
|
|
dropdownlist ddRow7_7 "" pos:[608,145] width:90 height:15
|
|
|
dropdownlist ddRow7_8 "" pos:[608,165] width:90 height:15
|
|
|
dropdownlist ddRow7_9 "" pos:[608,185] width:90 height:15
|
|
|
dropdownlist ddRow7_10 "" pos:[608,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow8 "Row 8" pos:[728,8]
|
|
|
dropdownlist ddRow8_1 "" pos:[708,25] width:90 height:15
|
|
|
dropdownlist ddRow8_2 "" pos:[708,45] width:90 height:15
|
|
|
dropdownlist ddRow8_3 "" pos:[708,65] width:90 height:15
|
|
|
dropdownlist ddRow8_4 "" pos:[708,85] width:90 height:15
|
|
|
dropdownlist ddRow8_5 "" pos:[708,105] width:90 height:15
|
|
|
dropdownlist ddRow8_6 "" pos:[708,125] width:90 height:15
|
|
|
dropdownlist ddRow8_7 "" pos:[708,145] width:90 height:15
|
|
|
dropdownlist ddRow8_8 "" pos:[708,165] width:90 height:15
|
|
|
dropdownlist ddRow8_9 "" pos:[708,185] width:90 height:15
|
|
|
dropdownlist ddRow8_10 "" pos:[708,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow9 "Row 9" pos:[828,8]
|
|
|
dropdownlist ddRow9_1 "" pos:[808,25] width:90 height:15
|
|
|
dropdownlist ddRow9_2 "" pos:[808,45] width:90 height:15
|
|
|
dropdownlist ddRow9_3 "" pos:[808,65] width:90 height:15
|
|
|
dropdownlist ddRow9_4 "" pos:[808,85] width:90 height:15
|
|
|
dropdownlist ddRow9_5 "" pos:[808,105] width:90 height:15
|
|
|
dropdownlist ddRow9_6 "" pos:[808,125] width:90 height:15
|
|
|
dropdownlist ddRow9_7 "" pos:[808,145] width:90 height:15
|
|
|
dropdownlist ddRow9_8 "" pos:[808,165] width:90 height:15
|
|
|
dropdownlist ddRow9_9 "" pos:[808,185] width:90 height:15
|
|
|
dropdownlist ddRow9_10 "" pos:[808,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
label labRow10 "Row 10" pos:[928,8]
|
|
|
dropdownlist ddRow10_1 "" pos:[908,25] width:90 height:15
|
|
|
dropdownlist ddRow10_2 "" pos:[908,45] width:90 height:15
|
|
|
dropdownlist ddRow10_3 "" pos:[908,65] width:90 height:15
|
|
|
dropdownlist ddRow10_4 "" pos:[908,85] width:90 height:15
|
|
|
dropdownlist ddRow10_5 "" pos:[908,105] width:90 height:15
|
|
|
dropdownlist ddRow10_6 "" pos:[908,125] width:90 height:15
|
|
|
dropdownlist ddRow10_7 "" pos:[908,145] width:90 height:15
|
|
|
dropdownlist ddRow10_8 "" pos:[908,165] width:90 height:15
|
|
|
dropdownlist ddRow10_9 "" pos:[908,185] width:90 height:15
|
|
|
dropdownlist ddRow10_10 "" pos:[908,205] width:90 height:15
|
|
|
|
|
|
|
|
|
|
|
|
button btnSave "Save" pos:[408,235] width:90 height:20
|
|
|
button btnCancel "Cancel" pos:[508,235] width:90 height:20
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function updateDialog init:undefined =
|
|
|
(
|
|
|
local rolloutList = #("---------------------------", "Target", "Operation", "Pivot", "Models", "Muscles", "Locator", "Load / Save / Export", "Pose Manager", "Perforce", "Settings")
|
|
|
|
|
|
if init != undefined then
|
|
|
(
|
|
|
for i = 1 to 10 do
|
|
|
(
|
|
|
for f = 1 to 10 do
|
|
|
(
|
|
|
local tempDD = execute ("cryTools.cryAnim.UI.main.settings.customizeRollouts.ddRow" + i as String + "_" + f as String)
|
|
|
tempDD.items = rolloutList
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
on customizeRolloutsRO open do
|
|
|
(
|
|
|
updateDialog init:true
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
on btnCancel pressed do
|
|
|
(
|
|
|
try destroyDialog cryTools.cryAnim.UI.main.settings.customizeRollouts catch()
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
cryTools.cryAnim.UI.main.settings.customizeRollouts = customizeRolloutsRO
|
|
|
customizeRolloutsRO = undefined
|
|
|
|
|
|
createDialog cryTools.cryAnim.UI.main.settings.customizeRollouts 1000 260
|
|
|
|
|
|
)
|
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.main.settings._f.callCustomizeDialog" )
|
|
|
)
|
|
|
callCustomizeDialog = undefined
|
|
|
logOutput "> Created cryTools.cryAnim.UI.main.settings._f.callCustomizeDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
logOutput ">> functions.ms loaded" |