Created function to get relative paths to referenced files that will fall back to asset folder relative paths under certain conditions

Signed-off-by: Guthrie Adams <guthadam@amazon.com>
This commit is contained in:
Guthrie Adams
2021-10-31 22:49:14 -05:00
parent f18f838da6
commit ed4f7965da
5 changed files with 84 additions and 42 deletions
@@ -45,10 +45,22 @@ namespace AtomToolsFramework
//! Convert the property value into the format that will be stored in the source data
//! This is primarily needed to support conversions of special types like enums and images
bool ConvertToExportFormat(
const AZ::IO::BasicPath<AZStd::string>& exportFolder,
const AZStd::string& exportPath,
const AZ::RPI::MaterialTypeSourceData::PropertyDefinition& propertyDefinition,
AZ::RPI::MaterialPropertyValue& propertyValue);
//! Generate a file path from the exported file to the external reference.
//! This function is to support copying or moving a folder containing materials, models, and textures without modifying the files. The
//! general case returns a relative path from the export file to the reference file. If the reference path is too different or distant
//! from the export path then it might be more difficult to work with than an asset folder relative path. For example, material types
//! that Atom provides live in a folder that should be accessible from anywhere. When materials are created in arbitrary gems and
//! project folders, a relative path to the material type would need to be updated whenever the materials are copied or moved. The same
//! thing will happen with parent materials or textures if their paths cant be resolved. To alleviate some of this, we use the asset
//! folder relative path if the export folder relative path is too complex. An alternate solution would be to only use export folder
//! relative paths if the referenced path is in the same folder or a sub folder the assets are not generally packaged like that.
AZStd::string GetExteralReferencePath(
const AZStd::string& exportPath, const AZStd::string& referencePath, const uint32_t maxPathDepth = 2);
//! Traverse up the instance data node hierarchy to find the containing dynamic property object
const AtomToolsFramework::DynamicProperty* FindDynamicPropertyForInstanceDataNode(const AzToolsFramework::InstanceDataNode* pNode);
} // namespace AtomToolsFramework