| 467 | } |
| 468 | |
| 469 | bool TerrainBlock::saveAsset() |
| 470 | { |
| 471 | if (!mTerrainAsset.isNull() && mTerrainAsset->isAssetValid()) |
| 472 | { |
| 473 | mTerrainAsset->clearAssetDependencyFields("terrainMaterailAsset"); |
| 474 | |
| 475 | AssetQuery* pAssetQuery = new AssetQuery(); |
| 476 | pAssetQuery->registerObject(); |
| 477 | |
| 478 | AssetDatabase.findAssetType(pAssetQuery, "TerrainMaterialAsset"); |
| 479 | |
| 480 | TerrainBlock* terr = static_cast<TerrainBlock*>(getClientObject()); |
| 481 | if (!terr) |
| 482 | { |
| 483 | Con::warnf("No active client terrain while trying to save asset. Could be a server action, but should check to be sure!"); |
| 484 | terr = this; |
| 485 | } |
| 486 | |
| 487 | for (U32 i = 0; i < pAssetQuery->mAssetList.size(); i++) |
| 488 | { |
| 489 | //Acquire it so we can check it for matches |
| 490 | AssetPtr<TerrainMaterialAsset> terrMatAsset = pAssetQuery->mAssetList[i]; |
| 491 | |
| 492 | for (U32 m = 0; m < terr->mFile->mMaterials.size(); m++) |
| 493 | { |
| 494 | StringTableEntry intMatName = terr->mFile->mMaterials[m]->getInternalName(); |
| 495 | |
| 496 | StringTableEntry assetMatDefName = terrMatAsset->getMaterialDefinitionName(); |
| 497 | if (assetMatDefName == intMatName) |
| 498 | { |
| 499 | mTerrainAsset->addAssetDependencyField("terrainMaterailAsset", terrMatAsset.getAssetId()); |
| 500 | } |
| 501 | } |
| 502 | |
| 503 | terrMatAsset.clear(); |
| 504 | } |
| 505 | |
| 506 | pAssetQuery->destroySelf(); |
| 507 | |
| 508 | bool saveAssetSuccess = mTerrainAsset->saveAsset(); |
| 509 | |
| 510 | if (!saveAssetSuccess) |
| 511 | return false; |
| 512 | |
| 513 | return mFile->save(mTerrainAsset->getTerrainFilePath()); |
| 514 | } |
| 515 | |
| 516 | return false; |
| 517 | } |
| 518 | |
| 519 | bool TerrainBlock::_setTerrainFile( void *obj, const char *index, const char *data ) |
| 520 | { |
no test coverage detected