952 lines
33 KiB
Plaintext
952 lines
33 KiB
Plaintext
-------------------------------------------------------------------------------
|
|
-- batch8.ms #for 3DSMax v.8
|
|
-- Version 2.4 Internal
|
|
-- Batch Exporter for .bip and .fbx with upper body detection for upper body animations used in cryEngine
|
|
-- By: Mathias Lindner
|
|
-- eMail: devsupport@crytek.com
|
|
-------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
--###############################################################################
|
|
--// creates the dialog to customize the scripts
|
|
--###############################################################################
|
|
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog = function createScriptDialog dialogTitle =
|
|
(
|
|
try
|
|
(
|
|
--// rollout with edit option for the script which will be execute before exporting or at the end of check
|
|
rollout batchProcessScriptCustomize dialogTitle
|
|
(
|
|
--// script container
|
|
--edittext edScript "" pos:[2,4] height:360 width:392
|
|
edittext edScript "" pos:[2,4] height:360 fieldWidth:392
|
|
--// applies the script to the current scene
|
|
button btnPreview "Preview" pos:[6,372] width:50 height:20 toolTip:"Executes the script on the current scene"
|
|
--// applies the script to the current scene
|
|
button btnClear "Clear" pos:[77,372] width:50 height:20 toolTip:"Clears the script in the edit box"
|
|
--// imports other scripts
|
|
button btnImport "Import" pos:[150,372] width:50 height:20 toolTip:"Opens a dialog to import .ms script files"
|
|
--// saves the script and destroys dialog
|
|
button btnCache "Cache" pos:[260,372] width:50 height:20 toolTip:"Stores the custom script in the memory"
|
|
--// saves the script and destroys dialog
|
|
button btnSaveAs "Save As" pos:[205,372] width:50 height:20 toolTip:"Saves the custom script in the edit box into a specific file"
|
|
--// destroys dialog without saving
|
|
button btnCancel "Cancel" pos:[345,372] width:50 height:20 toolTip:"Aborts the custom script generation"
|
|
|
|
|
|
|
|
on batchProcessScriptCustomize open do
|
|
(
|
|
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
|
|
(
|
|
"First Script Customization": local tempVarScript = cryTools.cryAnim.UI.batchProcess._v.firstScript
|
|
"Second Script Customization": local tempVarScript = cryTools.cryAnim.UI.batchProcess._v.secondScript
|
|
)
|
|
--// if there is a defined script already
|
|
if tempVarScript != "" then
|
|
--// set text of the script container to the already defined script
|
|
edScript.text = tempVarScript
|
|
)
|
|
|
|
|
|
|
|
on btnPreview pressed do
|
|
(
|
|
try
|
|
(
|
|
--// tries executing the script
|
|
tempString = execute( edScript.text )
|
|
--print tempString
|
|
)
|
|
catch
|
|
(
|
|
--// if an error occured, print the error message
|
|
format "*** % ***\n" (getCurrentException())
|
|
)
|
|
)
|
|
|
|
|
|
on btnClear pressed do
|
|
(
|
|
edScript.text = ""
|
|
)
|
|
|
|
|
|
on btnImport pressed do
|
|
(
|
|
ret = "\r\n"
|
|
local tempVar = getOpenFileName caption:"First Script Import" filename:(getDir #scripts + "\\*.ms") types:"Script Files (*.ms)|*.ms"
|
|
if tempVar != undefined then
|
|
(
|
|
cryTools.cryAnim.UI.batchProcess.customizeScript.edScript.text += ret + ret + ret +" -- Imported from " + tempVar + ret + ret
|
|
|
|
local tempStream = openFile tempVar mode:"r"
|
|
while (eof tempStream) != true do
|
|
cryTools.cryAnim.UI.batchProcess.customizeScript.edScript.text += readLine tempStream + ret
|
|
|
|
close tempStream
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
on btnCache pressed do
|
|
(
|
|
local tempVar = ""
|
|
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
|
|
(
|
|
"First Script Customization": ( cryTools.cryAnim.UI.batchProcess._v.firstScript = edScript.text ; tempVar = "First" )
|
|
"Second Script Customization": ( cryTools.cryAnim.UI.batchProcess._v.secondScript = edScript.text ; tempVar = "Second" )
|
|
)
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:tempVar
|
|
|
|
--// destroys the dialog
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.customizeScript
|
|
)
|
|
|
|
|
|
on btnSaveAs pressed do
|
|
(
|
|
local tempString = ""
|
|
|
|
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
|
|
(
|
|
"First Script Customization": tempString = "First"
|
|
"Second Script Customization": tempString = "Second"
|
|
)
|
|
|
|
local tempVar = getSaveFileName caption:"First Script Import" filename:(cryTools.buildPathFull + "Tools\\maxscript\\cryAnim\\ui\\batch\\" + tempString + "Script\\*.ms") types:"Script Files (*.ms)|*.ms"
|
|
if tempVar != undefined then
|
|
(
|
|
local tempStream = openFile tempVar mode:"w"
|
|
format edScript.text to:tempStream
|
|
close tempStream
|
|
|
|
local tempFilter = filterString tempVar "\\"
|
|
local tempString = (filterString tempFilter[tempFilter.count] ".")[1]
|
|
|
|
case cryTools.cryAnim.UI.batchProcess.customizeScript.title of
|
|
(
|
|
"First Script Customization": tempVar = "First|" + tempString
|
|
"Second Script Customization": tempVar = "Second|" + tempString
|
|
)
|
|
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:tempVar
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.customizeScript
|
|
)
|
|
|
|
)
|
|
|
|
|
|
on btnCancel pressed do
|
|
(
|
|
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:"None"
|
|
--// destroys the dialog
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.customizeScript
|
|
)
|
|
)
|
|
--// creates the dialog
|
|
cryTools.cryAnim.UI.batchProcess.customizeScript = batchProcessScriptCustomize
|
|
batchProcessScriptCustomize = undefined
|
|
|
|
createDialog cryTools.cryAnim.UI.batchProcess.customizeScript 400 400
|
|
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.createScriptDialog" )
|
|
)
|
|
createScriptDialog = undefined
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.createScriptDialog function"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--###############################################################################
|
|
--// creates the batchProcess dialog
|
|
--###############################################################################
|
|
cryTools.cryAnim.UI.batchProcess._f.callDialog = function callDialog =
|
|
(
|
|
try
|
|
(
|
|
--// if batchProcess is already opened, close the rollout floater
|
|
try ( closeRolloutFloater cryTools.cryAnim.UI.batchProcess.dialog ) catch()
|
|
--// create new batchProcess rollout floater
|
|
cryTools.cryAnim.UI.batchProcess.dialog = newRolloutFloater "CryAnim Batch Process v2.7" 600 422
|
|
|
|
--// rollout with file and folder list
|
|
rollout fileStatusRO "File Status" height:200
|
|
(
|
|
--// files list
|
|
activeXControl lbFiles "MSComctlLib.ListViewCtrl" pos:[140,8] height:185 width:440
|
|
--// sub folders list
|
|
activeXControl lbSubFolders "MSComctlLib.TreeCtrl" pos:[8,8] height:185 width:120
|
|
|
|
|
|
|
|
on fileStatusRO open do
|
|
(
|
|
try
|
|
(
|
|
--// initialise
|
|
lbFiles.GridLines = true
|
|
lbFiles.MousePointer = #ccArrow
|
|
lbFiles.AllowColumnReorder = true
|
|
lbFiles.view = #lvwReport
|
|
lbFiles.LabelEdit = #lvwManual
|
|
lbFiles.LabelWrap = true
|
|
lbFiles.MultiSelect = true
|
|
lbFiles.FullRowSelect = true
|
|
|
|
|
|
lbSubFolders.LineStyle = #tvwTreeLines
|
|
lbSubFolders.Style = #tvwTreelinesPlusMinusText
|
|
lbSubFolders.sorted = true
|
|
lbSubFolders.checkboxes = true
|
|
lbSubFolders.Indentation = 50
|
|
|
|
|
|
--// adds columns
|
|
lbFiles.columnHeaders.Add text:"Filename"
|
|
lbFiles.columnHeaders.Add text:"Bone"
|
|
lbFiles.columnHeaders.Add text:"Export"
|
|
lbFiles.columnHeaders.Add text:"Ext"
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.open" )
|
|
)
|
|
|
|
|
|
|
|
on lbFiles Click do
|
|
(
|
|
try
|
|
(
|
|
--// gets the cursor position of the active rollout part
|
|
screenPos = getCursorPos lbFiles
|
|
--// applies a hit test of the current mouse position
|
|
tempItem = lbFiles.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
|
|
|
|
--// if nothing is selected
|
|
if tempItem == undefined then
|
|
(
|
|
--// go through the files list and deselect every entry
|
|
for i = 1 to lbFiles.ListItems.count do
|
|
lbFiles.ListItems[i].selected = false
|
|
)
|
|
--// if an item is selected
|
|
else
|
|
(
|
|
--// if a folder is selected, deselect it
|
|
if tempItem.ListSubItems[3].text == "folder" then
|
|
tempItem.selected = false
|
|
|
|
)
|
|
--// update the files counter
|
|
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbFiles.click" )
|
|
)
|
|
|
|
|
|
|
|
on lbSubFolders NodeCheck checkedNode do
|
|
(
|
|
try
|
|
(
|
|
if cryTools.cryAnim._v.various[120] != true then
|
|
(
|
|
--// if a state changes in the sub folders list, update the whole dialog
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection #set
|
|
)
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbSubFolders.nodeCheck" )
|
|
)
|
|
|
|
|
|
|
|
on lbFiles DblClick do
|
|
(
|
|
try
|
|
(
|
|
--// gets the cursor position of the active rollout part
|
|
screenPos = getCursorPos lbFiles
|
|
--// applies a hit test of the current mouse position
|
|
tempItem = lbFiles.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
|
|
|
|
--// if an item is selected
|
|
if tempItem != undefined then
|
|
(
|
|
--// if a folder is selected
|
|
if tempItem.ListSubItems[3].text == "folder" then
|
|
(
|
|
--// deselect the folder
|
|
tempItem.selected = false
|
|
|
|
--// go through the files list and select every on-coming entry (without folders) until another folder is reached
|
|
for i = (tempItem.index + 1) to lbFiles.ListItems.count do
|
|
(
|
|
if lbFiles.ListItems[i].ListSubItems[3].text != "folder" then
|
|
lbFiles.ListItems[i].selected = true
|
|
else
|
|
exit
|
|
)
|
|
)
|
|
--// if no folder is selected
|
|
else
|
|
(
|
|
--// go through the list and select every entry without folders
|
|
for i = 1 to lbFiles.ListItems.count do
|
|
if lbFiles.ListItems[i].ListSubItems[3].text != "folder" then
|
|
lbFiles.ListItems[i].selected = true
|
|
)
|
|
)
|
|
--// update the files counter
|
|
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbFiles.dblClick" )
|
|
)
|
|
|
|
)
|
|
logOutput "> Created fileStatusRO rollout"
|
|
|
|
|
|
|
|
|
|
--// rollout with paths, file mask and pre export script
|
|
rollout inputOutputRO "Input / Output" height:50
|
|
(
|
|
--// source folder
|
|
button btnSourceFolder "Source" pos:[8,5] width:60 height:20 toolTip:"Opens a dialog to choose the source folder"
|
|
label labSourceFolder "No Folder selected" pos:[80,7] width:300
|
|
--// output folder
|
|
button btnExportFolder "Export" pos:[8,27] width:60 height:20 toolTip:"Opens a dialog to choose the export folder"
|
|
label labExportFolder "No Folder selected" pos:[80,29] width:300
|
|
|
|
--// file mask
|
|
label labFileMask "File Mask" pos:[16,52]
|
|
edittext etFileMask "" text:"" pos:[75,50] fieldWidth:300
|
|
|
|
groupbox gbScripts " Process Templates " pos:[400,5] width:180 height:62
|
|
|
|
label labFirstOp "1." pos:[408,24]
|
|
dropdownlist ddFirstOp "" pos:[425,21] width:150
|
|
|
|
label labSecondOp "2." pos:[408,46]
|
|
dropdownlist ddSecondOp "" pos:[425,42] width:150
|
|
|
|
|
|
|
|
|
|
|
|
|
|
on inputOutputRO open do
|
|
(
|
|
try
|
|
(
|
|
--// if a source path is already set
|
|
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
|
|
--// set text to the old source path
|
|
labSourceFolder.text = cryTools.cryAnim.UI.batchProcess._v.sourcePath
|
|
|
|
--// if the ini setting for the file extension is found
|
|
if (local tempText = cryTools.cryAnim.base.iniFile #get #batchProcessExt) != "" then
|
|
--// set file mask to the ini setting
|
|
etFileMask.text = tempText
|
|
|
|
--// if the ini setting for the source path is found
|
|
if (tempText = cryTools.cryAnim.base.iniFile #get #batchProcessSourcePath) != "" then
|
|
(
|
|
--// set source string to the ini setting
|
|
labSourceFolder.text = tempText
|
|
cryTools.cryAnim.UI.batchProcess._v.sourcePath = tempText
|
|
)
|
|
else
|
|
--// otherwise to the default string
|
|
labSourceFolder.text = "No Source Folder selected"
|
|
|
|
--// if the ini setting for the export path is found
|
|
if (tempText = cryTools.cryAnim.base.iniFile #get #batchProcessExportPath) != "" then
|
|
(
|
|
--// set export string to the ini setting
|
|
labexportFolder.text = tempText
|
|
cryTools.cryAnim.UI.batchProcess._v.exportPath = tempText
|
|
)
|
|
else
|
|
--// otherwise to the default string
|
|
labexportFolder.text = "No Export Folder selected"
|
|
|
|
--// updates the first and second scripts from the folders
|
|
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists()
|
|
|
|
|
|
--// fills the sub folders list
|
|
cryTools.cryAnim.UI.batchProcess._f.updateSubFolders()
|
|
cryTools.cryAnim.UI.batchProcess._f.updateSubFolderSelection #get
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.open" )
|
|
)
|
|
|
|
|
|
|
|
on btnSourceFolder pressed do
|
|
(
|
|
try
|
|
(
|
|
local tempPath = ""
|
|
--// if a source path is defined
|
|
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
|
|
--// set temporary path to the source path
|
|
tempPath = cryTools.cryAnim.UI.batchProcess._v.sourcePath
|
|
else
|
|
--// otherwise get new directory from an input dialog
|
|
tempPath = (cryTools.cryAnim.base.perforce cryTools.cryAnim.UI.main._v.bipSavePath #getDirectory)
|
|
|
|
--// temporary string gets open directory input for source path
|
|
tempString = (getSavePath caption:"Select Source Folder" initialDir:tempPath)
|
|
|
|
--// if a folder is selected by the open directory
|
|
if tempString != undefined then
|
|
(
|
|
--// source path is the new folder with "\"
|
|
cryTools.cryAnim.UI.batchProcess._v.sourcePath = tempString + (if (filterString tempString "\\").count > 1 then "\\" else "")
|
|
--// updates the export path with the converted path to the project directory
|
|
cryTools.cryAnim.UI.batchProcess._v.exportPath = (cryTools.cryAnim.base.perforce (cryTools.cryAnim.UI.main._f.checkExport #ProductionToGame cryTools.cryAnim.UI.batchProcess._v.sourcePath) #getDirectory)
|
|
|
|
--// update export folder text
|
|
labExportFolder.text = cryTools.cryAnim.UI.batchProcess._v.exportPath
|
|
--// update source folder text
|
|
labSourceFolder.text = cryTools.cryAnim.UI.batchProcess._v.sourcePath
|
|
|
|
--// set ini setting for the source path
|
|
cryTools.cryAnim.base.iniFile #set #batchProcessSourcePath value:labSourceFolder.text
|
|
cryTools.cryAnim.base.iniFile #set #batchProcessExportPath value:labExportFolder.text
|
|
|
|
if (findString labSourceFolder.text "\\") != undefined then
|
|
(
|
|
--// clears and fills sub folders
|
|
cryTools.cryAnim.UI.batchProcess._f.updateSubFolders()
|
|
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbSubFolders.Nodes.item 0).checked = true
|
|
--// clears and fills the file list
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
)
|
|
)
|
|
--// if no folder is selected
|
|
else
|
|
(
|
|
--// if no export path is set before
|
|
if cryTools.cryAnim.UI.batchProcess._v.sourcepath == undefined then
|
|
(
|
|
--// enable statistic button as it can be used without exporting
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].btnProcess.enabled = true
|
|
)
|
|
)
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnSourceFolder.pressed" )
|
|
)
|
|
|
|
|
|
on btnExportFolder pressed do
|
|
(
|
|
try
|
|
(
|
|
--// temporary string gets open directory input for export path
|
|
tempString = (getSavePath caption:"Select Export Folder" initialDir:cryTools.cryAnim.UI.batchProcess._v.exportPath)
|
|
--// if a folder is selected by the open directory
|
|
if tempString != undefined then
|
|
(
|
|
--// set export path to the new folder path
|
|
cryTools.cryAnim.UI.batchProcess._v.exportPath = tempString + "\\"
|
|
--// update exportFolder text
|
|
labExportFolder.text = tempString + "\\"
|
|
|
|
--// set ini setting for the export path
|
|
cryTools.cryAnim.base.iniFile #set #batchProcessExportPath value:labExportFolder.text
|
|
)
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnExportFolder.pressed" )
|
|
)
|
|
|
|
|
|
on ddFirstOp selected value do
|
|
(
|
|
try
|
|
(
|
|
if ddFirstOp.selection == ddFirstOp.items.count then
|
|
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog "First Script Customization"
|
|
else
|
|
cryTools.cryAnim._v.various[33] = ddFirstOp.items[ddFirstOp.selection]
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddFirstOp.selected" )
|
|
)
|
|
|
|
|
|
on ddSecondOp selected value do
|
|
(
|
|
try
|
|
(
|
|
if ddSecondOp.selection == ddSecondOp.items.count then
|
|
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog "Second Script Customization"
|
|
else
|
|
cryTools.cryAnim._v.various[34] = ddSecondOp.items[ddSecondOp.selection]
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddSecondOp.selected" )
|
|
)
|
|
|
|
|
|
|
|
|
|
on etFileMask entered value do
|
|
(
|
|
try
|
|
(
|
|
--// set ini setting with changed file mask
|
|
cryTools.cryAnim.base.iniFile #set #batchProcessExt value:etFileMask.text
|
|
--// update whole dialog with new changes
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.etFileMask.entered" )
|
|
)
|
|
)
|
|
logOutput "> Created inputOutputRO rollout"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--// rollout with all config options and check or export button
|
|
rollout checkExportRO "Check / Export" height:60
|
|
(
|
|
--// files / folders groub
|
|
label labFilesFolders "Files / Folders :" pos:[10,11]
|
|
groupBox gbFilesFolders "" pos:[100,-1] height:32 width:230
|
|
|
|
--// keep the sub folder structure when exporting
|
|
label labKeepSubFolders "Keep Sub Folders" pos:[210,11]
|
|
checkBox chkKeepSubFolders "" pos:[300,11] checked:true
|
|
|
|
--// counter for selected and maximumm files
|
|
label labCount "Count :" pos:[130,11]
|
|
|
|
--// bone detection for exporting specific body parts for specific file string parts
|
|
label labBoneDetection "Bone Detection :" pos:[10,42]
|
|
groupBox gbBoneDetection "" pos:[100,30] height:32 width:230
|
|
|
|
--// config bone detection, manage sets of bone detections
|
|
button btnConfig "Config" pos:[110,41] height:17 width:70 toolTip:"Opens a dialog to configure filename/bone detection"
|
|
--// activate automatic file detection
|
|
label labDetect "Detect" pos:[195,43]
|
|
checkBox chkDetect "" pos:[235,42] checked:true
|
|
--// only files which are detected will be shown
|
|
label labOnlyBoneDetection " + " pos:[255,43]
|
|
checkBox chkOnlyBoneDetection "" pos:[270,42]
|
|
--// only files which are not detected will be shown
|
|
label labNoBoneDetection " - " pos:[290,43]
|
|
checkBox chkNoBoneDetection "" pos:[300,42]
|
|
|
|
--// executes the whole export process with pre export script, but without real exporting
|
|
button btnProcess "P R O C E S S" pos:[345,8] height:50 width:230 enabled:false toolTip:"Processes the files/selection in the list (executes scripts)"
|
|
|
|
|
|
|
|
|
|
on checkExportRO open do
|
|
(
|
|
try
|
|
(
|
|
--// clears the file list
|
|
cryTools.cryAnim.UI.batchProcess._v.exportFiles = #()
|
|
|
|
try
|
|
(
|
|
local tempSubFilter = cryTools.cryAnim.base.iniFile #get #batchProcessSubFolderSelection
|
|
tempSubFilter = filterString tempSubFilter "#"
|
|
|
|
if tempSubFilter.count == 0 then
|
|
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbSubFolders.Nodes.item 0).checked = true
|
|
|
|
) catch()
|
|
|
|
try cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkKeepSubFolders.checked = cryTools.cryAnim.base.iniFile #get #batchProcessSubFolders catch()
|
|
|
|
--// if a source path is internal defined
|
|
if cryTools.cryAnim.UI.batchProcess._v.sourcePath != undefined then
|
|
(
|
|
--// enable check and export button
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].btnProcess.enabled = true
|
|
)
|
|
|
|
--// get bone detection set up
|
|
local tempBoneArray = cryTools.cryAnim.base.iniFile #get #bones
|
|
--// if a bone setup is found
|
|
if tempBoneArray != undefined then
|
|
(
|
|
tempListArray = #()
|
|
--// goes through the bone list
|
|
for i = 1 to tempBoneArray.count do
|
|
--// if an entry is found
|
|
if tempBoneArray[i].name != "" then
|
|
--// add the entry to the list
|
|
append tempListArray tempBoneArray[i]
|
|
|
|
--// set new bone list
|
|
cryTools.cryAnim.UI.batchProcess._v.boneList = tempBoneArray
|
|
)
|
|
|
|
--// update whole dialog
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.open" )
|
|
)
|
|
|
|
|
|
|
|
|
|
on chkKeepSubFolders changed value do
|
|
(
|
|
try
|
|
cryTools.cryAnim.base.iniFile #set #batchProcessSubFolders value:value
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.chkKeepSubFolder.changed" )
|
|
)
|
|
|
|
|
|
on btnProcess pressed do
|
|
(
|
|
try
|
|
--// process all used files without export
|
|
cryTools.cryAnim.UI.batchProcess._f.processFiles #statistic
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.btnProcess.pressed" )
|
|
)
|
|
|
|
|
|
on chkOnlyBoneDetection changed value do
|
|
(
|
|
try
|
|
(
|
|
--// if only bone detection is activated
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked == true then
|
|
--// no bone detection is deactivated
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked = false
|
|
|
|
--// updates whole dialog
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = false
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.chkOnlyBoneDetection.changed" )
|
|
)
|
|
|
|
|
|
on chkNoBoneDetection changed value do
|
|
(
|
|
try
|
|
(
|
|
--// if no bone detection is activated
|
|
if cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkNoBoneDetection.checked == true then
|
|
--// only bone detections is deactivated
|
|
cryTools.cryAnim.UI.batchProcess.dialog.rollouts[3].chkOnlyBoneDetection.checked = false
|
|
|
|
--// updates whole dialog
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = true
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
cryTools.cryAnim.UI.batchProcess._v.flags[1] = false
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.chkNoBoneDetection.changed" )
|
|
)
|
|
|
|
on btnConfig pressed do
|
|
(
|
|
try
|
|
(
|
|
--// rollout to edit the bone list entry
|
|
rollout entryDetailsRO "Entry Details"
|
|
(
|
|
label labName "Name :" pos:[8,10]
|
|
label labExternal "External :" pos:[8,30]
|
|
label labBones "Bones :" pos:[8,50]
|
|
|
|
--// sets the name, file detection and bones column
|
|
edittext edName "" text:(cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem.SubItems.item 0).text pos:[70,10] fieldWidth:300
|
|
edittext edExternal "" text:(cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem.SubItems.item 1).text pos:[70,30] fieldWidth:300
|
|
edittext edBones "" text:(cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem.SubItems.item 2).text pos:[70,50] fieldWidth:245
|
|
--// button to pick specific bones in the scene
|
|
button btnPickBones "Pick" pos:[323,50] height:17 width:50 toolTip:"Opens dialog to select the bone associated to the filename detection"
|
|
|
|
--// save the entry or cancel
|
|
button btnSave "Save" pos:[100,80] height:20 width:80 toolTip:"Saves filename/bone detection"
|
|
button btnCancel "Cancel" pos:[200,80] height:20 width:80 toolTip:"Aborts filename/bone detection"
|
|
|
|
|
|
on btnSave pressed do
|
|
(
|
|
--// get currently selected item
|
|
local tempItem = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList.FocusedItem
|
|
|
|
--// set new name
|
|
(tempItem.SubItems.item 0).text = edName.text
|
|
--// set new file detection
|
|
(tempItem.SubItems.item 1).text = edExternal.text
|
|
--// set new bone list
|
|
(tempItem.SubItems.item 2).text = edBones.text
|
|
|
|
local tempListArray = #()
|
|
|
|
cryTools.cryAnim.UI.batchProcess._f.updateExtent()
|
|
--// kills bone edit dialog
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.entryDetails
|
|
)
|
|
|
|
|
|
on btnCancel pressed do
|
|
(
|
|
--// kills bone edit dialog
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.entryDetails
|
|
)
|
|
|
|
on btnPickBones pressed do
|
|
(
|
|
local tempString = ""
|
|
--// pick node from the scene
|
|
objArray = selectByName title:("Select Nodes") showHidden:true
|
|
|
|
--// if a node is selected
|
|
if objArray != undefined then
|
|
(
|
|
--// goes through the nodes
|
|
for i = 1 to objArray.count do
|
|
--// adds the name of the node with a ";" as seperator
|
|
tempString += objArray[i].name + (if i != objArray.count then ";" else "")
|
|
|
|
--// set the new bone list
|
|
edBones.text = tempString
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
cryTools.cryAnim.UI.batchProcess.entryDetails = entryDetailsRO
|
|
entryDetailsRO = undefined
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--// rollout to edit the bone detection list
|
|
rollout editBoneListRO "Edit Bone List"
|
|
(
|
|
--// list of all bone setups
|
|
activeXControl lbList "MSComctlLib.ListViewCtrl" pos:[1,1] height:185 width:440
|
|
--// save current setup
|
|
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Saves selected filename/bone detection entry"
|
|
button btnDelete "Delete" pos:[150,195] height:20 width:60 toolTip:"Deletes selected entry"
|
|
button btnDeleteAll "Delete All" pos:[220,195] height:20 width:60 toolTip:"Clears whole list"
|
|
button btnCancel "Cancel" pos:[350,195] height:20 width:80 toolTip:"Abort filename/bone detection"
|
|
|
|
|
|
on editBoneListRO open do
|
|
(
|
|
lbList.GridLines = true
|
|
lbList.MousePointer = #ccArrow
|
|
lbList.AllowColumnReorder = true
|
|
lbList.view = #lvwReport
|
|
lbList.LabelEdit = #lvwManual
|
|
lbList.Sorted = true
|
|
lbList.FullRowSelect = true
|
|
lbList.Checkboxes = true
|
|
|
|
--// adds columns
|
|
lbList.columnHeaders.Add text:"Name"
|
|
lbList.columnHeaders.Add text:"External"
|
|
lbList.columnHeaders.Add text:"Bones"
|
|
|
|
--// goes through the bone list
|
|
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.boneList.count do
|
|
(
|
|
--// adds a new entry
|
|
local lbListEntry = lbList.listItems.Add text:cryTools.cryAnim.UI.batchProcess._v.boneList[i].name
|
|
|
|
--// if entry is active
|
|
if cryTools.cryAnim.UI.batchProcess._v.boneList[i].active == "true" then
|
|
--// set list entry active
|
|
lbListEntry.checked = true
|
|
--// if entry is not active
|
|
if cryTools.cryAnim.UI.batchProcess._v.boneList[i].active == "false" then
|
|
--// set list entry not active
|
|
lbListEntry.checked = false
|
|
|
|
--// add external entry
|
|
lbListEntry.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.boneList[i].external
|
|
--// add bone entry
|
|
lbListEntry.listSubItems.Add text:cryTools.cryAnim.UI.batchProcess._v.boneList[i].bones
|
|
)
|
|
)
|
|
|
|
|
|
on lbList DblClick do
|
|
(
|
|
--// gets the bone list position
|
|
screenPos = getCursorPos lbList
|
|
--// hit test the cursor position
|
|
tempItem = lbList.hittest ((screenPos.x-2)*15) ((screenPos.y-2)*15)
|
|
|
|
--// if an item is selected
|
|
if tempItem != undefined then
|
|
(
|
|
--// creates bone entry edit
|
|
createDialog cryTools.cryAnim.UI.batchProcess.entryDetails 385 110
|
|
|
|
)
|
|
--// if no item is selected
|
|
else
|
|
(
|
|
--// empty boneStruct
|
|
tempStringArray = (boneStruct name:"" external:"" bones:"")
|
|
tempArray = #()
|
|
|
|
--// get nodes to be added
|
|
objArray = selectByName title:("Select Nodes to be added") showHidden:true
|
|
|
|
--// if a node is selected
|
|
if objArray != undefined then
|
|
(
|
|
--// goes through node list
|
|
for obj in objArray do
|
|
--// add the nodes via boneStruct to a seperate list
|
|
append tempArray (boneStruct name:obj.name external:obj.name bones:obj.name)
|
|
|
|
--// goes through the node list
|
|
for i = 1 to tempArray.count do
|
|
(
|
|
--// adds name(s) of the node(s)
|
|
tempStringArray.name += tempArray[i].name + (if i != tempArray.count then ";" else "")
|
|
--// adds file detection(s)
|
|
tempStringArray.external += tempArray[i].external + (if i != tempArray.count then ";" else "")
|
|
--// adds bone(s) list
|
|
tempStringArray.bones += tempArray[i].bones + (if i != tempArray.count then ";" else "")
|
|
)
|
|
|
|
--// adds entry to the bone list
|
|
local lbListEntry = lbList.ListItems.Add text:tempStringArray.name
|
|
lbListEntry.checked = true
|
|
lbListEntry.ListSubItems.Add text:tempStringArray.external
|
|
lbListEntry.ListSubItems.Add text:tempStringArray.bones
|
|
)
|
|
)
|
|
)
|
|
|
|
on btnSave pressed do
|
|
(
|
|
local tempArray = #()
|
|
local tempList = #()
|
|
|
|
--// goes through the bone list
|
|
for i = 1 to lbList.ListItems.count do
|
|
(
|
|
local tempItemArray = #()
|
|
local tempItem = lbList.ListItems[i]
|
|
|
|
--// save checked state
|
|
tempItemArray[1] = tempItem.checked as String
|
|
--// if nothing is typed in, the entry will have " " to filter correctly
|
|
if tempItem.text != "" then tempItemArray[2] = tempItem.text else tempItemArray[2] = " "
|
|
if tempItem.ListSubItems[1].text != "" then tempItemArray[3] = tempItem.ListSubItems[1].text else tempItemArray[3] = " "
|
|
if tempItem.ListSubItems[2].text != "" then tempItemArray[4] = tempItem.ListSubItems[2].text else tempItemArray[4] = " "
|
|
|
|
--// adds the entries to a seperate list
|
|
append tempArray (boneStruct active:tempItemArray[1] name:tempItemArray[2] external:tempItemArray[3] bones:tempItemArray[4])
|
|
)
|
|
|
|
--// sets ini setting
|
|
cryTools.cryAnim.base.iniFile #set #bones value:tempArray
|
|
--// sets new bone list
|
|
cryTools.cryAnim.UI.batchProcess._v.boneList = tempArray
|
|
|
|
--// updates whole dialog
|
|
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
|
|
|
|
--// kills bone list edit dialog
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.editBoneList
|
|
|
|
|
|
)
|
|
|
|
on btnDelete pressed do
|
|
(
|
|
--// goes through the bone list
|
|
for i = 1 to lbList.ListItems.count do
|
|
(
|
|
--// tries to delete the selected entry
|
|
try
|
|
(
|
|
if lbList.ListItems[i].selected == true then
|
|
lbList.ListItems.Remove i
|
|
)
|
|
catch()
|
|
)
|
|
)
|
|
|
|
on btnDeleteAll pressed do
|
|
(
|
|
--// clears whole list
|
|
lbList.ListItems.clear()
|
|
)
|
|
|
|
|
|
on btnCancel pressed do
|
|
(
|
|
--// kills bone list edit dialog
|
|
destroyDialog cryTools.cryAnim.UI.batchProcess.editBoneList
|
|
)
|
|
)
|
|
cryTools.cryAnim.UI.batchProcess.editBoneList = editBoneListRO
|
|
editBoneListRO = undefined
|
|
|
|
--// creates bone list edit dialog
|
|
createDialog cryTools.cryAnim.UI.batchProcess.editBoneList 443 220
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.checkExportRO.btnConfig.pressed" )
|
|
)
|
|
)
|
|
logOutput "> Created checkExportRO rollout"
|
|
|
|
|
|
--// adds all rollouts to the UI
|
|
addRollout fileStatusRO cryTools.cryAnim.UI.batchProcess.dialog
|
|
addRollout inputOutputRO cryTools.cryAnim.UI.batchProcess.dialog
|
|
addRollout checkExportRO cryTools.cryAnim.UI.batchProcess.dialog
|
|
|
|
fileStatusRO = undefined
|
|
inputOutputRO = undefined
|
|
checkExportRO = undefined
|
|
|
|
)
|
|
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess._f.callDialog" )
|
|
)
|
|
callDialog = undefined
|
|
logOutput "> Created cryTools.cryAnim.UI.batchProcess._f.callDialog function"
|
|
|
|
|
|
|
|
logOutput ">> batch8.ms loaded"
|