From c5bccd8ff47a70f0e4486155150a03a9ccc83787 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 8 Sep 2020 01:04:41 -0500 Subject: [PATCH] Adjusts getUtilizedAssets writeout so it more consistently prints out the dependent assets Adds handling for prefabs with getUtilizedAssets --- Engine/source/T3D/Scene.cpp | 11 ++++++++--- Engine/source/T3D/prefab.cpp | 13 +++++++++++++ Engine/source/T3D/prefab.h | 2 ++ Engine/source/T3D/tsStatic.cpp | 5 +++-- Engine/source/terrain/terrData.cpp | 2 +- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Engine/source/T3D/Scene.cpp b/Engine/source/T3D/Scene.cpp index d9e1b14c5..a76ab165c 100644 --- a/Engine/source/T3D/Scene.cpp +++ b/Engine/source/T3D/Scene.cpp @@ -260,7 +260,14 @@ bool Scene::saveScene(StringTableEntry fileName) for (U32 i = 0; i < utilizedAssetsList.size(); i++) { - levelAssetDef->addAssetDependencyField("staticObjectAssetDependency", utilizedAssetsList[i]); + char depSlotName[50]; + dSprintf(depSlotName, sizeof(depSlotName), "%s%d", "staticObjectAssetDependency", i); + + char depValue[255]; + dSprintf(depValue, sizeof(depValue), "@Asset=%s", utilizedAssetsList[i]); + + levelAssetDef->setDataField(StringTable->insert(depSlotName), NULL, StringTable->insert(depValue)); + } saveSuccess = levelAssetDef->saveAsset(); @@ -280,8 +287,6 @@ void Scene::getUtilizedAssetsFromSceneObject(SimObject* object, Vectorsize(); c++) { SceneObject* childObj = dynamic_cast(group->getObject(c)); - if (childObj) - childObj->getUtilizedAssets(usedAssetsList); //Recurse down getUtilizedAssetsFromSceneObject(childObj, usedAssetsList); diff --git a/Engine/source/T3D/prefab.cpp b/Engine/source/T3D/prefab.cpp index 54080c8a0..37284082e 100644 --- a/Engine/source/T3D/prefab.cpp +++ b/Engine/source/T3D/prefab.cpp @@ -558,6 +558,19 @@ bool Prefab::buildExportPolyList(ColladaUtils::ExportData* exportData, const Box return true; } +void Prefab::getUtilizedAssets(Vector* usedAssetsList) +{ + Vector foundObjects; + mChildGroup->findObjectByType(foundObjects); + + for (S32 i = 0; i < foundObjects.size(); i++) + { + SceneObject* child = foundObjects[i]; + + child->getUtilizedAssets(usedAssetsList); + } +} + ExplodePrefabUndoAction::ExplodePrefabUndoAction( Prefab *prefab ) : UndoAction( "Explode Prefab" ) { diff --git a/Engine/source/T3D/prefab.h b/Engine/source/T3D/prefab.h index 36e5d12f3..28c4b095a 100644 --- a/Engine/source/T3D/prefab.h +++ b/Engine/source/T3D/prefab.h @@ -100,6 +100,8 @@ public: bool buildExportPolyList(ColladaUtils::ExportData* exportData, const Box3F &box, const SphereF &); + virtual void getUtilizedAssets(Vector* usedAssetsList); + protected: void _closeFile( bool removeFileNotify ); diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index d27f0b028..4d3fbed59 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -1692,8 +1692,9 @@ void TSStatic::updateMaterials() void TSStatic::getUtilizedAssets(Vector* usedAssetsList) { - if(!mShapeAsset.isNull()) - usedAssetsList->push_back_unique(mShapeAssetId); + if(!mShapeAsset.isNull() && mShapeAsset->getAssetId() != StringTable->insert("Core_Rendering:noShape")) + usedAssetsList->push_back_unique(mShapeAsset->getAssetId()); + } //------------------------------------------------------------------------ diff --git a/Engine/source/terrain/terrData.cpp b/Engine/source/terrain/terrData.cpp index d6b2dd7d2..64bcc0806 100644 --- a/Engine/source/terrain/terrData.cpp +++ b/Engine/source/terrain/terrData.cpp @@ -1423,7 +1423,7 @@ void TerrainBlock::getMinMaxHeight( F32 *minHeight, F32 *maxHeight ) const void TerrainBlock::getUtilizedAssets(Vector* usedAssetsList) { if (!mTerrainAsset.isNull()) - usedAssetsList->push_back_unique(mTerrainAssetId); + usedAssetsList->push_back_unique(mTerrainAsset->getAssetId()); } //----------------------------------------------------------------------------- // Console Methods