/* * 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 * */ #include #include #include #include namespace Multiplayer { void NetworkSpawnableHolderComponent::Reflect(AZ::ReflectContext* context) { AZ::SerializeContext* serializeContext = azrtti_cast(context); if (serializeContext) { serializeContext->Class() ->Version(1) ->Field("AssetRef", &NetworkSpawnableHolderComponent::m_networkSpawnableAsset); } } NetworkSpawnableHolderComponent::NetworkSpawnableHolderComponent() { } void NetworkSpawnableHolderComponent::Activate() { const auto agentType = GetMultiplayer()->GetAgentType(); const bool shouldSpawnNetEntities = (agentType == MultiplayerAgentType::ClientServer || agentType == MultiplayerAgentType::DedicatedServer); if(shouldSpawnNetEntities) { AZ::Transform rootEntityTransform = AZ::Transform::CreateIdentity(); AzFramework::TransformComponent* rootEntityTransformComponent = GetEntity()->FindComponent(); if (rootEntityTransformComponent) { rootEntityTransform = rootEntityTransformComponent->GetWorldTM(); } INetworkEntityManager* networkEntityManager = GetNetworkEntityManager(); AZ_Assert(networkEntityManager != nullptr, "Network Entity Manager must be initialized before NetworkSpawnableHolderComponent is activated"); m_netSpawnableTicket = networkEntityManager->RequestNetSpawnableInstantiation(m_networkSpawnableAsset, rootEntityTransform); } } void NetworkSpawnableHolderComponent::Deactivate() { m_netSpawnableTicket.reset(); } void NetworkSpawnableHolderComponent::SetNetworkSpawnableAsset(AZ::Data::Asset networkSpawnableAsset) { m_networkSpawnableAsset = networkSpawnableAsset; } AZ::Data::Asset NetworkSpawnableHolderComponent::GetNetworkSpawnableAsset() const { return m_networkSpawnableAsset; } }