3
0

UiSpawnerComponent.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 <AzCore/Component/Component.h>
  10. #include <AzCore/Math/Transform.h>
  11. #include <AzCore/Slice/SliceAsset.h>
  12. #include <AzFramework/Entity/EntityContextBus.h>
  13. #include <LyShine/Bus/UiSpawnerBus.h>
  14. #include <LyShine/Bus/UiGameEntityContextBus.h>
  15. /**
  16. * SpawnerComponent
  17. *
  18. * SpawnerComponent facilitates spawning of a design-time selected or run-time provided "*.dynamicslice" at an entity's location with an optional offset.
  19. */
  20. class UiSpawnerComponent
  21. : public AZ::Component
  22. , private UiSpawnerBus::Handler
  23. , private UiGameEntityContextSliceInstantiationResultsBus::MultiHandler
  24. {
  25. public:
  26. AZ_COMPONENT(UiSpawnerComponent, "{5AF19874-04A4-4540-82FC-5F29EC854E31}");
  27. UiSpawnerComponent();
  28. ~UiSpawnerComponent() override = default;
  29. //////////////////////////////////////////////////////////////////////////
  30. // AZ::Component
  31. void Activate() override;
  32. void Deactivate() override;
  33. //////////////////////////////////////////////////////////////////////////
  34. //////////////////////////////////////////////////////////////////////////
  35. // UiSpawnerBus::Handler
  36. AzFramework::SliceInstantiationTicket Spawn() override;
  37. AzFramework::SliceInstantiationTicket SpawnRelative(const AZ::Vector2& relative) override;
  38. AzFramework::SliceInstantiationTicket SpawnViewport(const AZ::Vector2& pos) override;
  39. AzFramework::SliceInstantiationTicket SpawnSlice(const AZ::Data::Asset<AZ::Data::AssetData>& slice) override;
  40. AzFramework::SliceInstantiationTicket SpawnSliceRelative(const AZ::Data::Asset<AZ::Data::AssetData>& slice, const AZ::Vector2& relative) override;
  41. AzFramework::SliceInstantiationTicket SpawnSliceViewport(const AZ::Data::Asset<AZ::Data::AssetData>& slice, const AZ::Vector2& pos) override;
  42. //////////////////////////////////////////////////////////////////////////
  43. //////////////////////////////////////////////////////////////////////////
  44. // UiGameEntityContextSliceInstantiationResultsBus::MultiHandler
  45. void OnEntityContextSlicePreInstantiate(const AZ::Data::AssetId& sliceAssetId, const AZ::SliceComponent::SliceInstanceAddress& sliceAddress) override;
  46. void OnEntityContextSliceInstantiated(const AZ::Data::AssetId& sliceAssetId, const AZ::SliceComponent::SliceInstanceAddress& sliceAddress) override;
  47. void OnEntityContextSliceInstantiationFailed(const AZ::Data::AssetId& sliceAssetId) override;
  48. //////////////////////////////////////////////////////////////////////////
  49. private:
  50. //////////////////////////////////////////////////////////////////////////
  51. // Component descriptor
  52. static void Reflect(AZ::ReflectContext* context);
  53. static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent);
  54. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
  55. //////////////////////////////////////////////////////////////////////////
  56. //////////////////////////////////////////////////////////////////////////
  57. // Private helpers
  58. AzFramework::SliceInstantiationTicket SpawnSliceInternal(const AZ::Data::Asset<AZ::Data::AssetData>& slice, const AZ::Vector2& position, bool isViewportPosition);
  59. AZStd::vector<AZ::EntityId> GetTopLevelEntities(const AZ::SliceComponent::EntityList& entities);
  60. //////////////////////////////////////////////////////////////////////////
  61. // Serialized members
  62. AZ::Data::Asset<AZ::DynamicSliceAsset> m_sliceAsset{ AZ::Data::AssetLoadBehavior::PreLoad };
  63. bool m_spawnOnActivate = false;
  64. };