khanat-opennel-code/code/nel/tools/build_gamedata/processes/ig/maxscript/ig_export.ms
kaetemi a3b71cdb3e Added: #929 Generators for ecosystem projects, all four ecosystem projects, generators for max exporter scripts, rbank cmb export.
Changed: #929 Improved skipping of exported max files, corrected search paths for some tools configurations.
2010-09-03 12:37:35 +02:00

324 lines
7 KiB
Text

-- #################################################################
-- ## WARNING : this is a generated file, don't change it !
-- #################################################################
-- Allocate 20 Me for the script
heapSize += 15000000
nlErrorFilename = "%OutputLogfile%"
nlErrorStream = openFile nlErrorFilename mode:"a"
if nlErrorStream == undefined then
nlErrorStream = createFile nlErrorFilename
-- Unhide category
fn unhidecategory =
(
if (geometry.count > 0) then
(
unhide geometry[1]
if (geometry[1].ishidden == true) then
max hide object toggle
)
if (shapes.count > 0) then
(
unhide shapes[1]
if (shapes[1].ishidden == true) then
max hide shape toggle
)
if (lights.count > 0) then
(
unhide lights[1]
if (lights[1].ishidden == true) then
max hide light toggle
)
if (cameras.count > 0) then
(
unhide cameras[1]
if (cameras[1].ishidden == true) then
max hide camera toggle
)
if (helpers.count > 0) then
(
unhide helpers[1]
if (helpers[1].ishidden == true) then
max hide helper toggle
)
)
-- Log a message
fn nlerror message =
(
if nlErrorStream != undefined then
(
format "%\n" message to:nlErrorStream
flush nlErrorStream
)
-- To the console
print message
)
-- Some globals
NEL3D_APPDATA_ACCEL = 1423062561 -- type of accelerator : "32" = is not an accelerator and IS clusterized
-- "0" = is not an accelerator and IS NOT clusterized (always visible)
-- "1" = is an accelerator type PORTAL
-- "2" = is an accelerator type CLUSTER
-- "6" = is an accelerator type CLUSTER FATHER-VISIBLE
-- "10" = is an accelerator type CLUSTER VISIBLE-FROM-FATHER
-- "14" = is an accelerator type CLUSTER FATHER-VISIBLE and VISIBLE-FROM-FATHER
-- "17" = is an accelerator type PORTAL DYNAMIC
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
-- "0" = export me
-- "1" = DONT export me
NEL3D_APPDATA_IGNAME = 1423062564 -- string : name of the Instance Group
NEL3D_APPDATA_LOD_NAME_COUNT_MAX = 10
NEL3D_APPDATA_LOD = 1423062537
NEL3D_APPDATA_LOD_NAME_COUNT = NEL3D_APPDATA_LOD
NEL3D_APPDATA_LOD_NAME = NEL3D_APPDATA_LOD_NAME_COUNT+1
NEL3D_APPDATA_LOD_BLEND_IN = NEL3D_APPDATA_LOD_NAME+NEL3D_APPDATA_LOD_NAME_COUNT_MAX
NEL3D_APPDATA_LOD_BLEND_OUT = NEL3D_APPDATA_LOD_BLEND_IN+1
NEL3D_APPDATA_LOD_COARSE_MESH = NEL3D_APPDATA_LOD_BLEND_OUT+1
NEL_OBJECT_NAME_DATA = 1970
-- This node is n accelerator ?
fn isAccelerator node =
(
accel = getappdata node NEL3D_APPDATA_ACCEL
if (accel != undefined) then
(
if (accel == "0") or (accel == "32") then
return false
else
return true
)
return false
)
-- Get the ig name of this object
fn getIg node =
(
return (getappdata node NEL3D_APPDATA_IGNAME)
)
fn runNelMaxExport inputMaxFile =
(
tagThisFile = true
-- Unhide category
unhidecategory()
-- Unhide
max unhide all
-- unselect
max select none
-- Exported object count
exported = 0
-- Ig array
ig_array = #()
-- Scan all the ig in this project
for node in objects do
(
ig = getIg node
if ( (ig != undefined) and (ig != "") ) then
(
-- Found ?
found = false
-- Already found ?
for j = 1 to ig_array.count do
(
if (ig_array[j]==ig) then
(
found = true
exit
)
)
-- Found ?
if (found == false) then
(
append ig_array ig
)
)
)
-- Have some ig ?
if (ig_array.count != 0) then
(
-- For each ig
for ig = 1 to ig_array.count do
(
-- Output filename
outputNelFile = ("%OutputDirectory%/" + ig_array[ig] + ".ig")
-- Check date
if (NeLTestFileDate outputNelFile inputMaxFile) == true then
(
-- Select none
max select none
-- Select all node in this ig
for node in geometry do
(
-- Select it if in the ig
if ((getIg node) == ig_array[ig]) then
selectmore node
)
-- Select all lights in this ig
for node in lights do
(
-- Select it if in the ig
if ((getIg node) == ig_array[ig]) then
selectmore node
)
-- Select all lights in this ig
for node in helpers do
(
-- Select it if in the ig
if ((getIg node) == ig_array[ig]) then
selectmore node
)
-- Check export
try
(
-- Export the ig
instancegroup2export = $selection as array
if (NelExportInstanceGroup instancegroup2export outputNelFile) == true then
(
nlerror("OK " + outputNelFile)
)
else
(
-- Error
nlerror("ERROR exporting ig " + ig_array[ig] + " in file " + inputMaxFile)
tagThisFile = false
)
)
catch
(
-- Error
nlerror("ERROR fatal error exporting ig " + ig_array[ig] + " in file " + inputMaxFile)
tagThisFile = false
)
)
else
(
nlerror("SKIPPED " + outputNelFile)
)
)
)
else
(
-- Error
nlerror("WARNING nothing exported from ig max file " + inputMaxFile)
)
return tagThisFile
)
try
(
-- Get files in the %MaxSourceDirectory% directory
files = getFiles "%MaxSourceDirectory%/*.max"
gc()
-- Sort files
sort files
gc()
-- No file ?
if files.count != 0 then
(
-- For each files
for i = 1 to files.count do
(
inputMaxFile = files[i]
outputTagFile = ("%TagDirectory%/" + (getFilenameFile inputMaxFile) + (getFilenameType inputMaxFile) + ".tag")
try
(
-- Compare file date
if (NeLTestFileDate outputTagFile inputMaxFile) == true then
(
-- Free memory and file handles
gc()
heapfree
-- Reset 3dsmax
resetMAXFile #noprompt
-- Open the max project
nlerror("Scanning file " + inputMaxFile + " ...")
if (loadMaxFile inputMaxFile quiet:true) == true then
(
tagThisFile = runNelMaxExport(inputMaxFile)
-- Write a tag file
if tagThisFile == true then
(
tagFile = createFile outputTagFile
if tagFile == undefined then
(
nlerror("WARNING can't create tag file " + outputTagFile)
)
else
(
print "mukyu" to: tagFile
close tagFile
)
)
)
else
(
-- Error
nlerror("ERROR exporting 'ig': can't open the file " + inputMaxFile)
)
)
else
(
nlerror("SKIPPED BY TAG " + inputMaxFile)
)
)
catch
(
-- Error
nlerror("ERROR error exporting 'ig' in files " + inputMaxFile)
)
)
)
else
(
nlerror("WARNING no *.max file in folder %MaxSourceDirectory%")
)
)
catch
(
-- Error
nlerror("ERROR fatal error exporting 'ig' in folder %MaxSourceDirectory%")
)
-- Bye
resetMAXFile #noprompt
quitMAX #noPrompt
quitMAX() #noPrompt