/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ #pragma once #include #include #include #include #include #include #include #include #include // Forward declarations namespace AZ { class Entity; } //////////////////////////////////////////////////////////////////////////////////////////////////// //! Bus for making requests to the UI game entity context. class UiGameEntityContextRequests : public AZ::EBusTraits { public: virtual ~UiGameEntityContextRequests() {} ////////////////////////////////////////////////////////////////////////// // EBusTraits overrides. Accessed by EntityContextId static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; typedef AzFramework::EntityContextId BusIdType; static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; ////////////////////////////////////////////////////////////////////////// //! Instantiates a dynamic slice asynchronously. //! \return a ticket identifying the spawn request. //! Callers can immediately subscribe to the SliceInstantiationResultBus for this ticket //! to receive result for this specific request. virtual AzFramework::SliceInstantiationTicket InstantiateDynamicSlice( const AZ::Data::Asset& /*sliceAsset*/, const AZ::Vector2& /*position*/, bool /*isViewportPosition*/, AZ::Entity* /*parent*/, const AZ::IdUtils::Remapper::IdMapper& /*customIdMapper*/) { return AzFramework::SliceInstantiationTicket(); } }; using UiGameEntityContextBus = AZ::EBus; //////////////////////////////////////////////////////////////////////////////////////////////////// //! Bus for receiving notifications from the UI game entity context component. class UiGameEntityContextNotifications : public AZ::EBusTraits { public: virtual ~UiGameEntityContextNotifications() = default; /// Fired when a slice has been successfully instantiated. virtual void OnSliceInstantiated(const AZ::Data::AssetId& /*sliceAssetId*/, const AZ::SliceComponent::SliceInstanceAddress& /*instance*/, const AzFramework::SliceInstantiationTicket& /*ticket*/) {} /// Fired when a slice asset could not be instantiated. virtual void OnSliceInstantiationFailed(const AZ::Data::AssetId& /*sliceAssetId*/, const AzFramework::SliceInstantiationTicket& /*ticket*/) {} }; using UiGameEntityContextNotificationBus = AZ::EBus; //////////////////////////////////////////////////////////////////////////////////////////////////// //! Bus for receiving notifications from the UI game entity context component. This bus is used //! by the UiSpawnerComponent that depends on the UiGameEntityContext fixing entities up before //! it sends out notifications to listeners on the UiSpawnerNotificationBus class UiGameEntityContextSliceInstantiationResults : public AZ::EBusTraits { public: virtual ~UiGameEntityContextSliceInstantiationResults() = default; ////////////////////////////////////////////////////////////////////////// // EBusTraits overrides. Addressed by SliceInstantiationTicket static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; typedef AzFramework::SliceInstantiationTicket BusIdType; ////////////////////////////////////////////////////////////////////////// //! Signals that a slice was successfully instantiated prior to entity registration. virtual void OnEntityContextSlicePreInstantiate(const AZ::Data::AssetId& /*sliceAssetId*/, const AZ::SliceComponent::SliceInstanceAddress& /*sliceAddress*/) {} //! Signals that a slice was successfully instantiated after entity registration. virtual void OnEntityContextSliceInstantiated(const AZ::Data::AssetId& /*sliceAssetId*/, const AZ::SliceComponent::SliceInstanceAddress& /*sliceAddress*/) {} //! Signals that a slice could not be instantiated. virtual void OnEntityContextSliceInstantiationFailed(const AZ::Data::AssetId& /*sliceAssetId*/) {} }; using UiGameEntityContextSliceInstantiationResultsBus = AZ::EBus;