AssetAliasesSourceData.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Atom/RPI.Edit/Common/AssetAliasesSourceData.h>
  9. #include <Atom/RPI.Edit/Common/AssetUtils.h>
  10. #include <Atom/RPI.Reflect/System/AssetAliases.h>
  11. #include <AzCore/Asset/AssetCommon.h>
  12. #include <AzCore/std/smart_ptr/make_shared.h>
  13. #include <AzToolsFramework/API/EditorAssetSystemAPI.h>
  14. namespace AZ
  15. {
  16. namespace RPI
  17. {
  18. void AssetAliasesSourceData::Reflect(ReflectContext* context)
  19. {
  20. if (auto* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  21. {
  22. serializeContext->Class<AssetAliasInfo>()
  23. ->Version(1)
  24. ->Field("Name", &AssetAliasInfo::m_alias)
  25. ->Field("Path", &AssetAliasInfo::m_path)
  26. ;
  27. serializeContext->Class<AssetAliasesSourceData, ConvertibleSource>()
  28. ->Version(1)
  29. ->Field("AssetPaths", &AssetAliasesSourceData::m_assetPaths)
  30. ;
  31. }
  32. }
  33. bool AssetAliasesSourceData::Convert(TypeId& outTypeId, AZStd::shared_ptr<void>& outData) const
  34. {
  35. outTypeId = AssetAliases::RTTI_Type();
  36. AssetAliases* assetAliases = aznew AssetAliases;
  37. for (auto& assetInfo : m_assetPaths)
  38. {
  39. if (assetAliases->m_assetMapping.find(assetInfo.m_alias) != assetAliases->m_assetMapping.end())
  40. {
  41. AZ_Error("Asset Builder", false, "Duplicate asset alias [%s]", assetInfo.m_alias.c_str());
  42. delete assetAliases;
  43. return false;
  44. }
  45. Outcome<Data::AssetId> assetId = AssetUtils::MakeAssetId(assetInfo.m_path, 0);
  46. if (!assetId.IsSuccess())
  47. {
  48. AZ_Error("Asset Builder", false, "Failed to find asset id with path [%s]", assetInfo.m_path.c_str());
  49. delete assetAliases;
  50. return false;
  51. }
  52. assetAliases->m_assetMapping[assetInfo.m_alias] = assetId.TakeValue();
  53. }
  54. outData = AZStd::shared_ptr<void>(assetAliases);
  55. return true;
  56. }
  57. } // namespace RPI
  58. } // namespace AZ