First crack at the multiplayer component registry to allow multiplayer components to live in any gem
This commit is contained in:
@@ -23,6 +23,7 @@ namespace Multiplayer
|
||||
class NetworkEntityTracker;
|
||||
class NetworkEntityAuthorityTracker;
|
||||
class NetworkEntityRpcMessage;
|
||||
class MultiplayerComponentRegistry;
|
||||
|
||||
using EntityExitDomainEvent = AZ::Event<const ConstNetworkEntityHandle&>;
|
||||
using ControllersActivatedEvent = AZ::Event<const ConstNetworkEntityHandle&, EntityIsMigrating>;
|
||||
@@ -48,6 +49,10 @@ namespace Multiplayer
|
||||
//! @return the NetworkEntityAuthorityTracker for this INetworkEntityManager instance
|
||||
virtual NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() = 0;
|
||||
|
||||
//! Returns the MultiplayerComponentRegistry for this INetworkEntityManager instance.
|
||||
//! @return the MultiplayerComponentRegistry for this INetworkEntityManager instance
|
||||
virtual MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() = 0;
|
||||
|
||||
//! Returns the HostId for this INetworkEntityManager instance.
|
||||
//! @return the HostId for this INetworkEntityManager instance
|
||||
virtual HostId GetHostId() const = 0;
|
||||
@@ -144,4 +149,9 @@ namespace Multiplayer
|
||||
{
|
||||
return GetNetworkEntityManager()->GetNetworkEntityAuthorityTracker();
|
||||
}
|
||||
|
||||
inline MultiplayerComponentRegistry* GetMultiplayerComponentRegistry()
|
||||
{
|
||||
return GetNetworkEntityManager()->GetMultiplayerComponentRegistry();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,11 @@ namespace Multiplayer
|
||||
return &m_networkEntityAuthorityTracker;
|
||||
}
|
||||
|
||||
MultiplayerComponentRegistry* NetworkEntityManager::GetMultiplayerComponentRegistry()
|
||||
{
|
||||
return &m_multiplayerComponentRegistry;
|
||||
}
|
||||
|
||||
HostId NetworkEntityManager::GetHostId() const
|
||||
{
|
||||
return m_hostId;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#include <Source/NetworkEntity/NetworkEntityRpcMessage.h>
|
||||
#include <Source/EntityDomains/IEntityDomain.h>
|
||||
#include <Source/NetworkEntity/NetworkSpawnableLibrary.h>
|
||||
|
||||
#include <Source/Components/MultiplayerComponentRegistry.h>
|
||||
|
||||
namespace Multiplayer
|
||||
{
|
||||
@@ -42,6 +42,7 @@ namespace Multiplayer
|
||||
//! @{
|
||||
NetworkEntityTracker* GetNetworkEntityTracker() override;
|
||||
NetworkEntityAuthorityTracker* GetNetworkEntityAuthorityTracker() override;
|
||||
MultiplayerComponentRegistry* GetMultiplayerComponentRegistry() override;
|
||||
HostId GetHostId() const override;
|
||||
ConstNetworkEntityHandle GetEntity(NetEntityId netEntityId) const override;
|
||||
|
||||
@@ -85,6 +86,8 @@ namespace Multiplayer
|
||||
|
||||
NetworkEntityTracker m_networkEntityTracker;
|
||||
NetworkEntityAuthorityTracker m_networkEntityAuthorityTracker;
|
||||
MultiplayerComponentRegistry m_multiplayerComponentRegistry;
|
||||
|
||||
AZ::ScheduledEvent m_removeEntitiesEvent;
|
||||
AZStd::vector<NetEntityId> m_removeList;
|
||||
AZStd::unique_ptr<IEntityDomain> m_entityDomain;
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace Multiplayer
|
||||
}
|
||||
}
|
||||
|
||||
NetworkEntityRpcMessage::NetworkEntityRpcMessage(RpcDeliveryType rpcDeliveryType, NetEntityId entityId, NetComponentId componentId, uint8_t rpcMessageType, ReliabilityType isReliable)
|
||||
NetworkEntityRpcMessage::NetworkEntityRpcMessage(RpcDeliveryType rpcDeliveryType, NetEntityId entityId, NetComponentId componentId, uint16_t rpcMessageType, ReliabilityType isReliable)
|
||||
: m_rpcDeliveryType(rpcDeliveryType)
|
||||
, m_entityId(entityId)
|
||||
, m_componentId(componentId)
|
||||
@@ -98,7 +98,7 @@ namespace Multiplayer
|
||||
static constexpr uint32_t sizeOfFields = sizeof(RpcDeliveryType)
|
||||
+ sizeof(NetEntityId)
|
||||
+ sizeof(NetComponentId)
|
||||
+ sizeof(uint8_t);
|
||||
+ sizeof(uint16_t);
|
||||
|
||||
// 2-byte size header + the actual blob payload itself
|
||||
const uint32_t sizeOfBlob = (m_data != nullptr) ? sizeof(uint16_t) + m_data->GetSize() : 0;
|
||||
@@ -127,7 +127,7 @@ namespace Multiplayer
|
||||
return m_componentId;
|
||||
}
|
||||
|
||||
uint8_t NetworkEntityRpcMessage::GetRpcMessageType() const
|
||||
uint16_t NetworkEntityRpcMessage::GetRpcMessageType() const
|
||||
{
|
||||
return m_rpcMessageType;
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace Multiplayer
|
||||
//! @param componentType the networked componentId of the component handling this RPC
|
||||
//! @param rpcMessageType the component defined RPC type, so the component knows which RPC this message corresponds to
|
||||
//! @param isReliable whether or not this RPC should be sent reliably
|
||||
explicit NetworkEntityRpcMessage(RpcDeliveryType rpcDeliveryType, NetEntityId entityId, NetComponentId componentId, uint8_t rpcMessageType, ReliabilityType isReliable);
|
||||
explicit NetworkEntityRpcMessage(RpcDeliveryType rpcDeliveryType, NetEntityId entityId, NetComponentId componentId, uint16_t rpcMessageType, ReliabilityType isReliable);
|
||||
|
||||
NetworkEntityRpcMessage& operator =(NetworkEntityRpcMessage&& rhs);
|
||||
NetworkEntityRpcMessage& operator =(const NetworkEntityRpcMessage& rhs);
|
||||
@@ -69,7 +69,7 @@ namespace Multiplayer
|
||||
|
||||
//! Gets the current value of RpcMessageType.
|
||||
//! @return the current value of RpcMessageType
|
||||
uint8_t GetRpcMessageType() const;
|
||||
uint16_t GetRpcMessageType() const;
|
||||
|
||||
//! Writes the data contained inside a_Params to this NetworkEntityRpcMessage's blob buffer.
|
||||
//! @param params the parameters to save inside this NetworkEntityRpcMessage instance
|
||||
@@ -98,7 +98,7 @@ namespace Multiplayer
|
||||
RpcDeliveryType m_rpcDeliveryType = RpcDeliveryType::None;
|
||||
NetEntityId m_entityId = InvalidNetEntityId;
|
||||
NetComponentId m_componentId = InvalidNetComponentId;
|
||||
uint8_t m_rpcMessageType = 0;
|
||||
uint16_t m_rpcMessageType = 0;
|
||||
|
||||
// Only allocated if we actually have data
|
||||
// This is to prevent blowing out stack memory if we declare an array of these EntityUpdateMessages
|
||||
|
||||
@@ -46,6 +46,7 @@ namespace Multiplayer
|
||||
const AZ::Name name = AZ::Name(relativePath);
|
||||
m_spawnables[name] = id;
|
||||
m_spawnablesReverseLookup[id] = name;
|
||||
|
||||
}
|
||||
|
||||
void NetworkSpawnableLibrary::OnCatalogLoaded([[maybe_unused]] const char* catalogFile)
|
||||
|
||||
Reference in New Issue
Block a user