/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #pragma once #include #include #include #include #include #include #include #include namespace Terrain { /** * A bus to signal the life times of terrain areas * Note: all the API are meant to be queued events */ class TerrainSystemServiceRequests : public AZ::EBusTraits { public: //////////////////////////////////////////////////////////////////////// // EBusTraits // singleton pattern static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; using MutexType = AZStd::recursive_mutex; //////////////////////////////////////////////////////////////////////// virtual ~TerrainSystemServiceRequests() = default; virtual void Activate() = 0; virtual void Deactivate() = 0; // register an area to override terrain virtual void RegisterArea(AZ::EntityId areaId) = 0; virtual void UnregisterArea(AZ::EntityId areaId) = 0; virtual void RefreshArea(AZ::EntityId areaId, AzFramework::Terrain::TerrainDataNotifications::TerrainDataChangedMask changeMask) = 0; }; using TerrainSystemServiceRequestBus = AZ::EBus; /** * A bus to signal the life times of terrain areas * Note: all the API are meant to be queued events */ class TerrainAreaHeightRequests : public AZ::ComponentBus { public: //////////////////////////////////////////////////////////////////////// // EBusTraits using MutexType = AZStd::recursive_mutex; //////////////////////////////////////////////////////////////////////// virtual ~TerrainAreaHeightRequests() = default; /// Synchronous single input location. /// @inPosition is the input position to query. /// @outPosition will have the same XY as inPosition, but with the Z adjusted to the proper height. /// @terrainExists is true if the output position is valid terrain. virtual void GetHeight(const AZ::Vector3& inPosition, AZ::Vector3& outPosition, bool& terrainExists) = 0; /// Synchronous multiple input locations. /// @inOutPositionList takes a list of Vector3s as input and returns the Vector3s with Z filled out. /// @terrainExistsList outputs flags for whether or not each output position is valid terrain. virtual void GetHeights(AZStd::span inOutPositionList, AZStd::span terrainExistsList) = 0; }; using TerrainAreaHeightRequestBus = AZ::EBus; /** * A bus for the TerrainSystem to interrogate TerrainLayerSpawners. */ class TerrainSpawnerRequests : public AZ::ComponentBus { public: //////////////////////////////////////////////////////////////////////// // EBusTraits using MutexType = AZStd::recursive_mutex; //////////////////////////////////////////////////////////////////////// virtual ~TerrainSpawnerRequests() = default; virtual void GetPriority(AZ::u32& outLayer, AZ::u32& outPriority) = 0; virtual bool GetUseGroundPlane() = 0; }; using TerrainSpawnerRequestBus = AZ::EBus; }