diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h index b63ffee9a3..76a809b351 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.h @@ -33,10 +33,10 @@ namespace Multiplayer AzNetworking::IConnection* GetConnection() const override; EntityReplicationManager& GetReplicationManager() override; void Update(AZ::TimeMs serverGameTimeMs) override; + bool CanSendUpdates() const override; + void SetCanSendUpdates(bool canSendUpdates) override; //! @} - bool CanSendUpdates(); - private: EntityReplicationManager m_entityReplicationManager; AzNetworking::IConnection* m_connection = nullptr; diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl index 1ee5711341..6d4a332b6e 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ClientToServerConnectionData.inl @@ -12,8 +12,13 @@ namespace Multiplayer { - inline bool ClientToServerConnectionData::CanSendUpdates() + inline bool ClientToServerConnectionData::CanSendUpdates() const { return m_canSendUpdates; } + + inline void ClientToServerConnectionData::SetCanSendUpdates(bool canSendUpdates) + { + m_canSendUpdates = canSendUpdates; + } } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/IConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/IConnectionData.h index ebff75fd9b..a7ceffd289 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/IConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/IConnectionData.h @@ -44,5 +44,13 @@ namespace Multiplayer //! Creates and manages sending updates to the remote endpoint. //! @param serverGameTimeMs current server game time in milliseconds virtual void Update(AZ::TimeMs serverGameTimeMs) = 0; + + //! Returns whether update messages can be sent to the connection. + //! @return true if update messages can be sent + virtual bool CanSendUpdates() const = 0; + + //! Sets the state of connection whether update messages can be sent or not. + //! @param canSendUpdates the state value + virtual void SetCanSendUpdates(bool canSendUpdates) = 0; }; } diff --git a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h index 596bdc88d9..7ea62b15fd 100644 --- a/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h +++ b/Gems/Multiplayer/Code/Source/ConnectionData/ServerToClientConnectionData.h @@ -34,11 +34,10 @@ namespace Multiplayer AzNetworking::IConnection* GetConnection() const override; EntityReplicationManager& GetReplicationManager() override; void Update(AZ::TimeMs serverGameTimeMs) override; + bool CanSendUpdates() const override; + void SetCanSendUpdates(bool canSendUpdates) override; //! @} - bool CanSendUpdates() const; - void SetCanSendUpdates(bool canSendUpdates); - NetworkEntityHandle GetPrimaryPlayerEntity(); const NetworkEntityHandle& GetPrimaryPlayerEntity() const; diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index 49a0f63b63..c0570b054e 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -384,7 +384,7 @@ namespace Multiplayer bool MultiplayerSystemComponent::HandleRequest( AzNetworking::IConnection* connection, [[maybe_unused]] const AzNetworking::IPacketHeader& packetHeader, MultiplayerPackets::ReadyForEntityUpdates& packet) { - auto* connectionData = reinterpret_cast(connection->GetUserData()); + IConnectionData* connectionData = reinterpret_cast(connection->GetUserData()); if (connectionData) { connectionData->SetCanSendUpdates(packet.GetReadyForEntityUpdates()); diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index 131e7be3f1..4832ba487a 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -462,9 +462,9 @@ namespace Multiplayer m_rootSpawnableAsset = netSpawnableAsset; - auto* iMultiplayer = AZ::Interface::Get(); + auto* multiplayer = AZ::Interface::Get(); - const auto agentType = iMultiplayer->GetAgentType(); + const auto agentType = multiplayer->GetAgentType(); const bool spawnImmediately = (agentType == MultiplayerAgentType::ClientServer || agentType == MultiplayerAgentType::DedicatedServer); @@ -476,7 +476,7 @@ namespace Multiplayer { // If we don't spawn net entities immediately (i.e. it is a client), // tell the server/host it can start sending updates that will instantiate entities. - iMultiplayer->SendReadyForEntityUpdates(true); + multiplayer->SendReadyForEntityUpdates(true); } }