133 lines
3.2 KiB
Plaintext
Executable File
133 lines
3.2 KiB
Plaintext
Executable File
--
|
|
-- Obsolete-instance finder
|
|
-- Displays list of metafiles containing obsolete objects (as defined by propSwap.txt)
|
|
--
|
|
-- Neal D Corbett
|
|
-- Rockstar Leeds
|
|
-- 27/04/2011
|
|
--
|
|
|
|
fn RsFindObsoleteObjMaps =
|
|
(
|
|
local timestart = timestamp()
|
|
|
|
RSrefFuncs.setObsoleteRefs()
|
|
local oldNames = RSrefData.swapFromNames
|
|
|
|
local mapItems = RsProjectContentFindAll type:"mapzip"
|
|
|
|
pushPrompt "Getting map filenames"
|
|
local isContainer = #{}
|
|
local mapFilenames = #()
|
|
|
|
for item in mapItems do
|
|
(
|
|
local mapMaxNode = item.inputs[1]
|
|
|
|
if (mapMaxNode != undefined) and mapMaxNode.instances do
|
|
(
|
|
local filename = item.path + "/" + item.name + ".xml"
|
|
|
|
if doesFileExist filename do
|
|
(
|
|
append mapFilenames filename
|
|
|
|
if (matchPattern mapMaxNode.mapType pattern:"*container*") do
|
|
(
|
|
isContainer[mapFilenames.count] = true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
popPrompt()
|
|
|
|
mapItems = undefined
|
|
local filesizes = for filename in mapFilenames collect (getFileSize filename)
|
|
|
|
local totalSize = 0
|
|
for fileSize in filesizes do (totalSize += filesize)
|
|
|
|
local mapCount = mapFilenames.count
|
|
|
|
progressStart "Reading maps"
|
|
|
|
local sizeSoFar = 0.0
|
|
local memWas = 0
|
|
|
|
local obosoletesFound = #()
|
|
|
|
local sceneXml, searchName
|
|
for n = 1 to mapCount while progressUpdate (100.0 * (sizeSoFar += filesizes[n]) / totalSize) do
|
|
(
|
|
-- Garbage-collect every time the memory-size creeps up by 100mb:
|
|
if ((sysinfo.getMAXMemoryInfo())[3] - memWas) > 100000000 do
|
|
(
|
|
gc light:true
|
|
(dotnetclass "system.gc").collect()
|
|
memWas = (sysinfo.getMAXMemoryInfo())[3]
|
|
)
|
|
|
|
local filename = mapFilenames[n]
|
|
|
|
local loadOptions = (dotnetobject "RSG.SceneXml.Scene").LoadOptions.Objects
|
|
sceneXml = dotnetobject "RSG.SceneXml.Scene" filename loadOptions true
|
|
|
|
local readElems = #()
|
|
|
|
for elem in sceneXml.objects do
|
|
(
|
|
if elem.isContainer() then
|
|
(
|
|
join readElems elem.children
|
|
)
|
|
else
|
|
(
|
|
append readElems elem
|
|
)
|
|
)
|
|
|
|
local obsoleteObjNames = #()
|
|
local objCount = 0
|
|
|
|
for obj in readElems where obj.IsRefObject() or obj.IsXRef() do
|
|
(
|
|
objCount += 1
|
|
searchName = toLower obj.name
|
|
if (findItem oldNames searchName) != 0 do
|
|
(
|
|
appendIfUnique obsoleteObjNames searchName
|
|
)
|
|
)
|
|
--format "% - %\n" (getfilenamefile filename) objCount
|
|
|
|
if (obsoleteObjNames.count != 0) do
|
|
(
|
|
append obosoletesFound (dataPair filename:filename objNames:obsoleteObjNames)
|
|
)
|
|
)
|
|
sceneXml = undefined
|
|
|
|
gc light:true
|
|
(dotnetclass "system.gc").collect()
|
|
progressEnd()
|
|
|
|
local outputText = stringstream ""
|
|
format "% maps found containing obsolete objects (as defined by %)\n" obosoletesFound.count RsRefData.SwapsCfgFile to:outputText
|
|
format "Search took % seconds\n\n" ((timeStamp() - timeStart) / 1000.0) to:outputText
|
|
|
|
for item in obosoletesFound do
|
|
(
|
|
format "%\nContains:\n" item.filename to:outputText
|
|
for objName in item.objNames do
|
|
(
|
|
format " %\n" objName to:outputText
|
|
)
|
|
format "\n" to:outputText
|
|
)
|
|
|
|
RScreateTextWindow text:(outputText as string) title:"Search Results: Obsolete objects"
|
|
|
|
ok
|
|
)
|
|
|
|
RsFindObsoleteObjMaps() |