TerrainSystemBus.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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/Math/Vector2.h>
  10. #include <AzCore/Math/Aabb.h>
  11. #include <AzCore/std/containers/span.h>
  12. #include <AzCore/std/functional.h>
  13. #include <AzCore/std/smart_ptr/shared_ptr.h>
  14. #include <AzCore/EBus/EBus.h>
  15. #include <AzCore/EBus/EBusSharedDispatchTraits.h>
  16. #include <AzCore/Component/ComponentBus.h>
  17. #include <AzFramework/Terrain/TerrainDataRequestBus.h>
  18. namespace Terrain
  19. {
  20. /**
  21. * A bus to signal the life times of terrain areas
  22. */
  23. class TerrainSystemServiceRequests
  24. : public AZ::EBusTraits
  25. {
  26. public:
  27. ////////////////////////////////////////////////////////////////////////
  28. // EBusTraits
  29. // singleton pattern
  30. static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
  31. static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
  32. using MutexType = AZStd::recursive_mutex;
  33. ////////////////////////////////////////////////////////////////////////
  34. virtual ~TerrainSystemServiceRequests() = default;
  35. virtual void Activate() = 0;
  36. virtual void Deactivate() = 0;
  37. // register an area to override terrain
  38. virtual void RegisterArea(AZ::EntityId areaId) = 0;
  39. virtual void UnregisterArea(AZ::EntityId areaId) = 0;
  40. virtual void RefreshArea(AZ::EntityId areaId, AzFramework::Terrain::TerrainDataNotifications::TerrainDataChangedMask changeMask) = 0;
  41. virtual void RefreshRegion(
  42. const AZ::Aabb& dirtyRegion, AzFramework::Terrain::TerrainDataNotifications::TerrainDataChangedMask changeMask) = 0;
  43. };
  44. using TerrainSystemServiceRequestBus = AZ::EBus<TerrainSystemServiceRequests>;
  45. /**
  46. * A bus to signal the life times of terrain areas.
  47. * This bus uses shared dispatches, which means that all requests on the bus can run in parallel, but will NOT run in parallel
  48. * with bus connections / disconnections.
  49. */
  50. class TerrainAreaHeightRequests : public AZ::EBusSharedDispatchTraits<TerrainAreaHeightRequests>
  51. {
  52. public:
  53. ////////////////////////////////////////////////////////////////////////
  54. // EBusTraits
  55. static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById;
  56. typedef AZ::EntityId BusIdType;
  57. ////////////////////////////////////////////////////////////////////////
  58. virtual ~TerrainAreaHeightRequests() = default;
  59. /// Synchronous single input location.
  60. /// @inPosition is the input position to query.
  61. /// @outPosition will have the same XY as inPosition, but with the Z adjusted to the proper height.
  62. /// @terrainExists is true if the output position is valid terrain.
  63. virtual void GetHeight(const AZ::Vector3& inPosition, AZ::Vector3& outPosition, bool& terrainExists) = 0;
  64. /// Synchronous multiple input locations.
  65. /// @inOutPositionList takes a list of Vector3s as input and returns the Vector3s with Z filled out.
  66. /// @terrainExistsList outputs flags for whether or not each output position is valid terrain.
  67. virtual void GetHeights(AZStd::span<AZ::Vector3> inOutPositionList, AZStd::span<bool> terrainExistsList) = 0;
  68. };
  69. using TerrainAreaHeightRequestBus = AZ::EBus<TerrainAreaHeightRequests>;
  70. /**
  71. * A bus for the TerrainSystem to interrogate TerrainLayerSpawners.
  72. */
  73. class TerrainSpawnerRequests
  74. : public AZ::ComponentBus
  75. {
  76. public:
  77. ////////////////////////////////////////////////////////////////////////
  78. // EBusTraits
  79. using MutexType = AZStd::recursive_mutex;
  80. ////////////////////////////////////////////////////////////////////////
  81. virtual ~TerrainSpawnerRequests() = default;
  82. virtual void GetPriority(uint32_t& outLayer, int32_t& outPriority) = 0;
  83. virtual bool GetUseGroundPlane() = 0;
  84. };
  85. using TerrainSpawnerRequestBus = AZ::EBus<TerrainSpawnerRequests>;
  86. }