NetTransform replicates local transform for child entities
Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com>
This commit is contained in:
@@ -77,9 +77,19 @@ namespace Multiplayer
|
||||
}
|
||||
}
|
||||
|
||||
if (!GetTransformComponent()->GetWorldTM().IsClose(blendTransform))
|
||||
if (GetParentEntityId() == InvalidNetEntityId)
|
||||
{
|
||||
GetTransformComponent()->SetWorldTM(blendTransform);
|
||||
if (!GetTransformComponent()->GetWorldTM().IsClose(blendTransform))
|
||||
{
|
||||
GetTransformComponent()->SetWorldTM(blendTransform);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!GetTransformComponent()->GetLocalTM().IsClose(blendTransform))
|
||||
{
|
||||
GetTransformComponent()->SetLocalTM(blendTransform);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,9 +103,19 @@ namespace Multiplayer
|
||||
targetTransform.SetUniformScale(GetScale());
|
||||
|
||||
// Hard set the entities transform
|
||||
if (!GetTransformComponent()->GetWorldTM().IsClose(targetTransform))
|
||||
if (GetParentEntityId() == InvalidNetEntityId)
|
||||
{
|
||||
GetTransformComponent()->SetWorldTM(targetTransform);
|
||||
if (!GetTransformComponent()->GetWorldTM().IsClose(targetTransform))
|
||||
{
|
||||
GetTransformComponent()->SetWorldTM(targetTransform);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!GetTransformComponent()->GetLocalTM().IsClose(targetTransform))
|
||||
{
|
||||
GetTransformComponent()->SetLocalTM(targetTransform);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,7 +137,7 @@ namespace Multiplayer
|
||||
|
||||
NetworkTransformComponentController::NetworkTransformComponentController(NetworkTransformComponent& parent)
|
||||
: NetworkTransformComponentControllerBase(parent)
|
||||
, m_transformChangedHandler([this](const AZ::Transform&, const AZ::Transform& worldTm) { OnTransformChangedEvent(worldTm); })
|
||||
, m_transformChangedHandler([this](const AZ::Transform& localTm, const AZ::Transform& worldTm) { OnTransformChangedEvent(localTm, worldTm); })
|
||||
, m_parentIdChangedHandler([this](AZ::EntityId oldParent, AZ::EntityId newParent) { OnParentIdChangedEvent(oldParent, newParent); })
|
||||
{
|
||||
;
|
||||
@@ -125,11 +145,14 @@ namespace Multiplayer
|
||||
|
||||
void NetworkTransformComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
|
||||
{
|
||||
GetParent().GetTransformComponent()->BindTransformChangedEventHandler(m_transformChangedHandler);
|
||||
OnTransformChangedEvent(GetParent().GetTransformComponent()->GetWorldTM());
|
||||
if (AzFramework::TransformComponent* parentTransform = GetParent().GetTransformComponent())
|
||||
{
|
||||
parentTransform->BindTransformChangedEventHandler(m_transformChangedHandler);
|
||||
OnTransformChangedEvent(parentTransform->GetLocalTM(), parentTransform->GetWorldTM());
|
||||
|
||||
GetParent().GetTransformComponent()->BindParentChangedEventHandler(m_parentIdChangedHandler);
|
||||
OnParentIdChangedEvent(AZ::EntityId(), GetParent().GetTransformComponent()->GetParentId());
|
||||
parentTransform->BindParentChangedEventHandler(m_parentIdChangedHandler);
|
||||
OnParentIdChangedEvent(AZ::EntityId(), parentTransform->GetParentId());
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkTransformComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
|
||||
@@ -137,11 +160,12 @@ namespace Multiplayer
|
||||
;
|
||||
}
|
||||
|
||||
void NetworkTransformComponentController::OnTransformChangedEvent(const AZ::Transform& worldTm)
|
||||
void NetworkTransformComponentController::OnTransformChangedEvent(const AZ::Transform& localTm, const AZ::Transform& worldTm)
|
||||
{
|
||||
SetRotation(worldTm.GetRotation());
|
||||
SetTranslation(worldTm.GetTranslation());
|
||||
SetScale(worldTm.GetUniformScale());
|
||||
const AZ::Transform& localOrWorld = GetParentEntityId() == InvalidNetEntityId ? worldTm : localTm;
|
||||
SetRotation(localOrWorld.GetRotation());
|
||||
SetTranslation(localOrWorld.GetTranslation());
|
||||
SetScale(localOrWorld.GetUniformScale());
|
||||
}
|
||||
|
||||
void NetworkTransformComponentController::OnParentIdChangedEvent([[maybe_unused]] AZ::EntityId oldParent, AZ::EntityId newParent)
|
||||
@@ -150,7 +174,10 @@ namespace Multiplayer
|
||||
if (parentEntity)
|
||||
{
|
||||
const ConstNetworkEntityHandle parentHandle(parentEntity, GetNetworkEntityTracker());
|
||||
SetParentEntityId(parentHandle.GetNetEntityId());
|
||||
if (parentHandle.Exists())
|
||||
{
|
||||
SetParentEntityId(parentHandle.GetNetEntityId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user