diff --git a/AssetImporterSettings.json b/AssetImporterSettings.json new file mode 100644 index 0000000000..134484cf8d --- /dev/null +++ b/AssetImporterSettings.json @@ -0,0 +1,7 @@ +{ + "SupportedFileTypeExtensions" : [ + ".fbx", + ".stl", + ".stp" + ] +} \ No newline at end of file diff --git a/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.cpp b/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.cpp index 155209f1b5..2210abfaf7 100644 --- a/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.cpp +++ b/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.cpp @@ -10,7 +10,14 @@ * */ +#include +#include +#include +#include #include +#include +#include +#include #include #include #include @@ -23,10 +30,47 @@ namespace AZ { namespace FbxSceneImporter { - const char* FbxImportRequestHandler::s_extension = ".fbx"; + AssetImporterSettings::AssetImporterSettings() + { + // Default supported extension in case the settings file isn't found + m_supportedFileTypeExtensions.emplace(".fbx"); + } + + void AssetImporterSettings::Reflect(AZ::ReflectContext* context) + { + if (auto serializeContext = azrtti_cast(context); serializeContext) + { + serializeContext->Class() + ->Version(1) + ->Field("SupportedFileTypeExtensions", &AssetImporterSettings::m_supportedFileTypeExtensions); + } + } void FbxImportRequestHandler::Activate() { + // Attempt to load the Slice Builder Settings file + AZ::IO::LocalFileIO localFileIO; + + // This will point to @assets@/SettingsFilename, which loads from the cache + // We don't really want this but it works for now + // Trying to use AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourcePath at this point + // would fail because components seem to activate before the AP has populated its file list + AZ::IO::Path sliceBuilderSettingsIoPath(SettingsFilename); + auto result = AzFramework::FileFunc::ReadJsonFile(sliceBuilderSettingsIoPath, &localFileIO); + if (result.IsSuccess()) + { + AZ::JsonSerializationResult::ResultCode serializationResult = + AZ::JsonSerialization::Load(m_settings, result.GetValue()); + if (serializationResult.GetProcessing() == AZ::JsonSerializationResult::Processing::Halted) + { + AZ_Warning("", false, "Error in Asset Importer Settings file.\nUsing default settings."); + } + } + else + { + AZ_Warning("", false, "Failed to load Asset Importer Settings file.\nUsing default settings."); + } + BusConnect(); } @@ -37,21 +81,29 @@ namespace AZ void FbxImportRequestHandler::Reflect(ReflectContext* context) { + AssetImporterSettings::Reflect(context); + SerializeContext* serializeContext = azrtti_cast(context); if (serializeContext) { - serializeContext->Class()->Version(1); + serializeContext->Class()->Version(1)->Attribute( + AZ::Edit::Attributes::SystemComponentTags, + AZStd::vector({AssetBuilderSDK::ComponentTags::AssetBuilder})); + } } void FbxImportRequestHandler::GetSupportedFileExtensions(AZStd::unordered_set& extensions) { - extensions.insert(s_extension); + extensions.insert(m_settings.m_supportedFileTypeExtensions.begin(), m_settings.m_supportedFileTypeExtensions.end()); } Events::LoadingResult FbxImportRequestHandler::LoadAsset(Containers::Scene& scene, const AZStd::string& path, const Uuid& guid, [[maybe_unused]] RequestingApplication requester) { - if (!AzFramework::StringFunc::Path::IsExtension(path.c_str(), s_extension)) + AZStd::string extension; + AzFramework::StringFunc::Path::GetExtension(path.c_str(), extension); + + if (!m_settings.m_supportedFileTypeExtensions.contains(extension)) { return Events::LoadingResult::Ignored; } diff --git a/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.h b/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.h index 8b33051f1e..3ef2823e24 100644 --- a/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.h +++ b/Code/Tools/SceneAPI/FbxSceneBuilder/FbxImportRequestHandler.h @@ -21,6 +21,17 @@ namespace AZ { namespace FbxSceneImporter { + struct AssetImporterSettings + { + AZ_TYPE_INFO(AssetImporterSettings, "{8BB6C7AD-BF99-44DC-9DA1-E7AD3F03DC10}"); + + AssetImporterSettings(); + + static void Reflect(AZ::ReflectContext* context); + + AZStd::unordered_set m_supportedFileTypeExtensions; + }; + class FbxImportRequestHandler : public SceneCore::BehaviorComponent , public Events::AssetImportRequestBus::Handler @@ -39,7 +50,10 @@ namespace AZ RequestingApplication requester) override; private: - static const char* s_extension; + + AssetImporterSettings m_settings; + + static constexpr const char* SettingsFilename = "AssetImporterSettings.json"; }; } // namespace FbxSceneImporter } // namespace SceneAPI