212 lines
5.8 KiB
Plaintext
Executable File
212 lines
5.8 KiB
Plaintext
Executable File
macroScript CreateMover
|
|
category:"Biped Tools"
|
|
toolTip:"Creates a mover"
|
|
icon:#("Helpers", 1)
|
|
(
|
|
|
|
fn CreateDummyAndMover =
|
|
(
|
|
--Get selected Biped part
|
|
object = selection[1]
|
|
|
|
--get COM name
|
|
bipname = biped.getNode object 14
|
|
|
|
--Delete any existing Dummy or Mover Nodes
|
|
moverNode = getnodebyname "mover" exact:true
|
|
if moverNode != undefined then delete moverNode
|
|
dummyNode = getnodebyname "Dummy01" exact:true
|
|
if dummyNode != undefined then delete dummyNode
|
|
axisNode = getnodebyname "axis_helper" exact:true
|
|
if axisNode != undefined then delete axisNode
|
|
layer = layermanager.getlayerfromname "Mover Node"
|
|
if layer != undefined then layermanager.deleteLayerByName "Mover Node"
|
|
|
|
--move slider to start
|
|
slidertime = animationrange.start
|
|
|
|
--get root bone z height
|
|
bipname.transform.controller.figureMode = true
|
|
z_height = bipname.transform[4].z
|
|
bipname.transform.controller.figureMode = false
|
|
|
|
--create Dummy node
|
|
newDummyNode = Dummy()
|
|
newDummyNode.name = "Dummy01"
|
|
newDummyNode.boxsize = [.2,.2,.2]
|
|
newDummyNode.pos = [0.0,0.0,z_height]
|
|
|
|
--parent biped to it
|
|
bipname.parent = newDummyNode
|
|
|
|
--create Mover Node
|
|
newMoverNode = Dummy()
|
|
newMoverNode.name = "mover"
|
|
newMoverNode.boxsize = [.3,.3,.3]
|
|
newMoverNode.pos = [0.0,0.0,z_height]
|
|
|
|
--create axis helper node
|
|
axis_helper = Point pos:[0,0,1] isSelected:off cross:off axistripod:on size:0.25 name:"axis_helper"
|
|
setTransformLockFlags axis_helper #all
|
|
|
|
--parent nodes correctly
|
|
newMoverNode.parent = newDummyNode
|
|
axis_helper.parent = newMoverNode
|
|
|
|
--create a new layer for Dummy and Mover nodes
|
|
layer = layermanager.newlayerfromname "Mover Node"
|
|
layer.addnode axis_helper
|
|
layer.addnode newMoverNode
|
|
layer.addnode newDummyNode
|
|
)
|
|
|
|
fn UpdateMover xp yp zp yaw pitch roll =
|
|
(
|
|
--check selection
|
|
if (($mover != undefined) and ($mover.name == "mover")) then
|
|
(
|
|
select $mover
|
|
|
|
dummyNode = selection[1].parent
|
|
|
|
biproot=$char.controller
|
|
|
|
for child in dummyNode.children do
|
|
(
|
|
if classof child == biped_object then biproot = child
|
|
)
|
|
|
|
biproot.transform.controller.figuremode = true
|
|
figureModeBipRot = biproot.transform as eulerAngles
|
|
figureModeBipPos = biproot.transform[4]
|
|
biproot.transform.controller.figuremode = false
|
|
|
|
--delete all the keys on the mover track
|
|
deleteKeys $.controller #allKeys
|
|
|
|
dividorLimit = (ceil (((animationrange.end.frame - animationrange.start.frame) as float) / 140)) as integer
|
|
|
|
with animate on
|
|
(
|
|
dividorCount = 0
|
|
for i = animationrange.start to animationrange.end do
|
|
(
|
|
|
|
if dividorCount == 0 then (
|
|
|
|
slidertime = i
|
|
|
|
--get position and rotation
|
|
bipPos = biped.getTransform biproot #pos
|
|
bipRot = (biped.getTransform biproot #rotation) as eulerAngles
|
|
|
|
--translate mover node
|
|
if (xp ==true) then
|
|
(
|
|
$mover.pos.x = bipPos.x
|
|
)
|
|
else
|
|
(
|
|
$mover.pos.x =0.0
|
|
)
|
|
|
|
if (yp == true) then
|
|
(
|
|
$mover.pos.y = bipPos.y
|
|
)
|
|
else
|
|
(
|
|
$mover.pos.y =0.0
|
|
)
|
|
|
|
if (zp == true) then
|
|
(
|
|
$mover.pos.z = bipPos.z
|
|
)
|
|
else
|
|
(
|
|
$mover.pos.z = figureModeBipPos.z
|
|
)
|
|
|
|
-- rotate mover node
|
|
if (pitch == true) then
|
|
(
|
|
$mover.rotation.x_rotation = 0.0
|
|
)
|
|
else
|
|
(
|
|
$mover.rotation.x_rotation=0.0
|
|
)
|
|
|
|
if (roll == true) then
|
|
(
|
|
$mover.rotation.y_rotation = 0.0
|
|
)
|
|
else
|
|
(
|
|
$mover.rotation.y_rotation = 0.0
|
|
)
|
|
|
|
if (yaw == true) then
|
|
(
|
|
$mover.rotation.z_rotation = bipRot.z - figureModeBipRot.z
|
|
)
|
|
else
|
|
(
|
|
$mover.rotation.z_rotation = 0.0
|
|
)
|
|
)
|
|
dividorCount = dividorCount + 1
|
|
if dividorCount == dividorLimit then dividorCount = 0
|
|
)
|
|
)
|
|
)
|
|
else
|
|
(
|
|
messagebox "Invalid mover"
|
|
)
|
|
)
|
|
|
|
if ((CreateMover != undefined) and (CreateMover.isdisplayed)) then
|
|
(
|
|
(destroyDialog CreateMover)
|
|
)
|
|
|
|
rollout CreateMover "Create Mover" width:150 height:200
|
|
(
|
|
groupBox grpDynamic "" pos:[19,31] width:161 height:283
|
|
label lbl1 "Copy the following from the root track :" pos:[26,43] width:144 height:32
|
|
|
|
groupBox grpPos "Position" pos:[27,83] width:144 height:72
|
|
checkbox chkX "X" pos:[39,98] width:116 height:15 enabled:true checked:true toolTip:"default is 0.0"
|
|
checkbox chkY "Y" pos:[39,116] width:116 height:15 enabled:true checked:true toolTip:"default is 0.0"
|
|
checkbox chkZ "Z" pos:[39,134] width:116 height:15 enabled:true checked:false toolTip:"default is figuremode Z"
|
|
|
|
groupBox grpRot "Rotation" pos:[28,162] width:144 height:72
|
|
checkbox chkYaw "Yaw" pos:[39,178] width:116 height:15 enabled:true checked:true toolTip:"default is yaw - figuremode yaw"
|
|
checkbox chkPitch "Pitch" pos:[39,197] width:116 height:15 enabled:false checked:false toolTip:"default is 0.0"
|
|
checkbox chkRoll "Roll" pos:[39,215] width:116 height:15 enabled:false checked:false toolTip:"default is 0.0"
|
|
|
|
button btnCreateDynamicMover "Create mover" pos:[28,246] width:144 height:48 toolTip:"Create the mover"
|
|
|
|
on btnCreateDynamicMover pressed do
|
|
(
|
|
--check selection
|
|
if (selection.count == 0) or ((classof selection[1])!= biped_object) then
|
|
(
|
|
messagebox "Select Biped to add Dummy and Mover nodes to"
|
|
)
|
|
else
|
|
(
|
|
-- disable the redraw
|
|
disableSceneRedraw()
|
|
CreateDummyAndMover()
|
|
UpdateMover chkX.checked chkY.checked chkZ.checked chkYaw.checked chkPitch.checked chkRoll.checked
|
|
enableSceneRedraw()
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
createDialog CreateMover 215 430
|
|
) |