Files
gtav-src/tools_ng/dcc/current/max2012/ui/macroscripts/CreateMover.mcr
T
2025-09-29 00:52:08 +02:00

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
)