--------------------------------------------------------------------- -- Torque DTS exporter utility for 3ds Max 6/7/8 --------------------------------------------------------------------- -- Written by Dark Industries -- Version 1.3.1 RC3 -- Last Updated: 5/31/2006 --------------------------------------------------------------------- --------------------------------------------------------------------- -- convert to boolean --------------------------------------------------------------------- function ConvertToBool state = ( if state == "true" then ( newState = true ) else newState = false newState ) --------------------------------------------------------------------- -- create/load global variables --------------------------------------------------------------------- Global gDTSUtility_rollout, DTSUtilityDialog, QuickExport_rollout, Bounds_rollout, Detail_rollout Global Sequence_rollout, Node_rollout, Billboard_rollout, Trigger_rollout, Settings_rollout Global Collision_rollout, Material_rollout, RenameMaterial_rollout, Help_rollout, NewSequence_rollout Global BoundsTarget_rollout, CFGSettings_rollout, Visibility_rollout, DMP_rollout Global SelectedNode, SelectedMaterial, SelectedMaterialID, SelectedMaterialType Global About_rollout, GrayBar_bmp, UiHeight, UiX, UiY, UiMode, ShowDMP, UiMin, DmpPath, AutoCFG Global BoundsPadX, BoundsPadY, BoundsPadY, NodeX, NodeY, NodeZ, ShapeX, ShapeY, ShapeZ Global QuickExportOpen, BoundsOpen, DetaiOpenl, BillboardOpen, NodeOpen, SequenceOpen Global TriggerOpen, VisibilityOpen, CollisionOpen, MaterialOpen, HelpPath Global FreezeShape, FreezeMarkers GrayBar_bmp = openBitMap "$scripts\dts\dts_bar.bmp" DmpPath = "" --------------------------------------------------------------------- -- update global variables from ini --------------------------------------------------------------------- UiMin = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "UiMin" ) UiHeight = (getINISetting "$scripts\dts_prefs.ini" "Interface" "UiHeight" as integer) UiX = (getINISetting "$scripts\dts_prefs.ini" "Interface" "UiX" as integer) UiY = (getINISetting "$scripts\dts_prefs.ini" "Interface" "UiY" as integer) BoundsPadX = (getINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadX" as float) BoundsPadY = (getINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadY" as float) BoundsPadZ = (getINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadZ" as float) NodeX = (getINISetting "$scripts\dts_prefs.ini" "Settings" "NodeX" as float) NodeY = (getINISetting "$scripts\dts_prefs.ini" "Settings" "NodeY" as float) NodeZ = (getINISetting "$scripts\dts_prefs.ini" "Settings" "NodeZ" as float) ShapeX = (getINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeX" as float) ShapeY = (getINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeY" as float) ShapeZ = (getINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeZ" as float) FreezeShape = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "FreezeShape" ) FreezeMarkers = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "FreezeMarkers" ) AutoCFG = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "AutoCFG" ) ShowDMP = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "ShowDMP" ) HelpPath = getINISetting "$scripts\dts_prefs.ini" "Settings" "HelpPath" --------------------------------------------------------------------- -- load rollout states from ini --------------------------------------------------------------------- QuickExportOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "QuickExport" ) BoundsOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Bounds" ) DetailOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Detail" ) BillboardOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Billboard" ) NodeOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Node" ) SequenceOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Sequence" ) TriggerOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Trigger" ) VisibilityOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Visibility" ) CollisionOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Collision" ) MaterialOpen = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Interface" "Material" ) --------------------------------------------------------------------- -- create DTS shape --------------------------------------------------------------------- function CreateDTSShape = ( if $base01 == null then dummy name: "base01" boxsize:[ShapeX, ShapeY, ShapeZ] if $start01 == null then dummy name: "start01" boxsize:[ShapeX, ShapeY, ShapeZ] $start01.parent = $base01 if FreezeShape == true then ( $base01.isFrozen = true $start01.isFrozen = true ) selection = $detail* selection.parent = $base01 ) --------------------------------------------------------------------- -- remove detail markers --------------------------------------------------------------------- function DeleteDetailMarkers = ( selection = $detail* if selection.count != 0 then delete selection ) --------------------------------------------------------------------- -- create detail markers from array --------------------------------------------------------------------- function CreateDetailMarkers arr = ( for i = 1 to arr.count do ( detailName = "detail" + arr[i] d = dummy name: detailName d.boxsize = [ShapeX, ShapeY, ShapeZ] d.parent = $base01 if FreezeMarkers == true then d.isFrozen = true ) ) --------------------------------------------------------------------- -- create bounds object --------------------------------------------------------------------- function MakeBounds align xPad yPad zPad = ( if selection.count != 0 then ( -- delete the current bounds try(delete $bounds) catch() -- get the bounds of the selected object(s) w = (selection.max.x - selection.min.x) + xPad l = (selection.max.y - selection.min.y) + yPad if align == "bottom" then ( h = selection.max.z - selection.min.z c = selection.center - [0, 0, (h/2)] h = (h + zPad/2) if selection.min.z > 0 then ( h = h + selection.min.z c.z = 0 ) ) else if align == "center" then ( h = selection.max.z - selection.min.z c = selection.center - [0, 0, (h/2)] ) -- create the bounds mesh b = Box length:l width:w height:h pos:c b.name = "bounds" b.boxmode = on converttomesh b setInheritanceFlags $bounds #{1,2} ) ) --------------------------------------------------------------------- -- remove custom user property --------------------------------------------------------------------- function RemoveUserProp propObj propName propVal = ( curProp = getUserPropBuffer propObj searchStr = "\r\n" + propName + " = " + (propVal as string) starStr = findString curProp searchStr if starStr != undefined then ( endStr = searchStr.count propNew = replace curProp starStr endStr "" setUserPropBuffer propObj propNew ) ) --------------------------------------------------------------------- -- apply node preset --------------------------------------------------------------------- function ApplyNodePreset preset = ( setNames = getINISetting "$scripts\dts_nodes.ini" "NodeSets" preset presetList = (filterString setNames ", -") if presetList.count != 0 then ( presetList CreateDTSShape() for name in presetList do ( n = getNodeByName name if n == null then ( n = dummy name: name n.boxsize = [NodeX, NodeY, NodeZ] n.parent = $start01 ) setUserProp n "alwaysExport" true setUserProp n "neverExport" false setUserProp n "neverAnimate" false ) try( Node_rollout.UpdateNodes() ) catch() ) ) --------------------------------------------------------------------- -- get size of detail --------------------------------------------------------------------- function GetDetailSize detail = ( baseName = trimright detail "1234567890" detailNumber = trimleft detail baseName as number detailNumber ) --------------------------------------------------------------------- -- create .cfg file --------------------------------------------------------------------- function CreateConfigFile savePath = ( clearSelection() select $Helpers if selection.count != 0 then ( alwaysExportArr = #() neverExportArr = #() neverAnimateArr = #() for node in selection do ( if getUserProp node "alwaysExport" == true then append alwaysExportArr node.name if getUserProp node "neverExport" == true then append neverExportArr node.name if getUserProp node "neverAnimate" == true then append neverAnimateArr node.name ) if savePath != undefined then ( cfgSavePath = savePath ) else ( cfgSavePath = getSavePath caption:"Choose the location to save your .cfg file:" ) if cfgSavePath != undefined then ( cfgFilePath = cfgSavePath + "\dtsScene.cfg" cfgFile = createfile cfgFilePath -- write node settings to the text file format "%\n" "AlwaysExport:" to:cfgFile for name in alwaysExportArr do ( format "%\n" name to:cfgFile ) format "%" "\n" to:cfgFile format "%\n" "NeverExport:" to:cfgFile for name in neverExportArr do ( format "%\n" name to:cfgFile ) format "%" "\n" to:cfgFile format "%\n" "NeverAnimate:" to:cfgFile for name in neverAnimateArr do ( format "%\n" name to:cfgFile ) format "%" "\n" to:cfgFile -- write cfg parameters to the text file if getNodeByName "cfg_settings" != null then ( format "%" "//cfg settings\n" to:cfgFile cfg = getNodeByName "cfg_settings" nodeCollection = "-" if getUserProp cfg "NodeCollection" == true then nodeCollection = "+" format "%Dump::NodeCollection\n" nodeCollection to:cfgFile shapeConstruction = "-" if getUserProp cfg "ShapeConstruction" == true then shapeConstruction = "+" format "%Dump::ShapeConstruction\n" shapeConstruction to:cfgFile nodeCulling = "-" if getUserProp cfg "NodeCulling" == true then nodeCulling = "+" format "%Dump::NodeCulling\n" nodeCulling to:cfgFile nodeStates = "-" if getUserProp cfg "NodeStates" == true then nodeStates = "+" format "%Dump::NodeStates\n" nodeStates to:cfgFile nodeStateDetails = "-" if getUserProp cfg "NodeStateDetails" == true then nodeStateDetails = "+" format "%Dump::NodeStateDetails\n" nodeStateDetails to:cfgFile objectStates = "-" if getUserProp cfg "ObjectStates" == true then objectStates = "+" format "%Dump::ObjectStates\n" objectStates to:cfgFile objectStateDetails = "-" if getUserProp cfg "ObjectStateDetails" == true then objectStateDetails = "+" format "%Dump::ObjectStateDetails\n" objectStateDetails to:cfgFile objectOffsets = "-" if getUserProp cfg "ObjectOffsets" == true then objectOffsets = "+" format "%Dump::ObjectOffsets\n" objectOffsets to:cfgFile sequenceDetails = "-" if getUserProp cfg "SequenceDetails" == true then sequenceDetails = "+" format "%Dump::SequenceDetails\n" sequenceDetails to:cfgFile shapeHierarchy = "-" if getUserProp cfg "ShapeHierarchy" == true then shapeHierarchy = "+" format "%Dump::ShapeHierarchy\n" shapeHierarchy to:cfgFile allowEmptySubtrees = "-" if getUserProp cfg "AllowEmptySubtrees" == true then allowEmptySubtrees = "+" format "%Error::AllowEmptySubtrees\n" allowEmptySubtrees to:cfgFile allowCrossedDetails = "-" if getUserProp cfg "AllowCrossedDetails" == true then allowCrossedDetails = "+" format "%Error::AllowCrossedDetails\n" allowCrossedDetails to:cfgFile allowUnusedMeshes = "-" if getUserProp cfg "AllowUnusedMeshes" == true then allowUnusedMeshes = "+" format "%Error::AllowUnusedMeshes\n" allowUnusedMeshes to:cfgFile defaultCyclic = "-" if getUserProp cfg "defaultCyclic" == true then defaultCyclic = "+" format "%Sequence::defaultCyclic\n" defaultCyclic to:cfgFile defaultBlend = "-" if getUserProp cfg "defaultBlend" == true then defaultBlend = "+" format "%Sequence::defaultBlend\n" defaultBlend to:cfgFile defaultFirstLastFrameSame = "-" if getUserProp cfg "defaultFirstLastFrameSame" == true then defaultFirstLastFrameSame = "+" format "%Sequence::defaultFirstLastFrameSame\n" defaultFirstLastFrameSame to:cfgFile defaultUseFrameRate = "-" if getUserProp cfg "ObjectOffsets" == true then defaultUseFrameRate = "+" format "%Sequence::defaultUseFrameRate\n" defaultFirstLastFrameSame to:cfgFile defaultIgnoreGroundTransform = "-" if getUserProp cfg "defaultIgnoreGroundTransform" == true then defaultIgnoreGroundTransform = "+" format "%Sequence::defaultIgnoreGroundTransform\n" defaultIgnoreGroundTransform to:cfgFile defaultUseGroundFrameRate = "-" if getUserProp cfg "defaultUseGroundFrameRate" == true then defaultUseGroundFrameRate = "+" format "%Sequence::defaultUseGroundFrameRate\n" defaultUseGroundFrameRate to:cfgFile defaultEnableMorphAnimation = "-" if getUserProp cfg "defaultEnableMorphAnimation" == true then defaultEnableMorphAnimation = "+" format "%Sequence::defaultEnableMorphAnimation\n" defaultEnableMorphAnimation to:cfgFile defaultEnableVisAnimation = "-" if getUserProp cfg "defaultEnableVisAnimation" == true then defaultEnableVisAnimation = "+" format "%Sequence::defaultEnableVisAnimation\n" defaultEnableVisAnimation to:cfgFile defaultEnableTransformAnimation = "-" if getUserProp cfg "defaultEnableTransformAnimation" == true then defaultEnableTransformAnimation = "+" format "%Sequence::defaultEnableTransformAnimation\n" defaultEnableTransformAnimation to:cfgFile defaultForceMorphAnimation = "-" if getUserProp cfg "defaultForceMorphAnimation" == true then defaultForceMorphAnimation = "+" format "%Sequence::defaultForceMorphAnimation\n" defaultForceMorphAnimation to:cfgFile defaultForceVisAnimation = "-" if getUserProp cfg "defaultForceVisAnimation" == true then defaultForceVisAnimation = "+" format "%Sequence::defaultForceVisAnimation\n" defaultForceVisAnimation to:cfgFile defaultForceTransformAnimation = "-" if getUserProp cfg "defaultForceTransformAnimation" == true then defaultForceTransformAnimation = "+" format "%Sequence::defaultForceTransformAnimation\n" defaultForceTransformAnimation to:cfgFile defaultOverrideDuration = "-" if getUserProp cfg "defaultOverrideDuration" == true then defaultOverrideDuration = "+" format "%Sequence::defaultOverrideDuration\n" defaultOverrideDuration to:cfgFile format "=Sequence::defaultFrameRate %\n" (getUserProp cfg "defaultFrameRate") to:cfgFile format "=Sequence::defaultGroundFrameRate %\n" (getUserProp cfg "defaultGroundFrameRate") to:cfgFile format "=Sequence::defaultDuration %\n" (getUserProp cfg "defaultDuration") to:cfgFile format "=Sequence::defaultNumFrames %\n" (getUserProp cfg "defaultNumFrames") to:cfgFile format "=Sequence::defaultNumGroundFrames %\n" (getUserProp cfg "defaultNumGroundFrames ") to:cfgFile format "=Sequence::defaultDefaultSequencePriority %\n" (getUserProp cfg "defaultDefaultSequencePriority") to:cfgFile enableTwoSidedMaterials = "-" if getUserProp cfg "EnableTwoSidedMaterials" == true then enableTwoSidedMaterials = "+" format "%Param::EnableTwoSidedMaterials\n" enableTwoSidedMaterials to:cfgFile collapseTransforms = "-" if getUserProp cfg "CollapseTransforms" == true then collapseTransforms = "+" format "%Param::CollapseTransforms\n" collapseTransforms to:cfgFile sequenceExport = "-" if getUserProp cfg "SequenceExport" == true then sequenceExport = "+" format "%Param::SequenceExport\n" sequenceExport to:cfgFile format "=Params::AnimationDelta %\n" (getUserProp cfg "AnimationDelta") to:cfgFile format "=Params::MaxFrameRate %\n" (getUserProp cfg "MaxFrameRate") to:cfgFile format "=Params::SkinWeightThreshhold %\n" (getUserProp cfg "SkinWeightThreshhold") to:cfgFile format "=Params::weightsPerVertex %\n" (getUserProp cfg "weightsPerVertex") to:cfgFile format "=Params::baseTexturePath %" "." to:cfgFile IgnoreOnSkinMesh = "-" if getUserProp cfg "IgnoreOnSkinMesh" == true then IgnoreOnSkinMesh = "+" format "%SmoothingGroup::IgnoreOnSkinMesh\n" IgnoreOnSkinMesh to:cfgFile IgnoreDuringCollapse = "-" if getUserProp cfg "IgnoreDuringCollapse" == true then IgnoreDuringCollapse = "+" format "%SmoothingGroup::IgnoreDuringCollapse\n" IgnoreDuringCollapse to:cfgFile ) close cfgFile ) ) ) --------------------------------------------------------------------- -- load settings from ini --------------------------------------------------------------------- function ReloadSettings = ( ShowDMP = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "ShowDMP" ) BoundsPadX = (getINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadX" as float) BoundsPadY = (getINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadY" as float) BoundsPadZ = (getINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadZ" as float) NodeX = (getINISetting "$scripts\dts_prefs.ini" "Settings" "NodeX" as float) NodeY = (getINISetting "$scripts\dts_prefs.ini" "Settings" "NodeY" as float) NodeZ = (getINISetting "$scripts\dts_prefs.ini" "Settings" "NodeZ" as float) ShapeX = (getINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeX" as float) ShapeY = (getINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeY" as float) ShapeZ = (getINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeZ" as float) FreezeShape = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "FreezeShape" ) FreezeMarkers = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "FreezeMarkers" ) AutoCFG = ConvertToBool( getINISetting "$scripts\dts_prefs.ini" "Settings" "AutoCFG" ) try( Bounds_rollout.spn_xPad.value = BoundsPadX ) catch() try( Bounds_rollout.spn_yPad.value = BoundsPadY ) catch() try( Bounds_rollout.spn_zPad.value = BoundsPadZ ) catch() ) --------------------------------------------------------------------- -- Main Exporter UI --------------------------------------------------------------------- rcmenu ConfigRCmenu ( menuItem mi_help "[User Reference]" checked:false menuItem mi_dmp "[Show latest DMP]" checked:false menuItem mi_quick " Quick Export" checked:false menuItem mi_bounds " Bounds" checked:false menuItem mi_detail " Details" checked:false menuItem mi_bill " Billboards" checked:false menuItem mi_nodes " Nodes" checked:false menuItem mi_seq " Sequences" checked:false menuItem mi_trig " Triggers" checked:false menuItem mi_vis " Visibility" checked:false menuItem mi_col " Collision" checked:false menuItem mi_mat " Materials" checked:false menuItem mi_about "[About...]" checked:false on ConfigRCmenu open do ( mi_quick.checked = QuickExportOpen mi_bounds.checked = BoundsOpen mi_detail.checked = DetailOpen mi_bill.checked = BillboardOpen mi_nodes.checked = NodeOpen mi_seq.checked = SequenceOpen mi_trig.checked = TriggerOpen mi_vis.checked = VisibilityOpen mi_col.checked = CollisionOpen mi_mat.checked = MaterialOpen ) on mi_help picked do ( createDialog Help_rollout width:640 height:480 ) on mi_dmp picked do ( if DmpPath != "" then ( createDialog DMP_rollout width:640 height:480 ) ) on mi_about picked do ( createDialog About_rollout width:317 height:166 ) on mi_quick picked do ( if mi_quick.checked == true then ( mi_quick.checked = false QuickExportOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog QuickExport_rollout ) else ( mi_quick.checked = true QuickExportOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog QuickExport_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "QuickExport" (QuickExportOpen as string) ) on mi_bounds picked do ( if mi_bounds.checked == true then ( mi_bounds.checked = false BoundsOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Bounds_rollout ) else ( mi_bounds.checked = true BoundsOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Bounds_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Bounds" (BoundsOpen as string) ) on mi_detail picked do ( if mi_detail.checked == true then ( mi_detail.checked = false DetailOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Detail_rollout ) else ( mi_detail.checked = true DetailOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Detail_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Detail" (DetailOpen as string) ) on mi_bill picked do ( if mi_bill.checked == true then ( mi_bill.checked = false BillboardOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Billboard_rollout ) else ( mi_bill.checked = true BillboardOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Billboard_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Billboard" (BillboardOpen as string) ) on mi_nodes picked do ( if mi_nodes.checked == true then ( mi_nodes.checked = false NodeOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Node_rollout ) else ( mi_nodes.checked = true NodeOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Node_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Node" (NodeOpen as string) ) on mi_seq picked do ( if mi_seq.checked == true then ( mi_seq.checked = false SequenceOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Sequence_rollout ) else ( mi_seq.checked = true SequenceOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Sequence_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Sequence" (SequenceOpen as string) ) on mi_trig picked do ( if mi_trig.checked == true then ( mi_trig.checked = false TriggerOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Trigger_rollout ) else ( mi_trig.checked = true TriggerOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Trigger_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Trigger" (TriggerOpen as string) ) on mi_vis picked do ( if mi_vis.checked == true then ( mi_vis.checked = false VisibilityOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Visibility_rollout ) else ( mi_vis.checked = true VisibilityOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Visibility_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Visibility" (VisibilityOpen as string) ) on mi_col picked do ( if mi_col.checked == true then ( mi_col.checked = false CollisionOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Collision_rollout ) else ( mi_col.checked = true CollisionOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Collision_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Collision" (CollisionOpen as string) ) on mi_mat picked do ( if mi_mat.checked == true then ( mi_mat.checked = false MaterialOpen = false removeSubRollout gDTSUtility_rollout.DTSUtilityDialog Material_rollout ) else ( mi_mat.checked = true MaterialOpen = true addSubRollout gDTSUtility_rollout.DTSUtilityDialog Material_rollout ) setINISetting "$scripts\dts_prefs.ini" "Interface" "Material" (MaterialOpen as string) ) ) rollout Settings_rollout "Exporter Settings" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[0,0] group "Bounds Settings" ( spinner boundsXpad_spn "X padding: " type: #float range:[0,100,BoundsPadX] spinner boundsYpad_spn "Y padding: " type: #float range:[0,100,BoundsPadY] spinner boundsZpad_spn "Z padding: " type: #float range:[0,100,BoundsPadZ] ) group "DTS Shape\\Marker Settings" ( spinner shapeX_spn "X size: " type: #float range:[0,100,ShapeX] spinner shapeY_spn "Y size: " type: #float range:[0,100,ShapeY] spinner shapeZ_spn "Z size: " type: #float range:[0,100,ShapeZ] checkbox freezeShape_chk "Freeze DTS Shape" checked:FreezeShape across:2 checkbox freezeMarkers_chk "Freeze Markers" checked:FreezeMarkers ) group "Node Settings" ( spinner nodeX_spn "X size: " type: #float range:[0,100,NodeX] spinner nodeY_spn "Y size: " type: #float range:[0,100,NodeY] spinner nodeZ_spn "Z size: " type: #float range:[0,100,NodeZ] ) group "Dump File\\CFG Settings" ( checkbox showDMP_chk "Show DMP file after export" checked:ShowDMP across:2 checkbox AutoCFG_chk "Create .CFG file on export" checked:AutoCFG ) on Settings_rollout close do ( ReloadSettings() ) -- save bounds settings on boundsXpad_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadX" (boundsXpad_spn.value as string) ) on boundsYpad_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadY" (boundsYpad_spn.value as string) ) on boundsZpad_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "BoundsPadZ" (boundsZpad_spn.value as string) ) -- save shape settings on shapeX_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeX" (shapeX_spn.value as string) ) on shapeY_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeY" (shapeY_spn.value as string) ) on shapeZ_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "ShapeZ" (shapeZ_spn.value as string) ) on freezeShape_chk changed state do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "FreezeShape" (state as string) ) on freezeMarkers_chk changed state do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "FreezeMarkers" (state as string) ) -- save node settings on nodeX_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "NodeX" (nodeX_spn.value as string) ) on nodeY_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "NodeY" (nodeY_spn.value as string) ) on nodeZ_spn changed val do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "NodeZ" (nodeZ_spn.value as string) ) -- save dmp cfg settings on showDMP_chk changed state do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "ShowDMP" (state as string) ) on autoCFG_chk changed state do ( setINISetting "$scripts\dts_prefs.ini" "Settings" "AutoCFG" (state as string) ) ) rollout gDTSUtility_rollout "DTS Exporter Utility" width:420 height:530 ( imgTag uiHeader "" bitmap: (openBitMap "$scripts\dts\dts_header.bmp") pos:[0,0] imgTag uiBlank "" bitmap: (openBitMap "$scripts\dts\dts_blank.bmp") pos:[285,0] imgTag uiHelp "Help" bitmap: (openBitMap "$scripts\dts\dts_help.bmp") pos:[318,0] imgTag uiMaxMin "" bitmap: (openBitMap "$scripts\dts\dts_min.bmp") pos:[350,0] imgTag uiRefresh "" bitmap: (openBitMap "$scripts\dts\dts_refresh.bmp") pos:[382,0] subrollout DTSUtilityDialog "" pos:[4,38] width:415 height:(UiHeight - 72) imgTag uiDTS "" bitmap: (openBitMap "$scripts\dts\dts_dts.bmp") pos:[0,(UiHeight - 31)] imgTag uiDSQ "" bitmap: (openBitMap "$scripts\dts\dts_dsq.bmp") pos:[76,(UiHeight - 31)] imgTag uiSettings "" bitmap: (openBitMap "$scripts\dts\dts_settings.bmp") pos:[161,(UiHeight - 31)] imgTag uiLogo "" bitmap: (openBitMap "$scripts\dts\dts_gglogo2.bmp") pos:[264,(UiHeight - 31)] function RefreshUtil = ( try( Bounds_rollout.InitBounds() ) catch() try( Detail_rollout.UpdateDetailMarkers() ) catch() try( Detail_rollout.UpdateDetails 0 ) catch() try( Node_rollout.UpdateNodes() ) catch() try( Sequence_rollout.UpdateSequences() ) catch() try( Sequence_rollout.EnableControls() ) catch() try( Trigger_rollout.UpdateSequences() ) catch() try( Billboard_rollout.UpdateDetails() ) catch() try( Visibility_rollout.UpdateDetails() ) catch() try( Collision_rollout.UpdateDetails() ) catch() try( Material_rollout.UpdateMaterials() ) catch() ) on gDTSUtility_rollout open do ( -- Reload Min/Max State if UiMin == false then ( gDTSUtility_rollout.height = UiHeight ) else ( gDTSUtility_rollout.height = 69 gDTSUtility_rollout.uiMaxMin.bitmap = (openBitMap "$scripts\dts\dts_max.bmp") ) SetDialogPos gDTSUtility_rollout [UiX,UiY] ) on gDTSUtility_rollout resized newSz do ( newSize = newSz.y as integer pDialogHeight = newSz.y DTSUtilityDialog.height = pDialogHeight - 72 buttonY = pDialogHeight - 31 uiDTS.pos = [uiDTS.pos.x, buttonY] uiDSQ.pos = [uiDSQ.pos.x, buttonY] uiSettings.pos = [uiSettings.pos.x, buttonY] uiLogo.pos = [uiLogo.pos.x, buttonY] if newSize > 75 then ( if newSize != UiHeight then ( setINISetting "$scripts\dts_prefs.ini" "Interface" "UiHeight" (newSize as string) UiHeight = newSize UiMin = false ) ) ) on gDTSUtility_rollout moved pos do ( setINISetting "$scripts\dts_prefs.ini" "Interface" "UiX" ((pos.x as integer) as string) setINISetting "$scripts\dts_prefs.ini" "Interface" "UiY" ((pos.y as integer) as string) ) -- export dts shape on uiDTS click do ( if $bounds == undefined then messageBox "No bounds was found" else ( dtsFileName = getSaveFileName \ caption:"Select a File Name" \ filename:"newobject.dts" \ types:"Torque DTS Shape(*.DTS)|*.dts|" if dtsFileName != undefined then ( if AutoCFG == true then CreateConfigFile ( getFilenamePath dtsFileName ) exportFile dtsFileName DmpPath = ( getFilenamePath dtsFileName ) if ShowDMP == true then createDialog DMP_rollout width:640 height:480 ) ) ) on uiDTS mousedown do ( uiDTS.bitmap = (openBitMap "$scripts\dts\dts_dtsc.bmp") ) on uiDTS mouseup do ( uiDTS.bitmap = (openBitMap "$scripts\dts\dts_dts.bmp") ) -- export sequence (dsq) on uiDSQ click do ( numSeq = $sequence_* if numSeq.count == 0 then messageBox "No Sequences were found" else ( dsqFileName = getSaveFileName \ caption:"Select a File Name" \ filename:"newsequence.dsq" \ types:"Torque DSQ File(*.DSQ)|*.dsq|" if dsqFileName != undefined then ( if AutoCFG == true then CreateConfigFile ( getFilenamePath dsqFileName ) exportFile dsqFileName DmpPath = ( getFilenamePath dsqFileName ) if ShowDMP == true then createDialog DMP_rollout width:640 height:480 ) ) ) on uiDSQ mousedown do ( uiDSQ.bitmap = (openBitMap "$scripts\dts\dts_dsqc.bmp") ) on uiDSQ mouseup do ( uiDSQ.bitmap = (openBitMap "$scripts\dts\dts_dsq.bmp") ) on uiSettings click do ( createDialog Settings_rollout width:350 height:355 ) on uiSettings mousedown do ( uiSettings.bitmap = (openBitMap "$scripts\dts\dts_settingsc.bmp") ) on uiSettings mouseup do ( uiSettings.bitmap = (openBitMap "$scripts\dts\dts_settings.bmp") ) on uiRefresh mousedown do ( uiRefresh.bitmap = (openBitMap "$scripts\dts\dts_refreshc.bmp") ) on uiRefresh mouseup do ( uiRefresh.bitmap = (openBitMap "$scripts\dts\dts_refresh.bmp") RefreshUtil() ) on uiMaxMin click do ( if gDTSUtility_rollout.inViewport == false then ( if (getFilenameFile uiMaxMin.bitmap.filename) == "dts_max" then ( gDTSUtility_rollout.height = 69 setINISetting "$scripts\dts_prefs.ini" "Interface" "UiMin" "true" ) else ( gDTSUtility_rollout.height = UiHeight setINISetting "$scripts\dts_prefs.ini" "Interface" "UiMin" "false" ) ) ) on uiMaxMin mousedown do ( if (getFilenameFile uiMaxMin.bitmap.filename) == "dts_max" then ( uiMaxMin.bitmap = (openBitMap "$scripts\dts\dts_maxc.bmp") ) else ( uiMaxMin.bitmap = (openBitMap "$scripts\dts\dts_minc.bmp") ) ) on uiMaxMin mouseup do ( if (getFilenameFile uiMaxMin.bitmap.filename) == "dts_maxc" then ( uiMaxMin.bitmap = (openBitMap "$scripts\dts\dts_min.bmp") ) else ( uiMaxMin.bitmap = (openBitMap "$scripts\dts\dts_max.bmp") ) ) on uiHelp mousedown do ( uiHelp.bitmap = (openBitMap "$scripts\dts\dts_helpc.bmp") ) on uiHelp mouseup do ( uiHelp.bitmap = (openBitMap "$scripts\dts\dts_help.bmp") ) on uiHelp click do ( popupMenu ConfigRCmenu ) ) --------------------------------------------------------------------- -- Quick Export --------------------------------------------------------------------- rollout QuickExport_rollout "Quick Export/Setup" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[1,1] group "options: " ( checkBox skinned_chk "As Skinned Mesh" across:2 checkBox cfg_chk "Create .CFG On Quick Export" checkBox bounds_chk "Use Existing Bounds" across:2 checkBox preset_chk "Use Node Preset" checkBox center_chk "Center Shape at Origin" across:2 dropdownlist presets_ddl "" enabled:false checkBox scale_chk "Remove Object Scale (xform)" ) imgTag uiquickSetup "" bitmap: (openBitMap "$scripts\dts\dts_quicksetup.bmp") across:2 align:#left offset:[-8,0] imgTag uiquickExport "" bitmap: (openBitMap "$scripts\dts\dts_quickexport.bmp") align:#left offset:[-100,0] function FindRootIK = ( clearSelection() select rootNode.children try ( deselect $base01 ) catch () try ( deselect $start01 ) catch () try ( deselect $detail* ) catch () try ( deselect $sequence_* ) catch () try ( deselect $cfg_settings* ) catch () try ( deselect $col* ) catch () try ( deselect $los* ) catch () nodeArr = #() for o in selection do ( if classOf o == BoneGeometry then append nodeArr o if classOf o == Dummy then append nodeArr o ) for node in nodeArr do ( if node.parent == undefined then ( node.parent = $start01 ) ) clearSelection() ) function quickExport setupType = ( if selection.count == 0 then messageBox "Quick Setup/Export requires a selection" else ( if selection[1].name != "bounds" then ( CreateDTSShape() if skinned_chk.checked == false then ( selection.parent = $start01 -- should add check for duplicate object names for i = 1 to selection.count do ( -- freeze scale transforms if scale_chk.checked == true then ResetXForm selection[i] -- clean object names objectName = selection[i].name baseName = trimright selection[i].name "1234567890" -- add detail size to object name selection[i].name = baseName + "2" ) ) else ( -- parent the mesh to the scene root selection.parent = null -- clean objects name baseName = trimright selection[1].name "1234567890" -- add detail size to object name selection[1].name = baseName + "2" tmpSelect = GetNodeByName( baseName + "2" ) FindRootIK() -- reselect the mesh object select tmpSelect ) -- create detail markers detailArr = #("2") DeleteDetailMarkers() CreateDetailMarkers detailArr -- create bounds if bounds_chk.checked == false then ( MakeBounds "bottom" 0.1 0.1 0.1 ) -- center the dts shape at the scene origin if center_chk.checked == true then ( delta = $bounds.pos for i = 1 to selection.count do ( selection[i].pos = selection[i].pos - delta ) $bounds.pos= [0,0,0] ) if preset_chk.checked == true then ( if presets_ddl.items.count != 0 then ( ApplyNodePreset presets_ddl.selected ) ) if setupType == "export" then ( dtsFileName = getSaveFileName \ caption:"Select a File Name" \ filename:"quickexport.dts" \ types:"Torque DTS Shape(*.DTS)|*.dts|" if dtsFileName != undefined then ( if cfg_chk.checked == true then ( CreateConfigFile ( getFilenamePath dtsFileName ) ) exportFile dtsFileName ) ) ) ) try( gDTSUtility_rollout.RefreshUtil() ) catch() ) function UpdatePresets = ( setNames = getINISetting "$scripts\dts_nodes.ini" "NodeSets" "SetNames" presetList = (filterString setNames ", -") if presetList.count != 0 then ( presets_ddl.items = presetList ) ) on preset_chk changed state do ( if state == true then ( UpdatePresets() presets_ddl.enabled = true ) else ( presets_ddl.enabled = false presets_ddl.items = #() ) ) on uiquickSetup click do ( quickExport "setup" ) on uiquickSetup mousedown do ( uiquickSetup.bitmap = (openBitMap "$scripts\dts\dts_quicksetupc.bmp") ) on uiquickSetup mouseup do ( uiquickSetup.bitmap = (openBitMap "$scripts\dts\dts_quicksetup.bmp") ) on uiquickExport click do ( quickExport "export" ) on uiquickExport mousedown do ( uiquickExport.bitmap = (openBitMap "$scripts\dts\dts_quickexportc.bmp") ) on uiquickExport mouseup do ( uiquickExport.bitmap = (openBitMap "$scripts\dts\dts_quickexport.bmp") ) ) --------------------------------------------------------------------- -- Bounds UI --------------------------------------------------------------------- rollout BoundsTarget_rollout "Select The Parent Object" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[0,0] label target_lbl "Available Nodes:" pos:[10,22] dropdownlist targetObject_ddl "" pos:[93,20] width:122 button targetCancel_btn "cancel" pos:[93,44] width:59 height:20 button targetApply_btn "apply" pos:[155,44] width:59 height:20 function UpdateNodes = ( nodeArr = #() clearSelection() select $* try ( deselect $bounds ) catch () try ( deselect $detail* ) catch () try ( deselect $sequence_* ) catch () try ( deselect $cfg_settings* ) catch () try ( deselect $col* ) catch () try ( deselect $los* ) catch () for node in selection do ( append nodeArr node.name ) clearSelection() targetObject_ddl.items = nodeArr ) on BoundsTarget_rollout open do ( UpdateNodes() ) on targetCancel_btn pressed do ( try(destroyDialog BoundsTarget_rollout) catch() ) on targetApply_btn pressed do ( try(Bounds_rollout.AddConstraint (getNodeByName targetObject_ddl.selected) ) catch() try(destroyDialog BoundsTarget_rollout) catch() ) ) rollout Bounds_rollout "Bounds Manager" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[1,1] label lbl_bounds "Bounds Utilities: " align:#left offset:[-8,3] across:5 checkBox chk_lockBounds "Freeze" offset:[0,3] checkBox chk_hideBounds "Hide" offset:[0,3] imgTag uiboundsDelete "" bitmap: (openBitMap "$scripts\dts\dts_deletebounds.bmp") offset:[-20,0] imgTag uiboundsApply "" bitmap: (openBitMap "$scripts\dts\dts_createbounds.bmp") offset:[-5,0] group "padding/alignment: " ( spinner spn_xPad "X padding: " type: #float range:[0,100,BoundsPadX] spinner spn_yPad "Y padding: " type: #float range:[0,100,BoundsPadY] spinner spn_zPad "Z padding: " type: #float range:[0,100,BoundsPadZ] dropdownlist ddl_align "" items:#("bottom", "center") width:190 offset:[1,0] align:#right ) group "link Inheritance: " ( checkBox inheritX_chk "X" across: 5 checkBox inheritY_chk "Y" checkBox inheritZ_chk "Z" imgTag uiRemoveLinkBounds "" bitmap: (openBitMap "$scripts\dts\dts_removelink.bmp") offset:[-20,-5] imgTag uiLinkBounds "" bitmap: (openBitMap "$scripts\dts\dts_linkbounds.bmp") offset:[-5,-5] ) imgTag uiBounds "" bitmap: (openBitMap "$scripts\dts\dts_bounds.bmp") pos:[35,71] transparent:(color 197 197 197) function InitBounds = ( if $bounds != null then ( if $bounds.isHidden == true then chk_hideBounds.checked = true if $bounds.isFrozen == true then chk_lockBounds.checked = true boundsInherit = getInheritanceFlags $bounds if (findItem boundsInherit 1) != 0 then inheritX_chk.checked = true else ( inheritX_chk.checked = false ) if (findItem boundsInherit 2) != 0 then inheritY_chk.checked = true else ( inheritY_chk.checked = false ) if (findItem boundsInherit 3) != 0 then inheritZ_chk.checked = true else ( inheritZ_chk.checked = false ) ) ) function AddConstraint TargetObj = ( if $bounds != undefined then ( setInheritanceFlags $bounds #{1,2} $bounds.parent = TargetObj InitBounds() ) ) function RemoveConstraint = ( if $bounds != undefined then ( $bounds.parent = null InitBounds() ) ) on Bounds_rollout open do ( InitBounds() ) on uiboundsApply click do ( if selection.count == 0 then messageBox "Create Bounds requires a selection" else ( MakeBounds ddl_align.selected spn_xPad.value spn_yPad.value spn_zPad.value ) ) on uiboundsDelete click do ( if $bounds != null then ( delete $bounds ) ) -- hide/show the bounds on chk_hideBounds changed curState do ( if $bounds == null then chk_hideBounds.checked = false else ( if chk_hideBounds.checked == true then ( $bounds.isHidden = true ) else ( $bounds.isHidden = false ) ) ) -- lock bounds on chk_lockBounds changed curState do ( if $bounds == null then chk_lockBounds.checked = false else ( if chk_lockBounds.checked == true then ( $bounds.isFrozen = true ) else ( $bounds.isFrozen = false ) ) ) on uiLinkBounds click do ( createDialog BoundsTarget_rollout width:225 height:74 ) on uiRemoveLinkBounds click do ( RemoveConstraint() ) on inheritX_chk changed state do ( if $bounds != null then ( boundsInherit = getInheritanceFlags $bounds if inheritX_chk.checked == true then append boundsInherit 1 else ( deleteItem boundsInherit 1 ) setInheritanceFlags $bounds boundsInherit ) else ( inheritX_chk.checked = false ) ) on inheritY_chk changed state do ( if $bounds != null then ( boundsInherit = getInheritanceFlags $bounds if inheritY_chk.checked == true then append boundsInherit 2 else ( deleteItem boundsInherit 2 ) setInheritanceFlags $bounds boundsInherit ) else ( inheritY_chk.checked = false ) ) on inheritZ_chk changed state do ( if $bounds != null then ( boundsInherit = getInheritanceFlags $bounds if inheritZ_chk.checked == true then append boundsInherit 3 else ( deleteItem boundsInherit 3 ) setInheritanceFlags $bounds boundsInherit ) else ( inheritZ_chk.checked = false ) ) on uiboundsApply mousedown do ( uiboundsApply.bitmap = (openBitMap "$scripts\dts\dts_createboundsc.bmp") ) on uiboundsApply mouseup do ( uiboundsApply.bitmap = (openBitMap "$scripts\dts\dts_createbounds.bmp") ) on uiboundsDelete mousedown do ( uiboundsDelete.bitmap = (openBitMap "$scripts\dts\dts_deleteboundsc.bmp") ) on uiboundsDelete mouseup do ( uiboundsDelete.bitmap = (openBitMap "$scripts\dts\dts_deletebounds.bmp") ) on uiLinkBounds mousedown do ( uiLinkBounds.bitmap = (openBitMap "$scripts\dts\dts_linkboundsc.bmp") ) on uiLinkBounds mouseup do ( uiLinkBounds.bitmap = (openBitMap "$scripts\dts\dts_linkbounds.bmp") ) on uiRemoveLinkBounds mousedown do ( uiRemoveLinkBounds.bitmap = (openBitMap "$scripts\dts\dts_removelinkc.bmp") ) on uiRemoveLinkBounds mouseup do ( uiRemoveLinkBounds.bitmap = (openBitMap "$scripts\dts\dts_removelink.bmp") ) ) --------------------------------------------------------------------- -- Detail Manager --------------------------------------------------------------------- rollout DetailTarget_rollout "Select Parent Object" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[0,0] label target_lbl "Available Nodes:" pos:[10,22] dropdownlist targetObject_ddl "" pos:[93,20] width:122 button targetCancel_btn "cancel" pos:[93,44] width:59 height:20 button targetApply_btn "apply" pos:[155,44] width:59 height:20 function UpdateNodes = ( clearSelection() select $* try ( deselect $bounds ) catch () try ( deselect $detail* ) catch () try ( deselect $sequence_* ) catch () try ( deselect $cfg_settings* ) catch () try ( deselect $col* ) catch () try ( deselect $los* ) catch () nodeArr = #() for node in selection do ( append nodeArr node.name ) clearSelection() targetObject_ddl.items = nodeArr ) on DetailTarget_rollout open do ( UpdateNodes() ) on targetCancel_btn pressed do ( try(destroyDialog DetailTarget_rollout) catch() ) on targetApply_btn pressed do ( try(Detail_rollout.DetailParent targetObject_ddl.selected ) catch() try(destroyDialog DetailTarget_rollout) catch() ) ) rollout Detail_rollout "Detail Manager" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[1,1] groupBox detailMarkers_grp "Detail Levels" pos:[9,20] width:381 height:107 button detailDelete_btn "-" pos:[20,38] width:23 height:16 button detailEdit_btn "edit" pos:[44,38] width:34 height:16 button detailAuto_btn "auto" pos:[80,38] width:34 height:16 button detailNew_btn "+" pos:[116,38] width:23 height:16 listBox detailMarkers_lbx "" pos:[19,58] width:164 height:4 groupBox detailSet_grp "Detail Level Settings" pos:[201,33] width:176 height:85 label detailSize_lbl "Pixel Size:" pos:[228,69] width:53 height:16 spinner detailSize_spn "" pos:[303,69] width:65 height:16 range:[0,1000,2] type:#integer button detailMarkerSave_btn "save" pos:[304,90] width:64 height:16 groupBox details_grp "Detail Meshes" pos:[9,141] width:186 height:155 multiListBox details_lbx "" pos:[19,162] width:164 height:8 checkbox detailShowAll_chk "show all detail meshes" pos:[19,275] width:150 height:18 checked:true groupBox detailUtil_grp "Detail Utilities" pos:[203,141] width:187 height:155 button deleteShape_btn "del shape" pos:[219,158] width:76 height:20 button createShape_btn "create shape" pos:[298,158] width:76 height:20 button registerDetails_btn "register detail(s)" pos:[219,180] width:155 height:20 button renumberDetails_btn "renumber detail(s)" pos:[219,202] width:155 height:20 button deleteMarkers_btn "remove detail markers" pos:[219,224] width:155 height:20 button sort_btn "sort settings" pos:[219,246] width:155 height:20 button delParent_btn "del parent" pos:[219,268] width:76 height:20 button setParent_btn "set parent" pos:[298,268] width:76 height:20 label renumber_lbl "Renumber Detail(s)" pos:[220,159] width:126 height:14 visible:false label detailNum_lbl "Detail Number:" pos:[220,180] width:75 height:17 visible:false spinner renumberSize_spn "" pos:[306,180] width:69 height:16 range:[0,1000,2] type:#integer visible:false groupBox options_grp "Options:" pos:[219,200] width:156 height:60 visible:false checkbox createNew_chk "Create new marker" pos:[228,216] width:128 height:18 checked:true visible:false checkbox removeOld_chk "Remove old marker(s)" pos:[228,237] width:138 height:18 checked:true visible:false button renumberCancel_btn "Cancel" pos:[223,267] width:70 height:19 visible:false button renumberUpdate_btn "Update" pos:[301,267] width:70 height:19 visible:false checkbox enableSort_chk "Enable Mesh Sorting" pos:[219,164] width:153 height:17 visible:false label maxDepth_lbl "Max Depth:" pos:[220,186] width:75 height:17 visible:false spinner maxDepth_spn "" pos:[304,185] width:65 height:16 range:[0,1000,2] type:#integer visible:false label numFaces_lbl "Num Big Faces:" pos:[220,205] width:75 height:17 visible:false spinner numFaces_spn "" pos:[304,205] width:65 height:16 range:[0,1000,4] type:#integer visible:false checkbox zUp_chk "Z Layer Up" pos:[220,225] width:90 height:18 visible:false checkbox zDown_chk "Z Layer Down" pos:[220,245] width:102 height:18 visible:false button sortCancel_btn "cancel" pos:[305,268] width:64 height:16 visible:false groupBox autoDetails_grp "Auto Details" pos:[9,309] width:381 height:116 button autodDelete_btn "-" pos:[19,327] width:23 height:16 button autodEdit_btn "edit" pos:[44,327] width:34 height:16 button autodAuto_btn "auto" pos:[79,327] width:34 height:16 button autodNew_btn "+" pos:[116,327] width:23 height:16 listBox autoDetails_lbx "" pos:[19,344] width:164 height:5 groupBox autodSet_grp "Auto Detail Settings" pos:[200,331] width:176 height:85 label lbl2 "Reduction:" pos:[229,349] width:54 height:16 spinner detailReduction_spn "" pos:[304,348] width:65 height:16 range:[0,1,1] label lbl3 "Pixel Size:" pos:[229,370] width:53 height:16 spinner autodSize_spn "" pos:[304,368] width:65 height:16 range:[0,1000,2] type:#integer button autoDetailSave_btn "save" pos:[305,391] width:64 height:16 function DetailParent targetObj = ( selectionTmp = details_lbx.selection as array if selectionTmp.count != 0 then ( if targetObj != null then ( for i = 1 to selectionTmp.count do ( tmpObj = getNodeByName details_lbx.items[selectionTmp[i]] tmpObj.parent = (getNodeByName targetObj) ) ) else ( for i = 1 to selectionTmp.count do ( tmpObj = getNodeByName details_lbx.items[selectionTmp[i]] tmpObj.parent = null ) ) ) ) function EnableSort = ( maxDepth_lbl.enabled = true maxDepth_spn.enabled = true numFaces_lbl.enabled = true numFaces_spn.enabled = true zUp_chk.enabled = true zDown_chk.enabled = true ) function DisableSort = ( enableSort_chk.checked = false maxDepth_spn.value = 2 numFaces_spn.value = 4 zUp_chk.checked = false zDown_chk.checked = false maxDepth_lbl.enabled = false maxDepth_spn.enabled = false numFaces_lbl.enabled = false numFaces_spn.enabled = false zUp_chk.enabled = false zDown_chk.enabled = false ) function SaveSort = ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( d = getNodeByName details_lbx.items[selectionTmp[1]] if d != null then ( if enableSort_chk.checked == true then ( setUserProp d "enableSort" true setUserProp d "max_depth" maxDepth_spn.value setUserProp d "num_big_faces" numFaces_spn.value setUserProp d "z_layer_up" zUp_chk.checked setUserProp d "z_layer_down" zDown_chk.checked ) else ( setUserPropBuffer d "" ) ) else ( DisableSort() ) ) else ( DisableSort() ) ) function EditSort = ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( d = getNodeByName details_lbx.items[selectionTmp[1]] if d != null then ( if (getUserProp d "enableSort") == true then ( enableSort_chk.checked = true maxDepth_spn.value = (getUserProp d "max_depth") numFaces_spn.value = (getUserProp d "num_big_faces") zUp_chk.checked = (getUserProp d "z_layer_up") zDown_chk.checked = (getUserProp d "z_layer_down") EnableSort() ) else ( DisableSort() ) ) else ( DisableSort() ) ) else ( DisableSort() ) ) function SelectDetails = ( clearSelection() select $geometry try ( deselect $bounds ) catch () try ( deselect $col* ) catch () try ( deselect $los* ) catch () ) function SelectDetailMarkers = ( clearSelection() select $detail* ) function GetDetailNumbers = ( SelectDetailMarkers() detailArr = #() for o in selection do ( append detailArr (GetDetailSize o.name as string) ) detailArr ) function UpdateDetails size = ( SelectDetails() detailArr = #() if size != null then ( if detailShowAll_chk.checked == false then ( for o in selection do ( if (GetDetailSize o.name) == (GetDetailSize size) then ( append detailArr o.name ) ) ) else ( for o in selection do ( if classOf o != BoneGeometry then ( append detailArr o.name ) ) ) ) details_lbx.items = detailArr try( Billboard_rollout.UpdateDetails() ) catch() try( Visibility_rollout.UpdateDetails() ) catch() try( Collision_rollout.UpdateDetails() ) catch() ClearSelection() ) function UpdateDetailMarkers = ( SelectDetailMarkers() detailMarkersArr = #() for o in selection do ( if classOf o != BoneGeometry then ( append detailMarkersArr o.name ) ) detailMarkers_lbx.items = detailMarkersArr ClearSelection() UpdateDetails detailMarkers_lbx.selected EditSort() ) function CreateDetailMarker size = ( detailArr = GetDetailNumbers() detailTest = findItem detailArr (size as string) if detailTest == 0 then ( detailName = "detail" + size as string d = dummy name: detailName d.boxsize = [ShapeX, ShapeY, ShapeZ] d.parent = $base01 if FreezeMarkers == true then d.isFrozen = true ) ) function RenumberDetails size = ( selectionTmp = details_lbx.selection as array if selectionTmp.count != 0 then ( detailArr = #() for i = 1 to selectionTmp.count do ( tmpObj = getNodeByName details_lbx.items[selectionTmp[i]] baseName = trimright tmpObj.name "1234567890" detailNumber = trimleft tmpObj.name baseName detailTest = findItem detailArr detailNumber if detailTest == 0 then ( append detailArr detailNumber ) newName = baseName + size tmpObj.name = newName ) if removeOld_chk.checked then ( for i = 1 to detailArr.count do ( obj = getNodeByName ( "detail" + detailArr[i] ) if obj != null then delete obj ) ) if createNew_chk.checked then ( CreateDetailMarker size ) UpdateDetailMarkers() ) ) function GetAutoDetails detail = ( autoArr = #() detailObj = getNodeByName detail if detailObj != null then ( numAutoD = getUserProp detailObj "numAutoDetails" if numAutoD != null then ( for i = 0 to (numAutoD - 1) do ( curDetailSize = "autoDetailSize" + i as string curDetailPercent = "autoDetailPercent" + i as string autoDetailSize = getUserProp detailObj curDetailSize as string autoDetailPercent = getUserProp detailObj curDetailPercent as string autoDTmp = "Size: " + autoDetailSize + " Reduction: " + autoDetailPercent append autoArr autoDTmp ) ) ) else ( UpdateDetails detailMarkers_lbx.selected ) autoArr ) function AddAutoDetails reduction size = ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( detailObj = getNodeByName details_lbx.items[selectionTmp[1]] numAutoD = getUserProp detailObj "numAutoDetails" if numAutoD == null then numAutoD = 0 curDetailSize = "autoDetailSize" + numAutoD as string curDetailPercent = "autoDetailPercent" + numAutoD as string setUserProp detailObj "numAutoDetails" (numAutoD + 1) setUserProp detailObj curDetailSize size setUserProp detailObj curDetailPercent reduction ) ) function EditAutoDetails autoNum = ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( autoNum -= 1 detailObj = getNodeByName details_lbx.items[selectionTmp[1]] curDetailSize = "autoDetailSize" + autoNum as string curDetailPercent = "autoDetailPercent" + autoNum as string autodSize_spn.value = getUserProp detailObj curDetailSize detailReduction_spn.value = getUserProp detailObj curDetailPercent ) ) function UpdateAutoDetails autoNum = ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( autoNum -= 1 detailObj = getNodeByName details_lbx.items[selectionTmp[1]] curDetailSize = "autoDetailSize" + autoNum as string curDetailPercent = "autoDetailPercent" + autoNum as string setUserProp detailObj curDetailSize autodSize_spn.value setUserProp detailObj curDetailPercent detailReduction_spn.value ) ) function DeleteAutoDetails num = ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( autoDetails = #() detailObj = getNodeByName details_lbx.items[selectionTmp[1]] numAutoD = getUserProp detailObj "numAutoDetails" for i = 0 to (numAutoD -= 1) do ( curDetailSize = "autoDetailSize" + i as string curDetailPercent = "autoDetailPercent" + i as string curSize = getUserProp detailObj curDetailSize curPercent = getUserProp detailObj curDetailPercent append autoDetails #(curSize, curPercent) if i == numAutoD then ( RemoveUserProp detailObj curDetailSize curSize RemoveUserProp detailObj curDetailPercent curPercent setUserProp detailObj "numAutoDetails" numAutoD ) ) deleteItem autoDetails num for i = 0 to (autoDetails.count - 1) do ( curDetailSize = "autoDetailSize" + i as string curDetailPercent = "autoDetailPercent" + i as string setUserProp detailObj curDetailSize autoDetails[i + 1][1] setUserProp detailObj curDetailPercent autoDetails[i + 1][2] ) ) ) on Detail_rollout open do ( UpdateDetailMarkers() UpdateDetails 0 ) on detailMarkers_lbx selected selectedMarker do ( detailMarkerSave_btn.text = "save" if detailMarkers_lbx.selected != null then ( detailShowAll_chk.checked = false UpdateDetails detailMarkers_lbx.selected ) ) on detailDelete_btn pressed do ( if detailMarkers_lbx.selected != null then ( delete (getNodeByName detailMarkers_lbx.selected) UpdateDetailMarkers() ) ) on detailEdit_btn pressed do ( if detailMarkers_lbx.selected != null then ( detailSize_spn.value = GetDetailSize(detailMarkers_lbx.selected) detailMarkerSave_btn.text = "update" ) ) on detailAuto_btn pressed do ( SelectDetails() detailArr = #() for i = 1 to selection.count do ( objectName = selection[i].name baseName = trimright selection[i].name "1234567890" detailNumber = trimleft selection[i].name baseName detailTest = findItem detailArr detailNumber if detailTest == 0 then ( if classOf selection[i] != BoneGeometry then ( append detailArr detailNumber ) ) ) DeleteDetailMarkers() CreateDetailMarkers detailArr UpdateDetailMarkers() ) on detailNew_btn pressed do ( detailMarkerSave_btn.text = "save" ) on detailMarkerSave_btn pressed do ( if detailMarkerSave_btn.text == "save" then ( CreateDetailMarker detailSize_spn.value ) else ( slectedMarker = getNodeByName detailMarkers_lbx.selected slectedMarker.name = "detail" + detailSize_spn.value as string detailMarkerSave_btn.text = "save" ) UpdateDetailMarkers() ) on details_lbx selected selectedDetail do ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( autoDetails_lbx.items = GetAutoDetails details_lbx.items[selectionTmp[1]] ) else ( autoDetails_lbx.items = #() ) EditSort() ) on detailShowAll_chk changed state do ( if state == true then ( UpdateDetails 0 ) else ( UpdateDetails detailMarkers_lbx.selected ) DisableSort() ) on createShape_btn pressed do ( CreateDTSShape() try( Node_rollout.UpdateNodes() ) catch() ) on registerDetails_btn pressed do ( CreateDTSShape() selectionTmp = details_lbx.selection as array for i = 1 to selectionTmp.count do ( tmpObj = getNodeByName details_lbx.items[selectionTmp[i]] tmpObj.parent = $start01 ) try( Node_rollout.UpdateNodes() ) catch() ) on renumberDetails_btn pressed do ( createShape_btn.visible = false deleteShape_btn.visible = false registerDetails_btn.visible = false registerDetails_btn.visible = false renumberDetails_btn.visible = false deleteMarkers_btn.visible = false sort_btn.visible = false delParent_btn.visible = false setParent_btn.visible = false renumber_lbl.visible = true detailNum_lbl.visible = true renumberSize_spn.visible = true options_grp.visible = true createNew_chk.visible = true removeOld_chk.visible = true renumberCancel_btn.visible = true renumberUpdate_btn.visible = true ) on renumberCancel_btn pressed do ( renumber_lbl.visible = false detailNum_lbl.visible = false renumberSize_spn.visible = false options_grp.visible = false createNew_chk.visible = false removeOld_chk.visible = false renumberCancel_btn.visible = false renumberUpdate_btn.visible = false createShape_btn.visible = true deleteShape_btn.visible = true registerDetails_btn.visible = true registerDetails_btn.visible = true renumberDetails_btn.visible = true deleteMarkers_btn.visible = true sort_btn.visible = true delParent_btn.visible = true setParent_btn.visible = true ) on renumberUpdate_btn pressed do ( RenumberDetails (renumberSize_spn.value as string) ) on deleteMarkers_btn pressed do ( DeleteDetailMarkers() UpdateDetailMarkers() ) on deleteShape_btn pressed do ( if $base01 != null then delete $base01 if $start01 != null then delete $start01 try( Node_rollout.UpdateNodes() ) catch() ) on sort_btn pressed do ( createShape_btn.visible = false deleteShape_btn.visible = false registerDetails_btn.visible = false registerDetails_btn.visible = false renumberDetails_btn.visible = false deleteMarkers_btn.visible = false sort_btn.visible = false delParent_btn.visible = false setParent_btn.visible = false enableSort_chk.visible = true maxDepth_lbl.visible = true maxDepth_spn.visible = true numFaces_lbl.visible = true numFaces_spn.visible = true zUp_chk.visible = true zDown_chk.visible = true sortCancel_btn.visible = true ) on sortCancel_btn pressed do ( enableSort_chk.visible = false maxDepth_lbl.visible = false maxDepth_spn.visible = false numFaces_lbl.visible = false numFaces_spn.visible = false zUp_chk.visible = false zDown_chk.visible = false sortCancel_btn.visible = false createShape_btn.visible = true deleteShape_btn.visible = true registerDetails_btn.visible = true registerDetails_btn.visible = true renumberDetails_btn.visible = true deleteMarkers_btn.visible = true sort_btn.visible = true delParent_btn.visible = true setParent_btn.visible = true ) on enableSort_chk changed state do ( if state == true then EnableSort() else ( DisableSort() ) SaveSort() ) on maxDepth_spn changed value do ( SaveSort() ) on numFaces_spn changed value do ( SaveSort() ) on zUp_chk changed state do ( SaveSort() ) on zDown_chk changed state do ( SaveSort() ) on delParent_btn pressed do ( DetailParent null ) on setParent_btn pressed do ( createDialog DetailTarget_rollout width:225 height:74 ) on autodNew_btn pressed do ( autoDetailSave_btn.text = "save" ) on autoDetails_lbx selected selectedAutoD do ( --autoDetailSave_btn.text = "update" if autoDetails_lbx.selection != 0 then ( EditAutoDetails(autoDetails_lbx.selection) selectionTmp = details_lbx.selection as array autoDetails_lbx.items = GetAutoDetails details_lbx.items[selectionTmp[1]] autoDetailSave_btn.text = "update" ) ) on autoDetailSave_btn pressed do ( selectionTmp = details_lbx.selection as array if selectionTmp.count == 1 then ( if autoDetailSave_btn.text == "save" then ( AddAutoDetails detailReduction_spn.value autodSize_spn.value ) else ( UpdateAutoDetails(autoDetails_lbx.selection) ) selectionTmp = details_lbx.selection as array autoDetails_lbx.items = GetAutoDetails details_lbx.items[selectionTmp[1]] CreateDetailMarker autodSize_spn.value UpdateDetailMarkers() ) ) on autodEdit_btn pressed do ( if autoDetails_lbx.selection != 0 then ( EditAutoDetails(autoDetails_lbx.selection) selectionTmp = details_lbx.selection as array autoDetails_lbx.items = GetAutoDetails details_lbx.items[selectionTmp[1]] autoDetailSave_btn.text = "update" ) ) on autodDelete_btn pressed do ( if autoDetails_lbx.selected != null then ( DeleteAutoDetails(autoDetails_lbx.selection) selectionTmp = details_lbx.selection as array autoDetails_lbx.items = GetAutoDetails details_lbx.items[selectionTmp[1]] ) autoDetailSave_btn.text = "save" ) ) --------------------------------------------------------------------- -- Sequence Manager --------------------------------------------------------------------- rollout NewSequence_rollout "Create New Sequence" ( label seqName_lbl "Sequence Name:" pos:[8,14] width:85 height:15 editText seqName_edt "" pos:[91,12] width:122 height:20 button newSeqCancel_btn "cancel" pos:[95,36] width:58 height:20 button newSeqApply_btn "apply" pos:[155,36] width:58 height:20 on NewSequence_rollout open do ( --seqName_edt.text = SelectedNode.name setFocus seqName_edt ) on newSeqCancel_btn pressed do ( try(destroyDialog NewSequence_rollout) catch() ) on newSeqApply_btn pressed do ( if seqName_edt.text != "" then ( try(Sequence_rollout.name_edt.text = seqName_edt.text) catch() try(Sequence_rollout.SaveSequence()) catch() try(Sequence_rollout.UpdateSequences()) catch() ) try(destroyDialog NewSequence_rollout) catch() ) ) rollout RenameSequence_rollout "Rename Sequence" ( label rename_lbl "Sequence Name:" pos:[8,14] width:85 height:15 editText seqName_edt "" pos:[91,12] width:122 height:20 button renameCancel_btn "cancel" pos:[95,36] width:58 height:20 button renameApply_btn "apply" pos:[155,36] width:58 height:20 on RenameSequence_rollout open do ( tmpStr = SelectedNode.name seqName_edt.text = (substring tmpStr 10 tmpStr.count) setFocus seqName_edt ) on renameCancel_btn pressed do ( try(destroyDialog RenameSequence_rollout) catch() ) on renameApply_btn pressed do ( if seqName_edt.text != "" then ( SelectedNode.name = ("sequence_" + seqName_edt.text) ) SelectedNode = null try(Sequence_rollout.UpdateSequences()) catch() try(destroyDialog RenameSequence_rollout) catch() ) ) rollout Sequence_rollout "Sequence Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[1,1] button delete_btn "-" pos:[9,33] width:22 height:15 button edit_btn "rename" pos:[33,33] width:43 height:15 button copy_btn "copy" pos:[78,33] width:33 height:15 button add_btn "+" pos:[113,33] width:22 height:15 listBox sequences_lbx "" pos:[10,49] width:124 height:6 button setTime_btn "Set Slider Range" pos:[9,136] width:109 height:18 button playAni_btn "P" pos:[120,136] width:15 height:18 button getTime_btn "Get Slider Range" pos:[9,156] width:109 height:18 button stopAni_btn "S" pos:[120,156] width:15 height:18 groupBox settings_grp "Sequence Settings" pos:[143,27] width:250 height:86 editText name_edt "name: " pos:[176,46] width:200 height:15 readOnly:true spinner startFrame_spn "start frame: " pos:[195,68] width:75 height:16 range:[0,10000,0] type:#integer spinner endFrame_spn "end frame: " pos:[195,88] width:75 height:16 range:[0,10000,1] type:#integer checkbox cyclic_chk "cycle sequence" pos:[278,68] width:100 height:15 checkbox complete_chk "complete cycle" pos:[278,88] width:100 height:15 groupBox blend_grp "Blend Settings" pos:[143,117] width:250 height:57 checkbox blend_chk "blend sequence" pos:[153,133] width:100 height:15 spinner referenceFrame_spn "Reference Frame: " pos:[300,150] width:75 height:16 range:[0,1000,0] type:#integer enabled:false groupBox frameRate_grp "Frame Sampleing Rate" pos:[143,178] width:250 height:66 radioButtons frames_rdo "" pos:[153,196] width:231 width:220 height:16 labels:#("Use frame rate", "Use N frames") columns:2 spinner frameRate_spn "frame rate: " pos:[195,218] width:60 height:16 range:[0,1000,30] type:#integer spinner numFrames_spn "num frames: " pos:[315,218] width:60 height:16 range:[0,1000,2] type:#integer enabled:false groupBox duration_grp "Priority/ Duration" pos:[144,247] width:250 height:62 spinner priority_spn "priority: " pos:[193,265] width:60 height:16 range:[0,1000,5] type:#integer checkbox overrideDuration_chk "override duration" pos:[275,265] width:100 height:15 spinner duration_spn "" pos:[326,284] width:50 height:16 range:[0,1000,1] type:#float enabled:false groupBox ground_grp "Ground Transform" pos:[143,312] width:250 height:97 checkbox ignoreGround_chk "Ignore Ground Transform" pos:[153,331] width:150 height:15 radioButtons groundFrames_rdo "" pos:[153,354] width:231 height:16 labels:#("Use frame rate", "Use N frames") columns:2 spinner groundFrameRate_spn "frame rate: " pos:[195,378] width:60 height:16 range:[0,1000,15] type:#integer spinner groundNumFrames_spn "num frames: " pos:[315,378] width:60 height:16 range:[0,1000,2] type:#integer enabled:false groupBox enable_grp "Enable Animation" pos:[10,178] width:124 height:131 checkbox morph_chk "morph" pos:[20,197] width:70 height:15 checkbox vis_chk "visibility" pos:[20,212] width:70 height:15 checked:true checkbox trans_chk "transform" pos:[20,227] width:70 height:15 checked:true checkbox uni_chk "uniform scale" pos:[20,242] width:100 height:15 checkbox arb_chk "arbitrary Scale" pos:[20,257] width:100 height:15 checkbox texture_chk "texture" pos:[20,272] width:70 height:15 checkbox ILF_chk "IFL" pos:[20,287] width:70 height:15 checked:true groupBox force_grp "Force Animation" pos:[10,312] width:124 height:97 checkbox morphForce_chk "morph" pos:[19,328] width:70 height:15 checkbox visForce_chk "visibility" pos:[19,343] width:70 height:15 checkbox transForce_chk "transform" pos:[19,358] width:70 height:15 checkbox scaleForce_chk "scale" pos:[19,373] width:100 height:15 checkbox textureForce_chk "texture" pos:[19,388] width:70 height:15 button load_btn "Create from File" pos:[190,414] width:100 height:18 button save_btn "Save to File" pos:[293,414] width:100 height:18 function EnableControls = ( if blend_chk.checked == false then ( referenceFrame_spn.enabled = false ) else ( referenceFrame_spn.enabled = true ) if frames_rdo.state == 1 then ( frameRate_spn.enabled = true numFrames_spn.enabled = false ) else ( frameRate_spn.enabled = false numFrames_spn.enabled = true ) if overrideDuration_chk.checked == false then ( duration_spn.enabled = false ) else ( duration_spn.enabled = true ) if ignoreGround_chk.checked == false then ( groundFrames_rdo.enabled = true if groundFrames_rdo.state == 1 then ( groundFrameRate_spn.enabled = true groundNumFrames_spn.enabled = false ) else ( groundFrameRate_spn.enabled = false groundNumFrames_spn.enabled = true ) ) else ( groundFrames_rdo.enabled = false groundFrameRate_spn.enabled = false groundNumFrames_spn.enabled = false ) ) function SelectSequences = ( clearSelection() select $sequence_* ) function UpdateSequences = ( SelectSequences() seqArr = #() for o in selection do ( append seqArr (substring o.name 10 o.name.count ) ) sequences_lbx.items = seqArr try( Trigger_rollout.sequences_lbx.items = seqArr ) catch() clearSelection() ) function ResetSequence = ( name_edt.text = "" -- sequence info startFrame_spn.value = 0 endFrame_spn.value = 1 numFrames_spn.value = 1 frames_rdo.state = 1 frameRate_spn.value = 30 priority_spn.value = 5 cyclic_chk.checked = false complete_chk.checked = false overrideDuration_chk.checked = false duration_spn.value = 1.0 -- blend settings blend_chk.checked = false referenceFrame_spn.value = 0 -- ground transform groundFrames_rdo.state = 1 groundNumFrames_spn.value = 2 groundFrameRate_spn.value = 15 ignoreGround_chk.checked = false -- enable animation types morph_chk.checked = false texture_chk.checked = false vis_chk.checked = true trans_chk.checked = true uni_chk.checked = false arb_chk.checked = false ILF_chk.checked = true -- force animation types morphForce_chk.checked = false textureForce_chk.checked = false visForce_chk.checked = false transForce_chk.checked = false scaleForce_chk.checked = false EnableControls() ) function SaveSequence = ( if name_edt.text != "" then ( sequenceName = "sequence_" + name_edt.text s = getNodeByName sequenceName if s == null then ( s = dummy name: sequenceName s.boxsize = [NodeX, NodeY, NodeZ] ) -- sequence info setUserProp s "startFrame" startFrame_spn.value setUserProp s "endFrame" endFrame_spn.value setUserProp s "cyclic" cyclic_chk.checked setUserProp s "completeCycle" complete_chk.checked -- blend settings if blend_chk.checked == false then ( setUserProp s "blend" false RemoveUserProp s "blendReferenceFrame" (getUserProp s "blendReferenceFrame") ) else ( setUserProp s "blend" true setUserProp s "blendReferenceFrame" referenceFrame_spn.value ) -- frame sampling rate setUserProp s "frameType" frames_rdo.state if frames_rdo.state == 1 then ( setUserProp s "frameRate" frameRate_spn.value RemoveUserProp s "numFrames" (getUserProp s "numFrames") ) else ( setUserProp s "numFrames" numFrames_spn.value RemoveUserProp s "frameRate" (getUserProp s "frameRate") ) -- priority setUserProp s "priority" priority_spn.value -- duration if overrideDuration_chk.checked == true then ( setUserProp s "overrideDuration" true setUserProp s "duration" duration_spn.value ) else ( RemoveUserProp s "overrideDuration" (getUserProp s "overrideDuration") RemoveUserProp s "duration" (getUserProp s "duration") ) -- ground transform setUserProp s "groundType" groundFrames_rdo.state if ignoreGround_chk.checked == false then ( if groundFrames_rdo.state == 1 then ( setUserProp s "groundFrameRate" groundFrameRate_spn.value RemoveUserProp s "groundNumFrames" (getUserProp s "groundNumFrames") ) else ( setUserProp s "groundNumFrames" groundNumFrames_spn.value RemoveUserProp s "groundFrameRate" (getUserProp s "groundFrameRate") ) RemoveUserProp s "ignoreGround" true ) else ( setUserProp s "ignoreGround" ignoreGround_chk.checked RemoveUserProp s "groundNumFrames" (getUserProp s "groundNumFrames") RemoveUserProp s "groundFrameRate" (getUserProp s "groundFrameRate") ) -- enable animation types setUserProp s "enableMorph" morph_chk.checked setUserProp s "enableTVert" texture_chk.checked setUserProp s "enableVis" vis_chk.checked setUserProp s "enableTransform" trans_chk.checked setUserProp s "enableScale" true setUserProp s "enableUniformScale" uni_chk.checked setUserProp s "enableAlignedScale" true setUserProp s "enableArbitraryScale" arb_chk.checked setUserProp s "enableIFL" ILF_chk.checked -- force animation types setUserProp s "forceMorph" morphForce_chk.checked setUserProp s "forceTVert" textureForce_chk.checked setUserProp s "forceVis" visForce_chk.checked setUserProp s "forceTransform" transForce_chk.checked setUserProp s "forceScale" scaleForce_chk.checked s.isFrozen = true ) UpdateSequences() ) function EditSequence = ( name_edt.text = sequences_lbx.selected sequenceName = "sequence_" + name_edt.text s = getNodeByName sequenceName startFrame_spn.value = getUserProp s "startFrame" endFrame_spn.value = getUserProp s "endFrame" cyclic_chk.checked = getUserProp s "cyclic" complete_chk.checked = getUserProp s "completeCycle" -- blend settings if (getUserProp s "blend") == true then ( blend_chk.checked = getUserProp s "blend" referenceFrame_spn.value = getUserProp s "blendReferenceFrame" ) else ( blend_chk.checked = false referenceFrame_spn.value = 0 ) -- frame sampleing rate frames_rdo.state = getUserProp s "frameType" if frames_rdo.state == 1 then ( frameRate_spn.value = getUserProp s "frameRate" numFrames_spn.value = 1 ) else ( numFrames_spn.value = getUserProp s "numFrames" frameRate_spn.value = 30 ) -- priority priority_spn.value = getUserProp s "priority" -- duration if (getUserProp s "overrideDuration") == true then ( overrideDuration_chk.checked = getUserProp s "overrideDuration" duration_spn.value = getUserProp s "duration" ) else ( overrideDuration_chk.checked = false duration_spn.value = 1 ) -- ground transform groundFrames_rdo.state = getUserProp s "groundType" if (getUserProp s "ignoreGround") == true then ( ignoreGround_chk.checked = true ) else ( ignoreGround_chk.checked = false if groundFrames_rdo.state == 1 then ( groundFrameRate_spn.value = getUserProp s "groundFrameRate" --groundNumFrames_spn.value = 2 ) else ( groundNumFrames_spn.value = getUserProp s "groundNumFrames" --groundFrameRate_spn.value = 15 ) ) -- enable animation types morph_chk.checked = getUserProp s "enableMorph" texture_chk.checked = getUserProp s "enableTVert" vis_chk.checked = getUserProp s "enableVis" trans_chk.checked = getUserProp s "enableTransform" uni_chk.checked = getUserProp s "enableUniformScale" arb_chk.checked = getUserProp s "enableArbitraryScale" ILF_chk.checked = getUserProp s "enableIFL" -- force animation types morphForce_chk.checked = getUserProp s "forceMorph" textureForce_chk.checked = getUserProp s "forceTVert" visForce_chk.checked = getUserProp s "forceVis" transForce_chk.checked = getUserProp s "forceTransform" scaleForce_chk.checked = getUserProp s "forceScale" EnableControls() ) function SetAmimationTime = ( animationRange = interval startFrame_spn.value endFrame_spn.value ) function GetAmimationTime = ( startFrame_spn.value = animationRange.start endFrame_spn.value = animationRange.end ) on Sequence_rollout open do ( UpdateSequences() EnableControls() if sequences_lbx.selection != 0 then ( EditSequence() ) ) on sequences_lbx selected selSeq do ( EditSequence() ) on delete_btn pressed do ( if sequences_lbx.selection != 0 then ( objTmp = getNodeByName ("sequence_" + sequences_lbx.selected) delete objTmp UpdateSequences() ResetSequence() ) ) on edit_btn pressed do ( if sequences_lbx.selection != 0 then ( SelectedNode = getNodeByName ("sequence_" + sequences_lbx.selected) createDialog RenameSequence_rollout width:225 height:69 ) ) on copy_btn pressed do ( if sequences_lbx.selection != 0 then ( objTmp = getNodeByName ("sequence_" + sequences_lbx.selected) curProp = getUserPropBuffer objTmp newObj = copy objTmp newObj.name = ("sequence_" + sequences_lbx.selected + "_copy") newObj.isFrozen = true setUserPropBuffer newObj curProp UpdateSequences() ) ) on add_btn pressed do ( ResetSequence() --setFocus name_edt createDialog NewSequence_rollout width:225 height:69 ) on setTime_btn pressed do ( SetAmimationTime () ) on getTime_btn pressed do ( GetAmimationTime () ) on playAni_btn pressed do ( playAnimation() ) on stopAni_btn pressed do ( stopAnimation() ) on startFrame_spn changed curState do ( SaveSequence() ) on endFrame_spn changed curState do ( SaveSequence() ) on cyclic_chk changed curState do ( SaveSequence() ) on complete_chk changed curState do ( SaveSequence() ) on blend_chk changed blendState do ( referenceFrame_spn.enabled = blendState SaveSequence() ) on referenceFrame_spn changed do ( SaveSequence() ) on frames_rdo changed curState do ( if curState == 2 then ( numFrames_spn.enabled = true frameRate_spn.enabled = false ) else ( numFrames_spn.enabled = false frameRate_spn.enabled = true ) SaveSequence() ) on frameRate_spn changed curState do ( SaveSequence() ) on numFrames_spn changed curState do ( SaveSequence() ) on priority_spn changed curState do ( SaveSequence() ) on overrideDuration_chk changed durState do ( duration_spn.enabled = durState SaveSequence() ) on duration_spn changed curState do ( SaveSequence() ) on ignoreGround_chk changed ignoreState do ( if ignoreState == true then ( groundFrames_rdo.enabled = false groundFrames_rdo.state = 1 groundFrameRate_spn.enabled = false groundNumFrames_spn.enabled = false ) else ( groundFrames_rdo.enabled = true groundFrames_rdo.state = 1 groundFrameRate_spn.enabled = true ) SaveSequence() ) on groundFrames_rdo changed curState do ( if curState == 2 then ( groundNumFrames_spn.enabled = true groundFrameRate_spn.enabled = false ) else ( groundNumFrames_spn.enabled = false groundFrameRate_spn.enabled = true ) SaveSequence() ) on groundFrameRate_spn changed curState do ( SaveSequence() ) on groundNumFrames_spn changed curState do ( SaveSequence() ) on morph_chk changed curState do ( SaveSequence() ) on vis_chk changed curState do ( SaveSequence() ) on trans_chk changed curState do ( SaveSequence() ) on uni_chk changed curState do ( SaveSequence() ) on arb_chk changed curState do ( SaveSequence() ) on texture_chk changed curState do ( SaveSequence() ) on ILF_chk changed curState do ( SaveSequence() ) on morphForce_chk changed curState do ( SaveSequence() ) on visForce_chk changed curState do ( SaveSequence() ) on transForce_chk changed curState do ( SaveSequence() ) on scaleForce_chk changed curState do ( SaveSequence() ) on textureForce_chk changed curState do ( SaveSequence() ) on load_btn pressed do ( seqOpenPath = getOpenFileName caption:"Load Sequence Settings:" filename:"$scripts/dts/sequences/" if seqOpenPath != undefined then ( seqFile = openFile seqOpenPath seek seqFile #eof maxlen=filepos seqFile seek seqFile 0 curProp = readChars seqFile maxlen errorAtEOF:false seqName = (getFilenameFile seqOpenPath) sequenceName = ("sequence_" + seqName) s = dummy name: sequenceName s.boxsize = [NodeX, NodeY, NodeZ] s.isFrozen = true setUserPropBuffer s curProp ) UpdateSequences() ) on save_btn pressed do ( if sequences_lbx.selection != 0 then ( seqName = sequences_lbx.selected objTmp = getNodeByName ("sequence_" + seqName) curProp = getUserPropBuffer objTmp seqSavePath = getSaveFileName caption:"Save Sequence Settings:" filename:("$scripts/dts/sequences/" + seqName + ".txt") if seqSavePath != undefined then ( seqFilePath = seqSavePath seqFile = createfile seqFilePath format "%" curProp to:seqFile close seqFile ) ) UpdateSequences() ) ) --------------------------------------------------------------------- -- Node Manager --------------------------------------------------------------------- rollout CFGSettings_rollout "CFG Settings" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[0,0] group "Dump File Settings" ( checkbox NodeCollection_chk "Node Collection" across:2 checkbox ShapeConstruction_chk "Shape Construction" checkbox NodeCulling_chk "Node Culling" across:2 checkbox NodeStates_chk "Node States" checkbox NodeStateDetails_chk "Node State Details" across:2 checkbox ObjectStates_chk "Object States" checkbox ObjectStateDetails_chk "Object State Details" across:2 checkbox ObjectOffsets_chk "Object Offsets" checkbox SequenceDetails_chk "Sequence Details" across:2 checkbox ShapeHierarchy_chk "Shape Hierarchy" ) group "Error Control" ( checkbox AllowEmptySubtrees_chk "Allow Empty Subtrees " across:2 checkbox AllowCrossedDetails_chk "Allow Crossed Details" checkbox AllowUnusedMeshes_chk "Allow Unused Meshes" ) group "Default Sequence Settings" ( checkbox defaultCyclic_chk "Default Cyclic" across:2 checkbox defaultBlend_chk "Default Blend" checkbox defaultFirstLastFrameSame_chk "First Last Frame Same" across:2 checkbox defaultUseFrameRate_chk "Use FrameRate" checkbox defaultIgnoreGroundTransform_chk "Ignore GroundTransform" across:2 checkbox defaultUseGroundFrameRate_chk "Use Ground FrameRate" checkbox defaultEnableMorphAnimation_chk "Enable Morph Animation" across:2 checkbox defaultEnableVisAnimation_chk "Enable Vis Animation" checkbox defaultEnableTransformAnimation_chk "Enable Transform Animation" across:2 checkbox defaultForceMorphAnimation_chk "Force Morph Animation" checkbox defaultForceVisAnimation_chk "Force Vis Animation" across:2 checkbox defaultForceTransformAnimation_chk "Force Transform Animation" checkbox defaultOverrideDuration_chk "Override Duration" --defaultFrameRate --defaultGroundFrameRate --defaultDuration --defaultNumFrames --defaultNumGroundFrames --defaultDefaultSequencePriority ) group "Paramaters" ( checkbox EnableTwoSidedMaterials_chk "Enable TwoSided Materials" across:2 checkbox CollapseTransforms_chk "Collapse Transforms" checkbox SequenceExport_chk "Sequence Export" --AnimationDelta --MaxFrameRate --SkinWeightThreshhold --weightsPerVertex --baseTexturePath ) group "Smoothing Groups" ( checkbox IgnoreOnSkinMesh_chk "Ignore On Skined Mesh" across:2 checkbox IgnoreDuringCollapse_chk "Ignore During Collapse " ) button cfgCancel_btn "cancel" width:75 height:20 across:2 button cfgApply_btn "apply" width:75 height:20 function UpdateCFGSettings = ( n = getNodeByName "cfg_settings" -- dmp file settings NodeCollection_chk.checked = getUserProp n "NodeCollection" ShapeConstruction_chk.checked = getUserProp n "ShapeConstruction" NodeCulling_chk.checked = getUserProp n "NodeCulling" NodeStates_chk.checked = getUserProp n "NodeStates" NodeStateDetails_chk.checked = getUserProp n "NodeStateDetails" ObjectStates_chk.checked = getUserProp n "ObjectStates" ObjectStateDetails_chk.checked = getUserProp n "ObjectStateDetails" ObjectOffsets_chk.checked = getUserProp n "ObjectOffsets" SequenceDetails_chk.checked = getUserProp n "SequenceDetails" ShapeHierarchy_chk.checked = getUserProp n "ShapeHierarchy" -- error control AllowEmptySubtrees_chk.checked = getUserProp n "AllowEmptySubtrees" AllowCrossedDetails_chk.checked = getUserProp n "AllowCrossedDetails" AllowUnusedMeshes_chk.checked = getUserProp n "AllowUnusedMeshes" -- sequence settings defaultCyclic_chk.checked = getUserProp n "defaultCyclic" defaultBlend_chk.checked = getUserProp n "defaultBlend" defaultFirstLastFrameSame_chk.checked = getUserProp n "defaultFirstLastFrameSame" defaultUseFrameRate_chk.checked = getUserProp n "defaultUseFrameRate" defaultIgnoreGroundTransform_chk.checked = getUserProp n "defaultIgnoreGroundTransform" defaultUseGroundFrameRate_chk.checked = getUserProp n "defaultUseGroundFrameRate" defaultEnableMorphAnimation_chk.checked = getUserProp n "defaultEnableMorphAnimation" defaultEnableVisAnimation_chk.checked = getUserProp n "defaultEnableVisAnimation" defaultEnableTransformAnimation_chk.checked = getUserProp n "defaultEnableTransformAnimation" defaultForceMorphAnimation_chk.checked = getUserProp n "defaultForceMorphAnimation" defaultForceVisAnimation_chk.checked = getUserProp n "defaultForceVisAnimation" defaultForceTransformAnimation_chk.checked = getUserProp n "defaultForceTransformAnimation" defaultOverrideDuration_chk.checked = getUserProp n "defaultOverrideDuration" -- param settings EnableTwoSidedMaterials_chk.checked = getUserProp n "EnableTwoSidedMaterials" CollapseTransforms_chk.checked = getUserProp n "CollapseTransforms" SequenceExport_chk.checked = getUserProp n "SequenceExport" -- smoothing groups IgnoreOnSkinMesh_chk.checked = getUserProp n "IgnoreOnSkinMesh" IgnoreDuringCollapse_chk.checked = getUserProp n "IgnoreDuringCollapse" ) function SaveCFGSettings = ( n = getNodeByName "cfg_settings" -- dmp file settings setUserProp n "NodeCollection" NodeCollection_chk.checked setUserProp n "ShapeConstruction" ShapeConstruction_chk.checked setUserProp n "NodeCulling" NodeCulling_chk.checked setUserProp n "NodeStates" NodeStates_chk.checked setUserProp n "NodeStateDetails" NodeStateDetails_chk.checked setUserProp n "ObjectStates" ObjectStates_chk.checked setUserProp n "ObjectStateDetails" ObjectStateDetails_chk.checked setUserProp n "ObjectOffsets" ObjectOffsets_chk.checked setUserProp n "SequenceDetails" SequenceDetails_chk.checked setUserProp n "ShapeHierarchy" ShapeHierarchy_chk.checked -- error control setUserProp n "AllowEmptySubtrees" AllowEmptySubtrees_chk.checked setUserProp n "AllowCrossedDetails" AllowCrossedDetails_chk.checked setUserProp n "AllowUnusedMeshes" AllowUnusedMeshes_chk.checked -- sequence settings setUserProp n "defaultCyclic" defaultCyclic_chk.checked setUserProp n "defaultBlend" defaultBlend_chk.checked setUserProp n "defaultFirstLastFrameSame" defaultFirstLastFrameSame_chk.checked setUserProp n "defaultUseFrameRate" defaultUseFrameRate_chk.checked setUserProp n "defaultIgnoreGroundTransform" defaultIgnoreGroundTransform_chk.checked setUserProp n "defaultUseGroundFrameRate" defaultUseGroundFrameRate_chk.checked setUserProp n "defaultEnableMorphAnimation" defaultEnableMorphAnimation_chk.checked setUserProp n "defaultEnableVisAnimation" defaultEnableVisAnimation_chk.checked setUserProp n "defaultEnableTransformAnimation" defaultEnableTransformAnimation_chk.checked setUserProp n "defaultForceMorphAnimation" defaultForceMorphAnimation_chk.checked setUserProp n "defaultForceVisAnimation" defaultForceVisAnimation_chk.checked setUserProp n "defaultForceTransformAnimation" defaultForceTransformAnimation_chk.checked setUserProp n "defaultOverrideDuration" defaultOverrideDuration_chk.checked -- param settings setUserProp n "EnableTwoSidedMaterials" EnableTwoSidedMaterials_chk.checked setUserProp n "CollapseTransforms" CollapseTransforms_chk.checked setUserProp n "SequenceExport" SequenceExport_chk.checked -- smoothing groups setUserProp n "IgnoreOnSkinMesh" IgnoreOnSkinMesh_chk.checked setUserProp n "IgnoreDuringCollapse" IgnoreDuringCollapse_chk.checked ) on CFGSettings_rollout open do ( UpdateCFGSettings() ) on cfgCancel_btn pressed do ( try(destroyDialog CFGSettings_rollout) catch() ) on cfgApply_btn pressed do ( SaveCFGSettings() try(destroyDialog CFGSettings_rollout) catch() ) ) rollout RenameNode_rollout "Rename Node" ( label rename_lbl "Node Name:" pos:[13,14] width:77 height:15 editText nodeName_edt "" pos:[91,12] width:122 height:20 button renameCancel_btn "cancel" pos:[95,36] width:58 height:20 button renameApply_btn "apply" pos:[155,36] width:58 height:20 on RenameNode_rollout open do ( nodeName_edt.text = SelectedNode.name setFocus nodeName_edt ) on renameCancel_btn pressed do ( try(destroyDialog RenameNode_rollout) catch() ) on renameApply_btn pressed do ( SelectedNode.name = nodeName_edt.text SelectedNode = null try(Node_rollout.UpdateNodes()) catch() try(destroyDialog RenameNode_rollout) catch() ) ) rollout Node_rollout "Node Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[1,1] groupBox nodes_grp "Nodes" pos:[10,20] width:381 height:175 button deleteNode_btn "-" pos:[22,39] width:23 height:16 button editNode_btn "edit" pos:[46,39] width:34 height:16 button renameNode_btn "rename" pos:[81,39] width:50 height:16 button addNode_btn "+" pos:[132,39] width:23 height:16 multiListBox nodes_lbx "" pos:[23,56] width:151 height:9 groupBox nodeSettings_grp "Node Settings" pos:[195,37] width:181 height:143 label nodeName_lbl "Name:" pos:[209,61] width:58 height:15 editText nodeName_edt "" pos:[240,58] width:99 height:21 checkbox alwaysExport_chk "always export" pos:[244,88] width:111 height:16 checked: true checkbox neverExport_chk "never export" pos:[244,107] width:111 height:16 checkbox neverAnimate_chk "never animate" pos:[244,127] width:111 height:16 button saveNode_btn "save" pos:[302,150] width:64 height:16 groupBox nodePresets_grp "Node Presets" pos:[11,205] width:173 height:222 button deletePreset_btn "-" pos:[22,226] width:23 height:16 button editPreset_btn "edit" pos:[46,226] width:34 height:16 button addPreset_btn "+" pos:[82,226] width:23 height:16 button applyPreset_btn "apply" pos:[132,226] width:42 height:16 listBox presets_lbx "" pos:[23,243] width:150 height:5 groupBox presetSettings_grp "Preset Settings" pos:[23,319] width:150 height:99 label presetName_lbl "name:" pos:[32,345] width:36 height:15 editText presetName_edt "" pos:[63,342] width:99 height:21 enabled:false label presetNodes_lbl "nodes:" pos:[32,370] width:36 height:15 editText presetNodes_edt "" pos:[63,367] width:99 height:21 enabled:false button savePreset_btn "save" pos:[99,393] width:64 height:16 enabled:false groupBox nodeUtilities_grp "Node Utilities" pos:[195,205] width:195 height:222 button createCFG_btn "create .CFG" pos:[216,231] width:155 height:20 button setAlwaysExport_btn "set always export" pos:[216,257] width:155 height:20 button setNeverExport_btn "set never export" pos:[216,283] width:155 height:20 button setNeverAnimate_btn "set never animate" pos:[216,309] width:155 height:20 button removeSettings_btn "remove .CFG settings" pos:[216,335] width:155 height:20 button cfgSettings_btn ".CFG settings" pos:[216,360] width:155 height:20 function SelectNodes = ( clearSelection() select $* try ( deselect $detail* ) catch () try ( deselect $collision* ) catch () try ( deselect $loscol* ) catch () try ( deselect $sequence_* ) catch () try ( deselect $cfg_settings ) catch () --print( classOf $Base01 ) ) function UpdateNodes = ( SelectNodes() nodeArr = #() for o in selection do ( if classOf o == BoneGeometry then append nodeArr o.name if classOf o == Dummy then append nodeArr o.name ) nodes_lbx.items = nodeArr clearSelection() ) function ResetNodes = ( nodeName_edt.text = "" alwaysExport_chk.checked = true neverExport_chk.checked = false neverAnimate_chk.checked = false ) function GetNode selNode = ( n = getNodeByName selNode if n != null then ( nodeName_edt.text = selNode if (getUserProp n "alwaysExport") == true then ( alwaysExport_chk.checked = true ) else ( alwaysExport_chk.checked = false ) if (getUserProp n "neverExport") == true then ( neverExport_chk.checked = true ) else ( neverExport_chk.checked = false ) if (getUserProp n "neverAnimate") == true then ( neverAnimate_chk.checked = true ) else ( neverAnimate_chk.checked = false ) ) else ( UpdateNodes() ) ) function CreateNode name alwaysX neverX neverA = ( if name != "" then ( CreateDTSShape() n = getNodeByName name if n == null then ( n = dummy name: name n.boxsize = [NodeX, NodeY, NodeZ] n.parent = $start01 ) setUserProp n "alwaysExport" alwaysX setUserProp n "neverExport" neverX setUserProp n "neverAnimate" neverA ) UpdateNodes() ) function DeleteNode tmpNodes = ( --if nodes_lbx.selection != 0 then if tmpNodes.count != 0 then ( for node in tmpNodes do ( n = getNodeByName nodes_lbx.items[node] delete n ) UpdateNodes() ) ) function UpdatePresets = ( setNames = getINISetting "$scripts\dts_nodes.ini" "NodeSets" "SetNames" presetList = (filterString setNames ", -") if presetList.count != 0 then ( presets_lbx.items = presetList ) ) function EditPreset preset = ( presetName_edt.text = preset presetNodes_edt.text = (getINISetting "$scripts\dts_nodes.ini" "NodeSets" preset) ) function CreateNodeSet setName setNodes = ( tmpSet = filterString setNodes ", -" tmpNames = "" for name in tmpSet do ( tmpNames += ( name + "," ) ) setINISetting "$scripts\dts_nodes.ini" "NodeSets" setName (trimRight tmpNames ",") setNames = getINISetting "$scripts\dts_nodes.ini" "NodeSets" "SetNames" tmpSetNames = filterString setNames ", -" nameTest = findItem tmpSetNames setName if nameTest == 0 then ( append tmpSetNames setName ) tmpNames = "" for name in tmpSetNames do ( tmpNames += ( name + "," ) ) setINISetting "$scripts\dts_nodes.ini" "NodeSets" "SetNames" (trimRight tmpNames ",") UpdatePresets() ) function DeleteNodeSet preset = ( delIniSetting "$scripts\dts_nodes.ini" "NodeSets" preset setNames = getINISetting "$scripts\dts_nodes.ini" "NodeSets" "SetNames" tmpSetNames = filterString setNames ", -" deleteItem tmpSetNames (findItem tmpSetNames preset) tmpNames = "" for name in tmpSetNames do ( tmpNames += ( name + "," ) ) setINISetting "$scripts\dts_nodes.ini" "NodeSets" "SetNames" (trimRight tmpNames ",") presetName_edt.text = "" presetNodes_edt.text = "" UpdatePresets() ) function EnablePreset = ( presetName_edt.enabled = true presetNodes_edt.enabled = true savePreset_btn.enabled = true ) function DisablePreset = ( presetName_edt.enabled = false presetNodes_edt.enabled = false savePreset_btn.enabled = false ) function DisableSettings = ( nodeName_edt.enabled = false alwaysExport_chk.enabled = false neverExport_chk.enabled = false neverAnimate_chk.enabled = false ) function EnableSettings = ( nodeName_edt.enabled = true alwaysExport_chk.enabled = true neverExport_chk.enabled = true neverAnimate_chk.enabled = true ) function CreateCFGNode = ( if getNodeByName "cfg_settings" == undefined then ( n = dummy name: "cfg_settings" boxsize:[NodeX, NodeY, NodeZ] n.isFrozen = true cfg_text = "NodeCollection = true\r\n" -- dmp settings cfg_text = cfg_text + "ShapeConstruction = true\r\n" cfg_text = cfg_text + "NodeCulling = true\r\n" cfg_text = cfg_text + "NodeStates = true\r\n" cfg_text = cfg_text + "NodeStateDetails = true\r\n" cfg_text = cfg_text + "ObjectStates = true\r\n" cfg_text = cfg_text + "ObjectStateDetails = true\r\n" cfg_text = cfg_text + "ObjectOffsets = true\r\n" cfg_text = cfg_text + "SequenceDetails = true\r\n" cfg_text = cfg_text + "ShapeHierarchy = true\r\n" -- error control cfg_text = cfg_text + "AllowEmptySubtrees = true\r\n" cfg_text = cfg_text + "AllowCrossedDetails = false\r\n" cfg_text = cfg_text + "AllowUnusedMeshes = true\r\n" -- sequence defaults cfg_text = cfg_text + "defaultCyclic = true\r\n" cfg_text = cfg_text + "defaultBlend = false\r\n" cfg_text = cfg_text + "defaultFirstLastFrameSame = false\r\n" cfg_text = cfg_text + "defaultUseFrameRate = true\r\n" cfg_text = cfg_text + "defaultIgnoreGroundTransform = false\r\n" cfg_text = cfg_text + "defaultUseGroundFrameRate = false\r\n" cfg_text = cfg_text + "defaultEnableMorphAnimation = false\r\n" cfg_text = cfg_text + "defaultEnableVisAnimation = false\r\n" cfg_text = cfg_text + "defaultEnableTransformAnimation = true\r\n" cfg_text = cfg_text + "defaultForceMorphAnimation = false\r\n" cfg_text = cfg_text + "defaultForceVisAnimation = false\r\n" cfg_text = cfg_text + "defaultForceTransformAnimation = false\r\n" cfg_text = cfg_text + "defaultOverrideDuration = false\r\n" cfg_text = cfg_text + "defaultFrameRate = 15.000000\r\n" cfg_text = cfg_text + "defaultGroundFrameRate = 15.000000\r\n" cfg_text = cfg_text + "defaultDuration = 1.000000\r\n" cfg_text = cfg_text + "defaultNumFrames = 2\r\n" cfg_text = cfg_text + "defaultNumGroundFrames = 2\r\n" cfg_text = cfg_text + "defaultDefaultSequencePriority = 0\r\n" -- parameter settings cfg_text = cfg_text + "EnableTwoSidedMaterials = true\r\n" cfg_text = cfg_text + "CollapseTransforms = true\r\n" cfg_text = cfg_text + "SequenceExport = true\r\n" cfg_text = cfg_text + "AnimationDelta = 0.000100\r\n" cfg_text = cfg_text + "MaxFrameRate = 30.000000\r\n" cfg_text = cfg_text + "SkinWeightThreshhold = 0.001000\r\n" cfg_text = cfg_text + "weightsPerVertex = 10\r\n" cfg_text = cfg_text + "baseTexturePath = .\r\n" -- smoothing groups cfg_text = cfg_text + "IgnoreOnSkinMesh = true\r\n" cfg_text = cfg_text + "IgnoreDuringCollapse = false\r\n" setUserPropBuffer n cfg_text ) ) on Node_rollout open do ( UpdateNodes() EnableSettings() UpdatePresets() ) on nodes_lbx selected selNode do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count == 1 then ( EnableSettings() GetNode nodes_lbx.items[selectionTmp[1]] ) else ( DisableSettings() ) ) on nodes_lbx doubleClicked selNode do ( UpdateNodes() ) on saveNode_btn pressed do ( CreateNode nodeName_edt.text alwaysExport_chk.checked neverExport_chk.checked neverAnimate_chk.checked ) on deleteNode_btn pressed do ( DeleteNode (nodes_lbx.selection as array) ) on editNode_btn pressed do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count != 0 then ( GetNode nodes_lbx.items[selectionTmp[1]] ) ) on renameNode_btn pressed do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count != 0 then ( SelectedNode = getNodeByName nodes_lbx.items[selectionTmp[1]] createDialog RenameNode_rollout width:225 height:69 ) ) on addNode_btn pressed do ( ResetNodes() setFocus nodeName_edt ) on presets_lbx selected selPreset do ( EditPreset presets_lbx.selected DisablePreset() ) on deletePreset_btn pressed do ( if presets_lbx.selection != 0 then ( DeleteNodeSet presets_lbx.selected ) ) on editPreset_btn pressed do ( if presets_lbx.selection != 0 then ( EditPreset presets_lbx.selected EnablePreset() ) ) on addPreset_btn pressed do ( presetName_edt.text = "" presetNodes_edt.text = "" EnablePreset() ) on applyPreset_btn pressed do ( if presets_lbx.selection != 0 then ( ApplyNodePreset presets_lbx.selected ) ) on savePreset_btn pressed do ( if presetName_edt.text != "" then ( CreateNodeSet presetName_edt.text presetNodes_edt.text ) DisablePreset() ) on createCFG_btn pressed do ( CreateConfigFile undefined ) on setAlwaysExport_btn pressed do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count != 0 then ( for i = 1 to selectionTmp.count do ( n = getNodeByName nodes_lbx.items[selectionTmp[i]] setUserProp n "alwaysExport" true ) ) ) on setNeverExport_btn pressed do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count != 0 then ( for i = 1 to selectionTmp.count do ( n = getNodeByName nodes_lbx.items[selectionTmp[i]] setUserProp n "neverExport" true ) ) ) on setNeverAnimate_btn pressed do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count != 0 then ( for i = 1 to selectionTmp.count do ( n = getNodeByName nodes_lbx.items[selectionTmp[i]] setUserProp n "neverAnimate" true ) ) ) on removeSettings_btn pressed do ( selectionTmp = nodes_lbx.selection as array if selectionTmp.count != 0 then ( for i = 1 to selectionTmp.count do ( n = getNodeByName nodes_lbx.items[selectionTmp[i]] setUserProp n "alwaysExport" false setUserProp n "neverExport" false setUserProp n "neverAnimate" false ) ) try( delete $cfg_settings ) catch() ) on cfgSettings_btn pressed do ( CreateCFGNode() createDialog CFGSettings_rollout width:350 height:515 ) ) --------------------------------------------------------------------- -- Billboard Manager --------------------------------------------------------------------- rollout Billboard_rollout "Billboard Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[1,1] groupBox details_grp "Detail Meshes" pos:[7,20] width:380 height:130 listBox details_lbx "" pos:[18,41] width:164 height:7 groupBox detailMarkers_grp "Detail Markers" pos:[7,155] width:380 height:194 listBox detailMarkers_lbx "" pos:[18,175] width:164 height:12 groupBox detailUtil_grp "Billboard Settings" pos:[200,35] width:170 height:104 checkbox billboard_chk "Set as billboard" pos:[221,50] width:128 height:18 groupBox btype_grp "Billboard Type:" pos:[220,70] width:131 height:58 radioButtons bbtype_rdo "" pos:[244,88] width:67 height:32 labels:#("billboard", "billboardz") default:1 columns:1 enabled: false groupBox settings_grp "Auto Billboard Settings:" pos:[200,168] width:170 height:169 checkbox autoBillboard_chk "Set as auto billboard" pos:[210,185] width:128 height:18 label equatorSteps_lbl "Equator Steps:" pos:[210,208] width:75 height:17 enabled: false spinner equatorSteps_spn "" pos:[285,207] width:68 height:16 range:[0,25,12] type:#integer scale:0.1 enabled: false label polarSteps_lbl "Polar Steps:" pos:[210,229] width:75 height:17 enabled: false spinner polarSteps_spn "" pos:[285,228] width:68 height:16 range:[0,25,6] type:#integer scale:0.1 enabled: false label detailLvl_lbl "Detail Level:" pos:[210,250] width:75 height:17 enabled: false spinner detailLevel_spn "" pos:[285,249] width:68 height:16 range:[0,1000,2] type:#integer scale:0.1 enabled: false label textureRes_lbl "Texture Res:" pos:[210,271] width:75 height:17 enabled: false spinner dim_spn "" pos:[285,270] width:68 height:16 range:[0,1024,128] type:#integer scale:0.1 enabled: false checkbox incPoles_chk "Include Poles" pos:[210,290] width:101 height:18 enabled: false label polarAng_lbl "Polar Angle:" pos:[210,311] width:75 height:17 enabled: false spinner polarAngle_spn "" pos:[285,310] width:68 height:16 range:[0,90,30] type:#integer scale:0.1 enabled: false function SelectDetailMarkers = ( clearSelection() select $detail* ) function SelectDetails = ( clearSelection() select $geometry try ( deselect $bounds ) catch () try ( deselect $col* ) catch () try ( deselect $los* ) catch () ) function UpdateDetailMarkers = ( SelectDetailMarkers() detailMarkersArr = #() for o in selection do ( append detailMarkersArr o.name ) detailMarkers_lbx.items = detailMarkersArr ClearSelection() ) function UpdateDetails = ( SelectDetails() detailArr = #() for o in selection do ( if classOf o != BoneGeometry then ( append detailArr o.name ) ) details_lbx.items = detailArr clearSelection() UpdateDetailMarkers() ) function EnableBillboard = ( bbtype_rdo.enabled = true ) function EnableAutoBillboard = ( equatorSteps_lbl.enabled = true equatorSteps_spn.enabled = true polarSteps_lbl.enabled = true polarSteps_spn.enabled = true detailLvl_lbl.enabled = true detailLevel_spn.enabled = true textureRes_lbl.enabled = true dim_spn.enabled = true incPoles_chk.enabled = true ) function DisableBillboard = ( billboard_chk.checked = false bbtype_rdo.enabled = false bbtype_rdo.state = 1 ) function DisableAutoBillboard = ( autoBillboard_chk.checked = false equatorSteps_lbl.enabled = false equatorSteps_spn.enabled = false polarSteps_lbl.enabled = false polarSteps_spn.enabled = false detailLvl_lbl.enabled = false detailLevel_spn.enabled = false textureRes_lbl.enabled = false dim_spn.enabled = false incPoles_chk.enabled = false incPoles_chk.checked = false polarAng_lbl.enabled = false polarAngle_spn.enabled = false ) function SaveBillboard = ( if details_lbx.selected != null then ( b = getNodeByName details_lbx.selected if billboard_chk.checked == true then ( setUserProp b "enableBillboard" true setUserProp b "bb_Type" bbtype_rdo.state ) else ( setUserPropBuffer b "" ) ) else ( DisableBillboard() ) ) function SaveAutoBillboard = ( if detailMarkers_lbx.selected != null then ( b = getNodeByName detailMarkers_lbx.selected if autoBillboard_chk.checked == true then ( setUserProp b "enableAutoBillboard" true setUserProp b "bb_equator_steps" equatorSteps_spn.value setUserProp b "bb_polar_steps" polarSteps_spn.value setUserProp b "bb_dl" detailLevel_spn.value setUserProp b "bb_dim" dim_spn.value if incPoles_chk.checked == false then ( RemoveUserProp b "bb_include_poles" (getUserProp b "bb_include_poles") RemoveUserProp b "bb_polar_angle" (getUserProp b "bb_polar_angle") ) else ( setUserProp b "bb_include_poles" true setUserProp b "bb_polar_angle" polarAngle_spn.value ) ) else ( setUserPropBuffer b "" ) ) else ( DisableAutoBillboard() ) ) function EditBillboard = ( if details_lbx.selected != null then ( b = getNodeByName details_lbx.selected if b != null then ( if (getUserProp b "enableBillboard") == true then ( billboard_chk.checked = true bbtype_rdo.state = (getUserProp b "bb_Type") EnableBillboard() ) else ( DisableBillboard() ) ) else ( UpdateDetails() EditBillboard() ) ) ) function EditAutoBillboard = ( if detailMarkers_lbx.selected != null then ( b = getNodeByName detailMarkers_lbx.selected if b != null then ( if (getUserProp b "enableAutoBillboard") == true then ( autoBillboard_chk.checked = true equatorSteps_spn.value = (getUserProp b "bb_equator_steps") polarSteps_spn.value = (getUserProp b "bb_polar_steps") detailLevel_spn.value = (getUserProp b "bb_dl") dim_spn.value = (getUserProp b "bb_dim") if (getUserProp b "bb_include_poles") == true then ( incPoles_chk.checked = true polarAng_lbl.enabled = true polarAngle_spn.enabled = true polarAngle_spn.value = (getUserProp b "bb_polar_angle") ) else ( incPoles_chk.checked = false ) EnableAutoBillboard() ) else ( DisableAutoBillboard() ) ) else ( UpdateDetails() EditBillboard() ) ) ) on Billboard_rollout open do ( UpdateDetails() EditBillboard() EditAutoBillboard() ) on details_lbx selected detail do ( EnableBillboard() EditBillboard() ) on billboard_chk changed state do ( if state == true then EnableBillboard() else ( DisableBillboard() ) SaveBillboard() ) on bbtype_rdo changed state do ( SaveBillboard() ) on detailMarkers_lbx selected detail do ( EnableAutoBillboard() EditAutoBillboard() ) on autoBillboard_chk changed state do ( if state == true then EnableAutoBillboard() else ( DisableAutoBillboard() ) SaveAutoBillboard() ) on incPoles_chk changed state do ( if state == true then ( polarAng_lbl.enabled = true polarAngle_spn.enabled = true SaveAutoBillboard() ) else ( polarAng_lbl.enabled = false polarAngle_spn.enabled = false SaveAutoBillboard() ) ) on equatorSteps_spn changed val do ( SaveAutoBillboard() ) on polarSteps_spn changed val do ( SaveAutoBillboard() ) on detailLevel_spn changed val do ( SaveAutoBillboard() ) on dim_spn changed val do ( SaveAutoBillboard() ) on polarAngle_spn changed val do ( SaveAutoBillboard() ) ) --------------------------------------------------------------------- -- Trigger Manager --------------------------------------------------------------------- rollout Trigger_rollout "Trigger Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[1,1] groupBox sequences_grp "Sequences" pos:[9,25] width:186 height:220 listBox sequences_lbx "" pos:[20,45] width:164 height:14 groupBox triggers_grp "Trigger States" pos:[201,25] width:189 height:220 button trigDelete_btn "-" pos:[212,45] width:23 height:16 button trigEdit_btn "edit" pos:[237,45] width:34 height:16 button trigNew_btn "+" pos:[273,45] width:23 height:16 listBox triggers_lbx "" pos:[212,63] width:164 height:5 groupBox trigSet_grp "Trigger Settings" pos:[212,144] width:164 height:90 label trigFrame_lbl "Key Frame:" pos:[223,166] width:70 height:16 spinner trigFrame_spn "" pos:[302,166] width:65 height:16 range:[0,1000,0] type:#integer label trigState_lbl "Trigger State:" pos:[223,194] width:70 height:16 dropDownList trigState_ddl "" pos:[304,185] width:65 height:21 \ items:#("1","-1","2","-2","3","-3","4","-4","5","-5","6","-6","7","-7","8","-8","9","-9","10","-10" \ ,"11","-11","12","-12","13","-13","14","-14","15","-15","16","-16","17","-17","18","-18","19","-19","20","-20" \ ,"21","-21","22","-22","23","-23","24","-24","25","-25","26","-26","27","-27","28","-28","29","-29","30","-30","31","-31","32","-32") button trigSave_btn "save" pos:[303,210] width:64 height:16 range:[0,1,1] function SelectSequences = ( clearSelection() select $sequence_* ) function UpdateSequences = ( SelectSequences() seqArr = #() for o in selection do ( append seqArr (substring o.name 10 o.name.count ) ) sequences_lbx.items = seqArr clearSelection() ) function GetTriggers seq = ( trigArr = #() seqObj = getNodeByName ("sequence_" + seq as string) if seqObj != null then ( numTrig = getUserProp seqObj "numTriggers" if numTrig != null then ( for i = 0 to (numTrig - 1) do ( curTrigFrame = "triggerFrame" + i as string curTrigState = "triggerState" + i as string trigFrame = getUserProp seqObj curTrigFrame as string trigState = getUserProp seqObj curTrigState as string trigTmp = "Key Frame: " + trigFrame + " State: " + trigState append trigArr trigTmp ) ) ) else ( UpdateSequences() ) trigArr ) function AddTrigger frame state = ( if sequences_lbx.selected != null then ( seqObj = getNodeByName ("sequence_" + sequences_lbx.selected) numTrig = getUserProp seqObj "numTriggers" if numTrig == null then numTrig = 0 curTrigFrame = "triggerFrame" + numTrig as string curTrigState = "triggerState" + numTrig as string setUserProp seqObj "numTriggers" (numTrig + 1) setUserProp seqObj curTrigFrame frame setUserProp seqObj curTrigState state ) ) function EditTrigger trigNum = ( if sequences_lbx.selected != null then ( trigNum -= 1 seqObj = getNodeByName ("sequence_" + sequences_lbx.selected) curTrigFrame = "triggerFrame" + trigNum as string curTrigState = "triggerState" + trigNum as string trigFrame_spn.value = getUserProp seqObj curTrigFrame trigState_ddl.selection = findItem trigState_ddl.items (getUserProp seqObj curTrigState as string) ) ) function UpdateTriggers trigNum = ( if sequences_lbx.selected != null then ( trigNum -= 1 seqObj = getNodeByName ("sequence_" + sequences_lbx.selected) curTrigFrame = "triggerFrame" + trigNum as string curTrigState = "triggerState" + trigNum as string setUserProp seqObj curTrigFrame trigFrame_spn.value setUserProp seqObj curTrigState trigState_ddl.selected ) ) function DeleteTrigger num = ( if sequences_lbx.selected != null then ( triggers = #() seqObj = getNodeByName ("sequence_" + sequences_lbx.selected) numTrig = getUserProp seqObj "numTriggers" for i = 0 to (numTrig -= 1) do ( curTrigFrame = "triggerFrame" + i as string curTrigState = "triggerState" + i as string curFrame = getUserProp seqObj curTrigFrame curState = getUserProp seqObj curTrigState append triggers #(curFrame, curState) if i == numTrig then ( RemoveUserProp seqObj curTrigFrame curFrame RemoveUserProp seqObj curTrigState curState setUserProp seqObj "numTriggers" numTrig ) ) deleteItem triggers num for i = 0 to (triggers.count - 1) do ( curTriggerFrame = "triggerFrame" + i as string curTriggerState = "triggerState" + i as string setUserProp seqObj curTriggerFrame triggers[i + 1][1] setUserProp seqObj curTriggerState triggers[i + 1][2] ) ) ) function ResetControls = ( trigSave_btn.text = "save" trigFrame_spn.value = 0 trigState_ddl.selection = 1 ) on Trigger_rollout open do ( UpdateSequences() triggers_lbx.items = (GetTriggers sequences_lbx.selected) ) on sequences_lbx selected seq do ( triggers_lbx.items = (GetTriggers sequences_lbx.selected) ResetControls() ) on sequences_lbx doubleclicked seq do ( UpdateSequences() ) on trigDelete_btn pressed do ( if triggers_lbx.selection != 0 then ( DeleteTrigger triggers_lbx.selection triggers_lbx.items = (GetTriggers sequences_lbx.selected) ResetControls() ) ) on trigEdit_btn pressed do ( if triggers_lbx.selection != 0 then ( EditTrigger triggers_lbx.selection trigSave_btn.text = "update" ) ) on trigNew_btn pressed do ( ResetControls() ) on trigSave_btn pressed do ( if trigSave_btn.text == "save" then ( AddTrigger trigFrame_spn.value trigState_ddl.selected triggers_lbx.items = (GetTriggers sequences_lbx.selected) ResetControls() ) else ( UpdateTriggers triggers_lbx.selection ResetControls() ) ) ) --------------------------------------------------------------------- -- Visibility Manager --------------------------------------------------------------------- rollout Visibility_rollout "Visibility Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[1,1] groupBox details_grp "Detail Meshes" pos:[9,25] width:186 height:220 listBox details_lbx "" pos:[20,45] width:164 height:14 groupBox visibility_grp "Visibility States" pos:[201,25] width:189 height:220 button visDelete_btn "-" pos:[212,45] width:23 height:16 button visEdit_btn "edit" pos:[237,45] width:34 height:16 button vis_btn "+" pos:[273,45] width:23 height:16 listBox visibility_lbx "" pos:[212,63] width:164 height:5 groupBox visSet_grp "Visibility Settings" pos:[212,144] width:164 height:90 label visFrame_lbl "key Frame:" pos:[223,166] width:70 height:16 spinner visFrame_spn "" pos:[302,166] width:65 height:16 range:[0,1000,0] type:#integer label visValue_lbl "Visibility State:" pos:[223,188] width:70 height:16 spinner visValue_spn "" pos:[302,185] width:65 height:21 range:[0,1,1] button visSave_btn "save" pos:[303,210] width:64 height:16 function SelectDetails = ( clearSelection() select $geometry try ( deselect $bounds ) catch () try ( deselect $col* ) catch () try ( deselect $los* ) catch () ) function UpdateDetails = ( SelectDetails() detailArr = #() for o in selection do ( if classOf o != BoneGeometry then ( append detailArr o.name ) ) details_lbx.items = detailArr clearSelection() ) function GetVisibility detail = ( visArr = #() visObj = getNodeByName (detail as string) if visObj != null then ( numVis = getUserProp visObj "numVis" if numVis != null then ( for i = 0 to (numVis - 1) do ( curVisFrame = "visFrame" + i as string curVisValue = "visValue" + i as string visFrame = getUserProp visObj curVisFrame as string visValue = getUserProp visObj curVisValue as string visTmp = "Key Frame: " + visFrame + " Value: " + visValue append visArr visTmp ) ) ) else ( UpdateDetails() ) visArr ) function AddVisibility frame value = ( if details_lbx.selected != null then ( visObj = getNodeByName details_lbx.selected numVis = getUserProp visObj "numVis" if numVis == null then numVis = 0 curVisFrame = "visFrame" + numVis as string curVisValue = "visValue" + numVis as string setUserProp visObj "numVis" (numVis + 1) setUserProp visObj curVisFrame frame setUserProp visObj curVisValue value ) ) function EditVisibility visNum = ( if details_lbx.selected != null then ( visNum -= 1 visObj = getNodeByName details_lbx.selected curVisFrame = "visFrame" + visNum as string curVisValue = "visValue" + visNum as string visFrame_spn.value = getUserProp visObj curVisFrame visValue_spn.value = getUserProp visObj curVisValue ) ) function UpdateVisibility visNum = ( if details_lbx.selected != null then ( visNum -= 1 visObj = getNodeByName details_lbx.selected curVisFrame = "visFrame" + visNum as string curVisValue = "visValue" + visNum as string setUserProp visObj curVisFrame visFrame_spn.value setUserProp visObj curVisValue visValue_spn.value ) ) function DeleteVisibility num = ( if details_lbx.selected != null then ( visibility = #() visObj = getNodeByName details_lbx.selected numVis = getUserProp visObj "numVis" for i = 0 to (numVis -= 1) do ( curVisFrame = "visFrame" + i as string curVisValue = "visValue" + i as string curFrame = getUserProp visObj curVisFrame curValue = getUserProp visObj curVisValue append visibility #(curFrame, curValue) if i == numVis then ( RemoveUserProp visObj curVisFrame curFrame RemoveUserProp visObj curVisValue curValue setUserProp visObj "numVis" numVis ) ) deleteItem visibility num for i = 0 to (visibility.count - 1) do ( curVisFrame = "visFrame" + i as string curVisValue = "visValue" + i as string setUserProp visObj curVisFrame visibility[i + 1][1] setUserProp visObj curVisValue visibility[i + 1][2] ) ) ) function ResetControls = ( visSave_btn.text = "save" visFrame_spn.value = 0 visValue_spn.value = 1 ) function MakeVisibility = ( visibility = #() visObj = getNodeByName details_lbx.selected numVis = getUserProp visObj "numVis" if getVisController visObj == null then ( visObj.visibility = bezier_float() ) for i = 0 to (numVis -= 1) do ( curVisFrame = "visFrame" + i as string curVisValue = "visValue" + i as string curFrame = getUserProp visObj curVisFrame curValue = getUserProp visObj curVisValue append visibility #(curFrame, curValue) ) deleteKeys visObj.visibility.controller visObj.visibility.controller.value = 1 for i = 0 to (visibility.count - 1) do ( animate on at time (visibility[i + 1][1]) visObj.visibility.controller.value = (visibility[i + 1][2]) ) ) on Visibility_rollout open do ( UpdateDetails() visibility_lbx.items = (GetVisibility details_lbx.selected) ) on details_lbx selected seq do ( visibility_lbx.items = (GetVisibility details_lbx.selected) ResetControls() ) on details_lbx doubleclicked seq do ( UpdateDetails() ) on visDelete_btn pressed do ( if visibility_lbx.selection != 0 then ( DeleteVisibility visibility_lbx.selection visibility_lbx.items = (GetVisibility details_lbx.selected) MakeVisibility() ResetControls() ) ) on visEdit_btn pressed do ( if visibility_lbx.selection != 0 then ( EditVisibility visibility_lbx.selection visSave_btn.text = "update" ) ) on visNew_btn pressed do ( ResetControls() ) on visSave_btn pressed do ( if details_lbx.selection != 0 then ( if visSave_btn.text == "save" then ( AddVisibility visFrame_spn.value visValue_spn.value visibility_lbx.items = (GetVisibility details_lbx.selected) MakeVisibility() ResetControls() ) else ( UpdateVisibility visibility_lbx.selection MakeVisibility() ResetControls() ) ) ) ) --------------------------------------------------------------------- -- Collision Manager --------------------------------------------------------------------- rollout Collision_rollout "Collision Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[0,0] groupBox details_grp "Detail Meshes:" pos:[7,21] width:132 height:259 MultiListBox details_lbx "" pos:[17,38] width:111 height:14 radioButtons colType_rdo "" pos:[17,230] width:100 height:32 \ labels:#("use copy of mesh", "use actual mesh", "use volume") columns:1 default:3 groupBox col_grp "Collision:" pos:[148,21] width:89 height:259 button col1_btn "Col-1" pos:[157,40] width:70 height:20 button col2_btn "Col-2" pos:[157,69] width:70 height:20 button col3_btn "Col-3" pos:[157,99] width:70 height:20 button col4_btn "Col-4" pos:[157,129] width:70 height:20 button col5_btn "Col-5" pos:[157,160] width:70 height:20 button col6_btn "Col-6" pos:[157,191] width:70 height:20 button col7_btn "Col-7" pos:[157,222] width:70 height:20 button col8_btn "Col-8" pos:[157,252] width:70 height:20 button copy1_btn "copy >" pos:[245,40] width:50 height:20 button copy2_btn "copy >" pos:[245,69] width:50 height:20 button copy3_btn "copy >" pos:[245,99] width:50 height:20 button copy4_btn "copy >" pos:[245,129] width:50 height:20 button copy5_btn "copy >" pos:[245,160] width:50 height:20 button copy6_btn "copy >" pos:[245,191] width:50 height:20 button copy7_btn "copy >" pos:[245,222] width:50 height:20 groupBox los_grp "LOS Collision:" pos:[304,21] width:88 height:259 button los9_btn "LOScol-9" pos:[314,40] width:70 height:20 button los10_btn "LOScol-10" pos:[313,69] width:70 height:20 button los11_btn "LOScol-11" pos:[313,99] width:70 height:20 button los12_btn "LOScol-12" pos:[313,129] width:70 height:20 button los13_btn "LOScol-13" pos:[313,160] width:70 height:20 button los14_btn "LOScol-14" pos:[313,191] width:70 height:20 button los15_btn "LOScol-15" pos:[313,222] width:70 height:20 --groupBox colUtil_grp "Collision Utilities:" pos:[7,283] width:385 height:61 function SelectDetails = ( clearSelection() select $geometry try ( deselect $bounds ) catch () --try ( deselect $col* ) catch () --try ( deselect $los* ) catch () ) function UpdateDetails = ( SelectDetails() detailArr = #() for o in selection do ( if classOf o != BoneGeometry then ( append detailArr o.name ) ) details_lbx.items = detailArr clearSelection() ) function CreateCollisionMarker colType colNum = ( colName = "Collision-" + colNum as string if colType == "los" then colName = "LOS-" + colNum as string findCol = getNodeByName colName if findCol == undefined then ( c = dummy name: colName c.boxsize = [ShapeX, ShapeY, ShapeZ] c.parent = $base01 if FreezeMarkers == true then c.isFrozen = true ) ) function CreateColision colType colNum = ( selectionTmp = details_lbx.selection as array if selectionTmp.count != 0 then ( colName = ("Col-" + colNum as string) if colType == "los" then colName = ("LOScol-" + colNum as string) findCol = getNodeByName colName if findCol == undefined then ( if selectionTmp.count == 1 and colType_rdo.state == 1 then ( objTmp = getNodeByName details_lbx.items[selectionTmp[1]] newObj = copy objTmp newObj.name = colName CreateDtsShape() newObj.parent = $start01 CreateCollisionMarker colType colNum ) if selectionTmp.count == 1 and colType_rdo.state == 2 then ( objTmp = getNodeByName details_lbx.items[selectionTmp[1]] objTmp.name = colName CreateDtsShape() objTmp.parent = $start01 CreateCollisionMarker colType colNum ) if selectionTmp.count > 1 or colType_rdo.state == 3 then ( tmpArr = details_lbx.items for obj in tmpArr do ( selectMore (getNodeByName obj) ) if selection.count != 0 then ( w = (selection.max.x - selection.min.x) l = (selection.max.y - selection.min.y) h = selection.max.z - selection.min.z c = selection.center - [0, 0, (h/2)] -- create the collision box col = Box length:l width:w height:h pos:c col.name = colName converttomesh col col.boxmode = on CreateDtsShape() col.parent = $start01 CreateCollisionMarker colType colNum ) ) ) ) UpdateDetails() ) function CopyCollision losNum colNum = ( losName = "LOScol-" + losNum as string colName = "Col-" + colNum as string findLos = getNodeByName losName findCol = getNodeByName colName if findLos == undefined and findCol != undefined then ( objTmp = getNodeByName colName newObj = copy objTmp newObj.name = losName CreateDtsShape() newObj.parent = $start01 if objTmp.boxmode == on then newObj.boxmode = on CreateCollisionMarker "los" losNum ) UpdateDetails() ) on Collision_rollout open do ( UpdateDetails() ) on col1_btn pressed do ( CreateColision "col" 1 ) on col2_btn pressed do ( CreateColision "col" 2 ) on col3_btn pressed do ( CreateColision "col" 3 ) on col4_btn pressed do ( CreateColision "col" 4 ) on col5_btn pressed do ( CreateColision "col" 5 ) on col6_btn pressed do ( CreateColision "col" 6 ) on col7_btn pressed do ( CreateColision "col" 7 ) on col8_btn pressed do ( CreateColision "col" 8 ) on los9_btn pressed do ( CreateColision "los" 9 ) on los10_btn pressed do ( CreateColision "los" 10 ) on los11_btn pressed do ( CreateColision "los" 11 ) on los12_btn pressed do ( CreateColision "los" 12 ) on los13_btn pressed do ( CreateColision "los" 13 ) on los14_btn pressed do ( CreateColision "los" 14 ) on los15_btn pressed do ( CreateColision "los" 15 ) on copy1_btn pressed do ( CopyCollision 9 1 ) on copy2_btn pressed do ( CopyCollision 10 2 ) on copy3_btn pressed do ( CopyCollision 11 3 ) on copy4_btn pressed do ( CopyCollision 12 4 ) on copy5_btn pressed do ( CopyCollision 13 5 ) on copy6_btn pressed do ( CopyCollision 14 6 ) on copy7_btn pressed do ( CopyCollision 15 7 ) ) --------------------------------------------------------------------- -- Material Manager --------------------------------------------------------------------- rollout RenameMaterial_rollout "Rename Material" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[0,0] label rename_lbl "Material Name:" pos:[13,28] width:77 height:15 editText materialName_edt "" pos:[91,26] width:122 height:20 button renameCancel_btn "cancel" pos:[95,50] width:58 height:20 button renameApply_btn "apply" pos:[155,50] width:58 height:20 on RenameMaterial_rollout open do ( materialName_edt.text = SelectedMaterial setFocus materialName_edt ) on renameCancel_btn pressed do ( try(destroyDialog RenameMaterial_rollout) catch() ) on renameApply_btn pressed do ( if SelectedMaterialType == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) materials[SelectedMaterialID].name = materialName_edt.text try(Material_rollout.UpdateMaterials()) catch() try(destroyDialog RenameMaterial_rollout) catch() ) ) rollout Material_rollout "Material Manager" ( imgTag uiGrayBar "" bitmap:GrayBar_bmp pos:[1,1] groupBox materials_grp "Materials" pos:[7,25] width:157 height:330 button matDelete_btn "-" pos:[16,42] width:23 height:16 button matRename_btn "rename" pos:[40,42] width:45 height:16 button matApply_btn "apply" pos:[86,42] width:44 height:16 button matNew_btn "+" pos:[131,42] width:23 height:16 listBox materials_lbx "" pos:[17,60] width:137 height:15 radioButtons materialType_rdo "" pos:[18,269] width:150 height:32 labels:#("Material Editor", "Scene Materials") default:1 columns:1 label showTexture_lbl "Show Material in Viewport" pos:[18,309] width:130 height:18 checked:false button showTextureOff_btn "no" pos:[18,329] width:50 height:17 button showTextureOn_btn "yes" pos:[90,329] width:50 height:17 groupBox materialProp_grp "Material Properties" pos:[172,25] width:216 height:330 groupBox texture_grp "Texture:" pos:[185,44] width:193 height:114 checkbox enableTexture_chk "enable texture" pos:[195,60] width:100 height:18 checked:false button chooseTexture_btn "choose a texture" pos:[195,82] width:105 height:25 bitmap texture_bmp pos:[310,59] width:60 height:50 bitmap:(bitmap 60 50 color:gray) checkbox uwrap_chk "UWrap" pos:[195,115] width:80 height:18 checkbox vwrap_chk "VWrap" pos:[285,115] width:80 height:18 checkbox twoSided_chk "Two Sided" pos:[195,135] width:80 height:18 checked:false checkbox selfIllum_chk "Self Illuminate" pos:[285,135] width:87 height:18 checked:false groupBox trans_grp "Transparency:" pos:[184,164] width:193 height:108 checkbox enableTrans_chk "enable transparency" pos:[195,184] width:167 height:18 checked:false button chooseTrans_btn "choose a texture" pos:[195,204] width:100 height:25 radioButtons transType_rdo "" pos:[212,235] width:150 height:32 labels:#("normal", "subtractive", "additive") default:3 columns:2 groupBox reflection_grp "Reflection:" pos:[184,277] width:193 height:68 checkbox enableReflection_chk "enable reflection" pos:[196,298] width:167 height:18 checked:false spinner reflection_spn "reflection amount:" pos:[278,318] width:75 height:16 range:[0,100,100] type:#float function UpdateMaterials = ( matArr = #() if materialType_rdo.state == 1 then ( for mat in meditMaterials do ( append matArr mat.name ) ) else ( for mat in sceneMaterials do ( append matArr mat.name ) ) materials_lbx.items = matArr ) function ResetMaterial = ( blankImg = bitmap 60 50 color:gray enableTexture_chk.checked = false chooseTexture_btn.text = "choose a texture" texture_bmp.bitmap = blankImg uwrap_chk.checked = false vwrap_chk.checked = false twoSided_chk.checked = false selfIllum_chk.checked = false enableTrans_chk.checked = false chooseTrans_btn.text = "choose a texture" transType_rdo.state = 1 enableReflection_chk.checked = false reflection_spn.value = 100 enableTexture_chk.enabled = true chooseTexture_btn.enabled = true texture_bmp.enabled = true uwrap_chk.enabled = true vwrap_chk.enabled = true twoSided_chk.enabled = true selfIllum_chk.enabled = true enableTrans_chk.enabled = true chooseTrans_btn.enabled = true transType_rdo.enabled = true enableReflection_chk.enabled = true reflection_spn.enabled = true ) function DisableMaterial = ( enableTexture_chk.enabled = false chooseTexture_btn.enabled = false texture_bmp.enabled = false uwrap_chk.enabled = false vwrap_chk.enabled = false twoSided_chk.enabled = false selfIllum_chk.enabled = false enableTrans_chk.enabled = false chooseTrans_btn.enabled = false transType_rdo.enabled = false enableReflection_chk.enabled = false reflection_spn.enabled = false ) function GetMaterial num = ( if num != null then ( ResetMaterial() if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) if classof materials[num] == Standardmaterial then ( enableTexture_chk.checked = materials[num].diffuseMapEnable if classof materials[num].diffusemap == BitmapTexture then ( chooseTexture_btn.text = (filenameFromPath materials[num].diffusemap.filename) texture_bmp.filename = materials[num].diffusemap.filename uwrap_chk.checked = materials[num].diffusemap.coordinates.U_Tile Vwrap_chk.checked = materials[num].diffusemap.coordinates.V_Tile ) twoSided_chk.checked = materials[num].twoSided --selfIllum_chk.checked = materials[num].selfIllumMapEnable if materials[num].selfIllumAmount == 100 then ( selfIllum_chk.checked = true ) else ( selfIllum_chk.checked = false ) enableTrans_chk.checked = materials[num].opacityMapEnable if classof materials[num].opacitymap == BitmapTexture then ( chooseTrans_btn.text = (filenameFromPath materials[num].opacitymap.filename) ) transType_rdo.state = (materials[num].opacityType + 1) enableReflection_chk.checked = materials[num].reflectionMapEnable reflection_spn.value = materials[num].reflectionMapAmount ) else ( ResetMaterial() DisableMaterial() ) ) ) function SetMaterial num = ( if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) materials[num].diffuseMapEnable = enableTexture_chk.checked if enableTexture_chk.checked == false then ( materials[num].diffusemap = undefined ) if classof materials[num].diffusemap == BitmapTexture then ( materials[num].diffusemap.coordinates.U_Tile = uwrap_chk.checked materials[num].diffusemap.coordinates.V_Tile = Vwrap_chk.checked ) else ( uwrap_chk.checked = false vwrap_chk.checked = false ) materials[num].twoSided = twoSided_chk.checked --materials[num].selfIllumMapEnable = selfIllum_chk.checked materials[num].opacityMapEnable = enableTrans_chk.checked if enableTrans_chk.checked == true then ( if materials[num].opacitymap == undefined then ( materials[num].opacitymap = materials[num].diffusemap try( materials[num].opacityMap.alphaSource = 0 ) catch() try( materials[num].opacityMap.monoOutput = 1 ) catch() ) ) else ( materials[num].opacitymap = undefined ) materials[num].opacityType = (transType_rdo.state - 1) materials[num].reflectionMapEnable = enableReflection_chk.checked materials[num].reflectionMapAmount = reflection_spn.value GetMaterial num ) on Material_rollout open do ( UpdateMaterials() GetMaterial materials_lbx.selection ) on materials_lbx selected state do ( GetMaterial materials_lbx.selection ) on materials_lbx doubleclicked state do ( GetMaterial materials_lbx.selection ) on materialType_rdo changed state do ( UpdateMaterials() ResetMaterial() ) on matRename_btn pressed do ( if materials_lbx.selection != 0 then ( SelectedMaterial = materials_lbx.selected SelectedMaterialID = materials_lbx.selection SelectedMaterialType = materialType_rdo.state createDialog RenameMaterial_rollout width:225 height:83 ) ) on enableTexture_chk changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) else ( enableTexture_chk.checked = false ) ) on uwrap_chk changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) ) on vwrap_chk changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) ) on twoSided_chk changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) else ( twoSided_chk.checked = false ) ) on selfIllum_chk changed state do ( if materials_lbx.selection != 0 then ( --SetMaterial materials_lbx.selection num = materials_lbx.selection if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) if selfIllum_chk.checked == true then ( materials[num].selfIllumAmount = 100 ) else ( materials[num].selfIllumAmount = 0 ) ) else ( selfIllum_chk.checked = false ) ) on enableTrans_chk changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) else ( enableTrans_chk.checked = false ) ) on transType_rdo changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) else ( transType_rdo.state = 1 ) ) on enableReflection_chk changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) else ( enableReflection_chk.checked = false ) ) on reflection_spn changed state do ( if materials_lbx.selection != 0 then ( SetMaterial materials_lbx.selection ) else ( reflection_spn.value = 100 ) ) on chooseTexture_btn pressed do ( if materials_lbx.selection != 0 then ( num = materials_lbx.selection if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) baseTexture = getOpenFileName \ caption:"Select a Texture" \ filename:"*.jpg" \ types:"JPEG(*.jpg)|*.jpg|PNG File(*.png)|*.png|TGA File(*.tga)|*.tga|IFL File|*.ifl|All|*.*|" if baseTexture != undefined then ( materials[num].diffuseMap = Bitmaptexture fileName:baseTexture materials[num].diffuseMap.name = (getFilenameFile baseTexture) materials[num].name = (getFilenameFile baseTexture) showTextureMap materials[num] on GetMaterial num UpdateMaterials() ) ) ) on chooseTrans_btn pressed do ( if materials_lbx.selection != 0 then ( num = materials_lbx.selection if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) baseTexture = getOpenFileName \ caption:"Select a Transparency Mask" \ filename:"*.jpg" \ types:"JPEG(*.jpg)|*.jpg|PNG File(*.png)|*.png|TGA File(*.tga)|*.tga|IFL File|*.ifl|All|*.*|" if baseTexture != undefined then ( materials[num].opacitymap = Bitmaptexture fileName:baseTexture materials[num].opacitymap.name = (getFilenameFile baseTexture) materials[num].opacityMap.alphaSource = 0 materials[num].opacityMap.monoOutput = 1 GetMaterial num ) ) ) on matApply_btn pressed do ( if selection.count == 0 then messageBox "Apply Material requires a selection" else ( if materials_lbx.selection != 0 then ( num = materials_lbx.selection if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) $.material = materials[num] ) ) ) on showTextureOn_btn pressed do ( if materials_lbx.selection != 0 then ( num = materials_lbx.selection if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) showTextureMap materials[num] on ) ) on showTextureOff_btn pressed do ( if materials_lbx.selection != 0 then ( num = materials_lbx.selection if materialType_rdo.state == 1 then ( materials = meditMaterials ) else ( materials = sceneMaterials ) showTextureMap materials[num] off ) ) ) --------------------------------------------------------------------- -- DMP viewer --------------------------------------------------------------------- rollout DMP_rollout "View DMP File" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[0,0] width:640 activeXControl ie_ax "Shell.Explorer.2" width:620 height:425 align:#center pos:[10,27] checkbox showDmp_chk "Always show DMP file after export" pos:[10,460] function OpenDmpFile dmpLocation = ( ie_ax.Navigate ( dmpLocation + "dump.html" ) ) on DMP_rollout open do ( showDmp_chk.checked = ShowDMP OpenDmpFile( DmpPath ) ) on showDmp_chk changed state do ( ShowDMP = state setINISetting "$scripts\dts_prefs.ini" "Settings" "ShowDMP" (state as string) ) ) --------------------------------------------------------------------- -- User Guide --------------------------------------------------------------------- rollout Help_rollout "User Guide" ( imgTag uiBar "" bitmap:GrayBar_bmp pos:[0,0] width:640 activeXControl ie_ax "Shell.Explorer.2" width:620 height:425 align:#center pos:[10,27] on Help_rollout open do ( ie_ax.Navigate ( HelpPath ) ) ) --------------------------------------------------------------------- -- About... --------------------------------------------------------------------- rollout About_rollout "About this tool..." ( imgTag uiAbout "" bitmap:(openBitMap "$scripts\dts\dts_abouttop.bmp") \ pos:[0,0] transparent:(color 192 192 192) imgTag uiDIlogo "" bitmap:(openBitMap "$scripts\dts\dts_dilogo.bmp") \ pos:[3,38] transparent:(color 192 192 192) label version_lbl "Torque (DTS) Exporter Version 1.3" pos:[143, 55] label copyright_lbl "Copyright 2005 Dark Industries" pos:[143, 70] label moreinfo_lbl "For more info visit:" pos:[143, 95] hyperLink diWeb_hl "http://www.darkindustries.com" address:"http://www.darkindustries.com" \ pos:[143, 107] color:(color 0 0 255) hoverColor:(color 215 28 57) hyperLink ggWeb_hl "http://www.garagegames.com" address:"http://www.garagegames.com" \ pos:[143, 120] color:(color 0 0 255) hoverColor:(color 215 28 57) ) --------------------------------------------------------------------- -- Create the exporter UI --------------------------------------------------------------------- -- Load Main Exporter UI createdialog gDTSUtility_rollout lockWidth:true \ style:#(#style_sysmenu,#style_titlebar,#style_minimizebox,#style_resizing) -- Load SubRollout UIs if QuickExportOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog QuickExport_rollout rolledUp:false if BoundsOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Bounds_rollout rolledUp:false if DetailOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Detail_rollout rolledUp:true if BillboardOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Billboard_rollout rolledUp:true if NodeOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Node_rollout rolledUp:true if SequenceOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Sequence_rollout rolledUp:true if TriggerOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Trigger_rollout rolledUp:true if VisibilityOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Visibility_rollout rolledUp:true if CollisionOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Collision_rollout rolledUp:true if MaterialOpen == true then AddSubRollout gDTSUtility_rollout.DTSUtilityDialog Material_rollout rolledUp:true registerViewWindow gDTSUtility_rollout --------------------------------------------------------------------- -- End exporter UI ---------------------------------------------------------------------