3
0

AnimGraphAsset.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. #pragma once
  9. #include <Integration/Assets/AssetCommon.h>
  10. namespace EMotionFX
  11. {
  12. class AnimGraph;
  13. class AnimGraphInstance;
  14. class ActorInstance;
  15. class MotionSet;
  16. namespace Integration
  17. {
  18. class ActorAsset;
  19. class AnimGraphAsset
  20. : public EMotionFXAsset
  21. {
  22. public:
  23. friend class AnimGraphAssetHandler;
  24. AZ_CLASS_ALLOCATOR_DECL
  25. AZ_RTTI(AnimGraphAsset, "{28003359-4A29-41AE-8198-0AEFE9FF5263}", EMotionFXAsset);
  26. AnimGraphAsset(AZ::Data::AssetId id = AZ::Data::AssetId());
  27. typedef EMotionFXPtr<EMotionFX::AnimGraphInstance> AnimGraphInstancePtr;
  28. AnimGraphInstancePtr CreateInstance(
  29. EMotionFX::ActorInstance* actorInstance,
  30. EMotionFX::MotionSet* motionSet);
  31. EMotionFX::AnimGraph* GetAnimGraph() { return m_emfxAnimGraph ? m_emfxAnimGraph.get() : nullptr; }
  32. void SetData(EMotionFX::AnimGraph* animGraph);
  33. void SetStatus(AssetStatus newStatus) { m_status = newStatus; }
  34. private:
  35. AZStd::unique_ptr<EMotionFX::AnimGraph> m_emfxAnimGraph;
  36. };
  37. class AnimGraphAssetHandler : public EMotionFXAssetHandler<AnimGraphAsset>
  38. {
  39. public:
  40. AZ_CLASS_ALLOCATOR_DECL
  41. bool OnInitAsset(const AZ::Data::Asset<AZ::Data::AssetData>& asset) override final;
  42. void DestroyAsset(AZ::Data::AssetPtr ptr) override final;
  43. AZ::Data::AssetType GetAssetType() const override final;
  44. void GetAssetTypeExtensions(AZStd::vector<AZStd::string>& extensions) override final;
  45. AZ::Uuid GetComponentTypeId() const override final;
  46. const char* GetAssetTypeDisplayName() const override final;
  47. const char* GetBrowserIcon() const override;
  48. };
  49. class AnimGraphAssetBuilderHandler : public AnimGraphAssetHandler
  50. {
  51. public:
  52. void InitAsset(const AZ::Data::Asset<AZ::Data::AssetData>& asset, bool loadStageSucceeded, bool isReload) override;
  53. AZ::Data::AssetHandler::LoadResult LoadAssetData(
  54. const AZ::Data::Asset<AZ::Data::AssetData>& asset,
  55. AZStd::shared_ptr<AZ::Data::AssetDataStream> stream,
  56. const AZ::Data::AssetFilterCB& assetLoadFilterCB) override;
  57. };
  58. } // namespace Integration
  59. } // namespace EMotionFX
  60. namespace AZ
  61. {
  62. AZ_TYPE_INFO_SPECIALIZE(EMotionFX::Integration::EMotionFXPtr<EMotionFX::Integration::AnimGraphAsset>, "{BF1ACFB9-8295-4B55-8B55-DC64BFF36BD3}");
  63. AZ_TYPE_INFO_SPECIALIZE(EMotionFX::Integration::EMotionFXPtr<EMotionFX::AnimGraphInstance>, "{769ED685-EC18-449D-9453-7D47D9BC1B8A}");
  64. }