diff --git a/Engine/source/T3D/assets/assetImporter.cpp b/Engine/source/T3D/assets/assetImporter.cpp index f965bd42c..a3d1a4e21 100644 --- a/Engine/source/T3D/assets/assetImporter.cpp +++ b/Engine/source/T3D/assets/assetImporter.cpp @@ -2534,7 +2534,10 @@ StringTableEntry AssetImporter::autoImportFile(Torque::Path filePath, String typ dumpActivityLog(); - if (hasIssues) + if (hasIssues || + assetItem->importStatus == AssetImportObject::Skipped || + assetItem->importStatus == AssetImportObject::UseForDependencies || + assetItem->importStatus == AssetImportObject::Error) { return StringTable->EmptyString(); } diff --git a/Engine/source/terrain/terrData.cpp b/Engine/source/terrain/terrData.cpp index 532e0cc19..29523e609 100644 --- a/Engine/source/terrain/terrData.cpp +++ b/Engine/source/terrain/terrData.cpp @@ -480,16 +480,21 @@ bool TerrainBlock::saveAsset() AssetDatabase.findAssetType(pAssetQuery, "TerrainMaterialAsset"); - TerrainBlock* clientTerr = static_cast(getClientObject()); + TerrainBlock* terr = static_cast(getClientObject()); + if (!terr) + { + Con::warnf("No active client terrain while trying to save asset. Could be a server action, but should check to be sure!"); + terr = this; + } for (U32 i = 0; i < pAssetQuery->mAssetList.size(); i++) { //Acquire it so we can check it for matches AssetPtr terrMatAsset = pAssetQuery->mAssetList[i]; - for (U32 m = 0; m < clientTerr->mFile->mMaterials.size(); m++) + for (U32 m = 0; m < terr->mFile->mMaterials.size(); m++) { - StringTableEntry intMatName = clientTerr->mFile->mMaterials[m]->getInternalName(); + StringTableEntry intMatName = terr->mFile->mMaterials[m]->getInternalName(); StringTableEntry assetMatDefName = terrMatAsset->getMaterialDefinitionName(); if (assetMatDefName == intMatName) @@ -1456,6 +1461,25 @@ void TerrainBlock::getUtilizedAssets(Vector* usedAssetsList) // Console Methods //----------------------------------------------------------------------------- +bool TerrainBlock::renameTerrainMaterial(StringTableEntry oldMatName, StringTableEntry newMatName) +{ + TerrainMaterial* newMat = TerrainMaterial::findOrCreate(newMatName); + if (!newMat) + return false; + + U32 terrainMaterialCount = mFile->mMaterials.size(); + for (U32 i = 0; i < terrainMaterialCount; i++) + { + if (mFile->mMaterials[i]->getInternalName() == oldMatName) + { + TerrainMaterial* oldMat = mFile->mMaterials[i]; + mFile->mMaterials[i] = newMat; + } + } + + return true; +} + DefineEngineMethod( TerrainBlock, save, bool, ( const char* fileName),, "@brief Saves the terrain block's terrain file to the specified file name.\n\n" @@ -1623,3 +1647,21 @@ DefineEngineMethod(TerrainBlock, setTerrain, bool, (const char* terrain), , "Ter { return object->_setTerrain(StringTable->insert(terrain)); } + +DefineEngineMethod(TerrainBlock, getTerrainMaterialCount, S32, (), , "Gets the number of terrain materials for this block") +{ + return object->getTerrainMaterialCount(); +} + +DefineEngineMethod(TerrainBlock, getTerrainMaterialName, const char*, (S32 index), , "Gets the number of terrain materials for this block") +{ + if (index < 0 || index >= object->getTerrainMaterialCount()) + return StringTable->EmptyString(); + + return object->getTerrainMaterialName(index); +} + +DefineEngineMethod(TerrainBlock, renameTerrainMaterial, bool, (const char* oldMaterialName, const char* newMaterialName), , "Updates the terrain material from the original to the new name in the file. Mostly used for import/conversions.") +{ + return object->renameTerrainMaterial(StringTable->insert(oldMaterialName), StringTable->insert(newMaterialName)); +} diff --git a/Engine/source/terrain/terrData.h b/Engine/source/terrain/terrData.h index cc1479004..07a023371 100644 --- a/Engine/source/terrain/terrData.h +++ b/Engine/source/terrain/terrData.h @@ -522,6 +522,19 @@ public: return true; } + bool renameTerrainMaterial(StringTableEntry oldMatName, StringTableEntry newMatName); + S32 getTerrainMaterialCount() { + if (mFile) + return mFile->mMaterials.size(); + return 0; + } + + StringTableEntry getTerrainMaterialName(S32 index) { + if (mFile) + return mFile->mMaterials[index]->getInternalName(); + + return StringTable->EmptyString(); + } protected: bool mUpdateBasetex; bool mIgnoreZodiacs; diff --git a/Engine/source/terrain/terrMaterial.cpp b/Engine/source/terrain/terrMaterial.cpp index fa3b21f0a..289c9a16f 100644 --- a/Engine/source/terrain/terrMaterial.cpp +++ b/Engine/source/terrain/terrMaterial.cpp @@ -30,6 +30,8 @@ #include "console/persistenceManager.h" #endif +#include "T3D/assets/TerrainMaterialAsset.h" + #include @@ -166,6 +168,18 @@ TerrainMaterial* TerrainMaterial::findOrCreate( const char *nameOrPath ) if ( mat ) return mat; + StringTableEntry assetId = TerrainMaterialAsset::getAssetIdByMaterialName(nameOrPath); + if (assetId != StringTable->EmptyString()) + { + TerrainMaterialAsset* terrMatAsset = AssetDatabase.acquireAsset(assetId); + if (terrMatAsset) + { + mat = terrMatAsset->getMaterialDefinition(); + if (mat) + return mat; + } + } + // We didn't find it... so see if its a path to a // file. If it is lets assume its the texture. if ( GBitmap::sFindFiles( nameOrPath, NULL ) ) @@ -178,15 +192,9 @@ TerrainMaterial* TerrainMaterial::findOrCreate( const char *nameOrPath ) return mat; } - // Ok... return a debug material then. - mat = dynamic_cast( set->findObjectByInternalName( StringTable->insert( "warning_material" ) ) ); - if ( !mat ) - { - // This shouldn't happen.... the warning_texture should - // have already been defined in script, but we put this - // fallback here just in case it gets "lost". + // Ok... return a placeholder material then. mat = new TerrainMaterial(); - mat->setInternalName( "warning_material" ); + mat->setInternalName(nameOrPath); mat->_setDiffuseMap(GFXTextureManager::getWarningTexturePath()); mat->mDiffuseSize = 500; mat->_setDetailMap(StringTable->EmptyString()); @@ -195,8 +203,7 @@ TerrainMaterial* TerrainMaterial::findOrCreate( const char *nameOrPath ) mat->mMacroSize = 200; mat->registerObject(); - Sim::getRootGroup()->addObject( mat ); - } + Sim::getRootGroup()->addObject(mat); return mat; } diff --git a/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml b/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml index 5c91b3d2a..b74012fb2 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml +++ b/Templates/BaseGame/game/tools/assetBrowser/assetImportConfigs.xml @@ -110,7 +110,7 @@ 0 0 + name="AlwaysAddShapeSuffix">1 0