You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Tools/maxscript/cryAnim/ui/batch/batch9.ms

1303 lines
44 KiB
Plaintext

-------------------------------------------------------------------------------
-- batch9.ms #for 3DSMax v.9+
-- Version 2.4 Internal
-- Batch Process 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 scriptIndex =
(
try
(
cryTools.cryAnim.UI.batchProcess._v.customScriptSelected = scriptIndex
--// rollout with edit option for the script which will be execute before exporting or at the end of check
rollout batchProcessScriptCustomize "Script Customization"
(
dotNetControl tabControl "System.Windows.Forms.TabControl" pos:[2,4] height:20
--// script container
dotNetControl edScript "System.Windows.Forms.TextBox" pos:[2,24] height:340 width: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
(
tabControl.TabPages.Add "Script 1 "
tabControl.TabPages.Add "Script 2 "
tabControl.TabPages.Add "Script 3 "
tabControl.TabPages.Add "Script 4 "
edScript.Multiline = true
edScript.ScrollBars = edScript.Scrollbars.Both
edScript.WordWrap = false
edScript.AcceptsReturn = true
edScript.AcceptsTab = true
for i = 1 to 4 do
(
if classOf cryTools.cryAnim.UI.batchProcess._v.customScripts[i] == String then
cryTools.cryAnim.UI.batchProcess._v.customScriptsSave[i] = cryTools.cryAnim.UI.batchProcess._v.customScripts[i]
else
cryTools.cryAnim.UI.batchProcess._v.customScriptsSave[i] = ""
)
--local scriptListIndex = filterString dialogTitle " "
--try scriptListIndex = scriptListIndex[scriptListIndex.count] as Integer catch()
tabControl.SelectedIndex = cryTools.cryAnim.UI.batchProcess._v.customScriptSelected - 1
edScript.text = cryTools.cryAnim.UI.batchProcess._v.customScriptsSave[cryTools.cryAnim.UI.batchProcess._v.customScriptSelected]
--// if there is a defined script already
--if tempVarScript != "" and tempVarScript != undefined then
--// set text of the script container to the already defined script
--edScript.text = tempVarScript
)
on tabControl selected value do
(
edScript.text = cryTools.cryAnim.UI.batchProcess._v.customScriptsSave[tabControl.SelectedIndex + 1]
)
on edScript TextChanged value do
(
cryTools.cryAnim.UI.batchProcess._v.customScriptsSave[tabControl.SelectedIndex + 1] = edScript.text
)
on btnPreview pressed do
(
try
(
--// tries executing the script
execute( edScript.text )
)
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 scriptListIndex = filterString cryTools.cryAnim.UI.batchProcess.customizeScript.title " "
--try scriptListIndex = scriptListIndex[scriptListIndex.count] as Integer catch()
for i = 1 to 4 do
cryTools.cryAnim.UI.batchProcess._v.customScripts[i] = cryTools.cryAnim.UI.batchProcess._v.customScriptsSave[i]
--cryTools.cryAnim.UI.batchProcess._v.customScripts[scriptListIndex] = edScript.text
cryTools.cryAnim.UI.batchProcess._f.updateScriptLists scriptUpdate:(cryTools.cryAnim.UI.batchProcess._v.customScriptSelected as String)
--// 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 "Batch Process" 600 469
--// rollout with file and folder list
rollout fileStatusRO "File Status" height:200
(
--// files list
dotNetControl lbFiles "System.Windows.Forms.ListView" pos:[140,8] height:185 width:440
--// sub folders list
dotNetControl lbSubFolders "System.Windows.Forms.TreeView" pos:[8,8] height:185 width:130
on fileStatusRO open do
(
try
(
--// initialise
lbFiles.GridLines = true
lbFiles.AllowColumnReorder = true
lbFiles.View = lbFiles.View.Details
lbFiles.LabelEdit = false
lbFiles.LabelWrap = true
lbFiles.MultiSelect = true
lbFiles.FullRowSelect = true
lbFiles.HideSelection = false
--// subFolders setu
lbSubFolders.Sorted = true
lbSubFolders.Checkboxes = true
lbSubFolders.Indent = 20
lbSubFolders.ShowPlusMinus = true
lbSubFolders.ShowRootLines = true
lbSubFolders.HideSelection = false
--// adds columns
lbFiles.Columns.Add "Filename"
lbFiles.Columns.Add "Bone"
lbFiles.Columns.Add "Process"
lbFiles.Columns.Add "Ext"
lbFiles.Columns.Add ".anm"
cryTools.cryAnim.UI.batchProcess._v.selectedFile = undefined
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.open" )
)
on fileStatusRO moved value do
(
try
setDialogPos cryTools.cryAnim.UI.batchProcess.subRangeDialog (cryTools.cryAnim.UI.batchProcess.dialog.pos - [205,-23])
catch()
)
on fileStatusRO close do
(
try ( destroyDialog cryTools.cryAnim.UI.batchProcess.subRangeDialog ) catch()
)
on lbFiles Click do
(
try
(
local tempItem = lbFiles.FocusedItem
if (tempItem.SubItems.item 3).text == "folder" then
tempItem.selected = false
cryTools.cryAnim.UI.batchProcess._v.selectedFile = tempItem.index + 1
--// update the files counter
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbFiles.click" )
)
on lbFiles DoubleClick do
(
try
(
local tempItem = lbFiles.FocusedItem
--// if an item is selected
if tempItem != undefined then
(
if (tempItem.SubItems.item 3).text != "scene" then
(
--// if a folder is selected
if (tempItem.SubItems.item 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.Items.count - 1) do
(
try
(
if ((lbFiles.Items.item i).SubItems.item 3).text != "folder" and ((lbFiles.Items.item i).SubItems.item 3).text != "scene" then
(lbFiles.Items.item i).selected = true
else
exit
)
catch()
)
)
--// if no folder is selected
else
(
--// go through the list and select every entry without folders
for i = 0 to (lbFiles.Items.count - 1) do
if ((lbFiles.Items.item i).SubItems.item 3).text != "folder" and ((lbFiles.Items.item i).SubItems.item 3).text != "scene" then
(lbFiles.Items.item i).selected = true
)
)
cryTools.cryAnim.UI.batchProcess._v.selectedFile = tempItem.index + 1
)
--// update the files counter
cryTools.cryAnim.UI.batchProcess._f.updateCounter()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.fileStatusRO.lbFiles.doubleClick" )
)
on lbSubFolders AfterCheck arg do
(
try
(
if arg.Node.Checked == true then
arg.Node.ForeColor = arg.Node.ForeColor.FromArgb 200 0 0
else
arg.Node.ForeColor = arg.Node.ForeColor.FromArgb 0 0 0
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.afterCheck" )
)
)
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:113
label labOp1 "1." pos:[408,28]
dropdownlist ddOp1 "" pos:[425,24] width:150 height:20
label labOp2 "2." pos:[408,50]
dropdownlist ddOp2 "" pos:[425,46] width:150 height:20
label labOp3 "3." pos:[408,72]
dropdownlist ddOp3 "" pos:[425,68] width:150 height:20
label labOp4 "4." pos:[408,94]
dropdownlist ddOp4 "" pos:[425,90] width:150 height:20
groupbox gbANMDialog " File Settings " pos:[12,78] width:368 height:40
label labFileSettings "ANM Files: " pos:[90,97]
button btnLoadFile "Load" pos:[20,93] width:50 height:20
button btnImportANM "Import" pos:[150,93] width:50 height:20
checkbutton btnDialogANM "Dialog" pos:[210,93] width:50 height:20
button btnDeleteANM "Delete" pos:[270,93] width:50 height:20
button btnDeleteAllANM "Delete All" pos:[325,93] width:50 height:20
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 ddOp1 selected value do
(
try
(
if ddOp1.selection == ddOp1.items.count then
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog 1
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddOp1.selected" )
)
on ddOp2 selected value do
(
try
(
if ddOp2.selection == ddOp2.items.count then
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog 2
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddOp2.selected" )
)
on ddOp3 selected value do
(
try
(
if ddOp3.selection == ddOp3.items.count then
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog 3
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddOp3.selected" )
)
on ddOp4 selected value do
(
try
(
if ddOp4.selection == ddOp4.items.count then
cryTools.cryAnim.UI.batchProcess._f.createScriptDialog 4
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.ddOp4.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" )
)
on btnLoadFile pressed do
(
try
(
local index = cryTools.cryAnim.UI.batchProcess._v.selectedFile
if index != undefined then
(
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[index].used == true then
(
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[index].extension != "scene" then
(
cryTools.cryAnim.UI.batchProcess._v.fileQue = cryTools.cryAnim.UI.batchProcess._v.exportFiles[index].path
local tempString = cryTools.cryAnim.UI.batchProcess._f.loadBatchFile cryTools.cryAnim.UI.batchProcess._v.exportFiles[index].path
if tempString == true then
tempString = "Load"
cryTools.cryAnim.UI.batchProcess._v.exportFiles[index].process = tempString as String
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
(
if i != index then
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process == "Load" then
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].process = ""
)
cryTools.cryAnim.UI.batchProcess._v.selectedFile = 1
for i = 0 to (cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbFiles.items.count - 1) do
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbFiles.items.item i).selected = false
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbFiles.items.item 0).selected = true
(cryTools.cryAnim.UI.batchProcess.dialog.rollouts[1].lbFiles.items.item 0).focused = true
cryTools.cryAnim.UI.batchProcess._v.exportFiles[1].subRanges = #()
cryTools.cryAnim.UI.batchProcess._v.exportFiles[1].subRangePrefix = ""
if (cryTools.cryAnim.UI.batchProcess._f.subRangeLoadFromDummy import:true) == true then
(
cryTools.cryAnim.UI.batchProcess._v.exportFiles[1].anm = "Load"
try
(
if cryTools.cryAnim.UI.batchProcess.subRangeDialog.open == false then
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog()
)
catch
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog()
btnDialogANM.state = true
)
else
cryTools.cryAnim.UI.batchProcess._v.exportFiles[1].anm = ""
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
cryTools.cryAnim.UI.batchProcess._f.refreshFiles()
cryTools.cryAnim.UI.batchProcess._v.fileQue = undefined
)
)
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnLoadFile.pressed" )
)
on btnImportANM pressed do
(
try
(
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
(
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used == true and cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension != "folder" and (cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension == "max" or cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension == "scene") then
(
local rangeDummy = undefined
cryTools.cryAnim.UI.batchProcess._v.selectedFile = i
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].extension != "scene" then
(
if (rangeDummy = getNodeByName "subRangeDummy") != undefined then
rangeDummy.name = "#SAVE_" + rangeDummy.name
else
noDummyFound = true
mergeMaxFile cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].path #("subRangeDummy") #mergeDups
)
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].subRanges = #()
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].subRangePrefix = ""
if (cryTools.cryAnim.UI.batchProcess._f.subRangeLoadFromDummy import:true) == true then
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm = "Load"
else
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm = ""
if rangeDummy != undefined then
(
try (delete (getNodeByName "subRangeDummy") ) catch()
rangeDummy.name = subString rangeDummy.name 7 rangeDummy.name.count
)
if noDummyFound == true then
try (delete (getNodeByName "subRangeDummy") ) catch()
)
)
try
(
if cryTools.cryAnim.UI.batchProcess.subRangeDialog.open == false then
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog()
)
catch
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog()
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
cryTools.cryAnim.UI.batchProcess._f.refreshFiles()
btnDialogANM.state = true
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnImportANM.pressed" )
)
on btnDialogANM changed value do
(
try
(
try
(
if cryTools.cryAnim.UI.batchProcess.subRangeDialog.open == false then
(
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog()
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
btnDialogANM.state = true
)
else
(
destroyDialog cryTools.cryAnim.UI.batchProcess.subRangeDialog
btnDialogANM.state = false
)
)
catch
cryTools.cryAnim.UI.batchProcess._f.subRangeCallDialog()
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnDialogANM.pressed" )
)
on btnDeleteANM pressed do
(
try
(
local selectedFile = cryTools.cryAnim.UI.batchProcess._v.selectedFile
if (queryBox "Delete selected .anm entries ?" title:"CryAnim Batch Process") == true then
(
if selectedFile == undefined then
(
messageBox "Nothing selected." title:"CryAnim Batch Process"
return false
)
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
(
if cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].used == true then
(
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].subRanges = #()
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].subRangePrefix = ""
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm = ""
)
)
cryTools.cryAnim.UI.batchProcess._f.refreshFiles()
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnDeleteANM.pressed" )
)
on btnDeleteAllANM pressed do
(
try
(
local selectedFile = cryTools.cryAnim.UI.batchProcess._v.selectedFile
if (queryBox "Delete All .anm entries ?" title:"CryAnim Batch Process") == true then
(
for i = 1 to cryTools.cryAnim.UI.batchProcess._v.exportFiles.count do
(
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].subRanges = #()
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].subRangePrefix = ""
cryTools.cryAnim.UI.batchProcess._v.exportFiles[i].anm = ""
)
cryTools.cryAnim.UI.batchProcess._f.refreshFiles()
cryTools.cryAnim.UI.batchProcess._f.subRangeUpdateDialog()
)
)
catch ( logOutput "!!> Error in cryTools.cryAnim.UI.batchProcess.dialog.inputOutputRO.btnDeleteAllANM.pressed" )
)
)
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
dotNetControl lbList "System.Windows.Forms.ListView" pos:[1,1] height:185 width:440
--// save current setup
button btnSave "Save" pos:[8,195] height:20 width:80 toolTip:"Saves filename/bone detection"
button btnAdd "Add" pos:[120,195] height:20 width:60 toolTip:"Adds new entry"
button btnDelete "Delete" pos:[190,195] height:20 width:60 toolTip:"Deletes selected entry"
button btnDeleteAll "Delete All" pos:[260,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.AllowColumnReorder = true
lbList.View = lbList.View.Details
lbList.LabelEdit = false
lbList.LabelWrap = true
lbList.MultiSelect = true
lbList.FullRowSelect = true
lbList.HideSelection = false
lbList.CheckBoxes = true
--// adds columns
lbList.Columns.Add "Name"
lbList.Columns.Add "External"
lbList.Columns.Add "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.Items.Add cryTools.cryAnim.UI.batchProcess._v.boneList[i].name 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.SubItems.Add cryTools.cryAnim.UI.batchProcess._v.boneList[i].external
--// add bone entry
lbListEntry.SubItems.Add cryTools.cryAnim.UI.batchProcess._v.boneList[i].bones
)
cryTools.cryAnim.UI.batchProcess._f.updateExtent()
)
on lbList DoubleClick do
(
tempItem = lbList.FocusedItem
tempItem.checked = not tempItem.checked
--// 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
)
on btnAdd pressed do
(
local tempStringArray = (boneStruct name:"" external:"" bones:"")
local tempArray = #()
local lbList = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList
--// get nodes to be added
local 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.Items.Add tempStringArray.name
lbListEntry.checked = true
lbListEntry.SubItems.Add tempStringArray.external
lbListEntry.SubItems.Add tempStringArray.bones
)
)
on btnSave pressed do
(
local boneChanged = false
local tempArray = #()
local tempList = #()
local lbList = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList
--// goes through the bone list
for i = 0 to (lbList.Items.count - 1) do
(
local tempItemArray = #()
local tempItem = lbList.Items.item i
--// save checked state
tempItemArray[1] = tempItem.checked as String
--// if nothing is typed in, the entry will have " " to filter correctly
if (tempItem.SubItems.item 0).text != "" then tempItemArray[2] = (tempItem.SubItems.item 0).text else tempItemArray[2] = " "
if (tempItem.SubItems.item 1).text != "" then tempItemArray[3] = (tempItem.SubItems.item 1).text else tempItemArray[3] = " "
if (tempItem.SubItems.item 2).text != "" then tempItemArray[4] = (tempItem.SubItems.item 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])
)
for i = 1 to tempArray.count do
(
try
(
if tempArray[i] != cryTools.cryAnim.UI.batchProcess._v.boneList[i] then
boneChanged = true
)catch()
)
--// 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._v.flags[1] = true
cryTools.cryAnim.UI.batchProcess._f.updateDialog()
cryTools.cryAnim.UI.batchProcess._v.flags[1] = false
--// kills bone list edit dialog
destroyDialog cryTools.cryAnim.UI.batchProcess.editBoneList
)
on btnDelete pressed do
(
local lbList = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList
if lbList.FocusedItem != undefined then
lbList.FocusedItem.remove()
)
on btnDeleteAll pressed do
(
local lbList = cryTools.cryAnim.UI.batchProcess.editBoneList.lbList
--// clears whole list
lbList.Items.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 ">> batch9.ms loaded"