Converts physx console commands from cry console to az console, fixes some bugs in the multiplayer gem
This commit is contained in:
@@ -81,6 +81,9 @@ namespace Multiplayer
|
||||
|
||||
void NetworkTransformComponent::OnResetCountChangedEvent()
|
||||
{
|
||||
m_targetTransform.SetRotation(GetRotation());
|
||||
m_targetTransform.SetTranslation(GetTranslation());
|
||||
m_targetTransform.SetUniformScale(GetScale());
|
||||
m_previousTransform = m_targetTransform;
|
||||
}
|
||||
|
||||
@@ -93,6 +96,15 @@ namespace Multiplayer
|
||||
blendTransform.SetTranslation(m_previousTransform.GetTranslation().Lerp(m_targetTransform.GetTranslation(), blendFactor));
|
||||
blendTransform.SetScale(m_previousTransform.GetScale().Lerp(m_targetTransform.GetScale(), blendFactor));
|
||||
GetTransformComponent()->SetWorldTM(blendTransform);
|
||||
|
||||
//AZLOG
|
||||
//(
|
||||
// NET_Movement,
|
||||
// "Blending entity to position %f x %f x %f",
|
||||
// blendTransform.GetTranslation().GetX(),
|
||||
// blendTransform.GetTranslation().GetY(),
|
||||
// blendTransform.GetTranslation().GetZ()
|
||||
//);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -634,45 +634,62 @@ namespace Multiplayer
|
||||
const float adjustedBlendFactor = 1.0f - (std::powf(0.2f, m_renderBlendFactor));
|
||||
AZLOG(NET_Blending, "Computed blend factor of %f", adjustedBlendFactor);
|
||||
|
||||
AZ::Transform activeCameraTransform;
|
||||
Camera::Configuration activeCameraConfiguration;
|
||||
Camera::ActiveCameraRequestBus::BroadcastResult(activeCameraTransform, &Camera::ActiveCameraRequestBus::Events::GetActiveCameraTransform);
|
||||
Camera::ActiveCameraRequestBus::BroadcastResult(activeCameraConfiguration, &Camera::ActiveCameraRequestBus::Events::GetActiveCameraConfiguration);
|
||||
|
||||
const AZ::ViewFrustumAttributes frustumAttributes
|
||||
(
|
||||
activeCameraTransform,
|
||||
activeCameraConfiguration.m_frustumHeight / activeCameraConfiguration.m_frustumWidth,
|
||||
activeCameraConfiguration.m_fovRadians,
|
||||
activeCameraConfiguration.m_nearClipDistance,
|
||||
activeCameraConfiguration.m_farClipDistance
|
||||
);
|
||||
const AZ::Frustum viewFrustum = AZ::Frustum(frustumAttributes);
|
||||
|
||||
// Unfortunately necessary, as NotifyPreRender can update transforms and thus cause a deadlock inside the vis system
|
||||
AZStd::vector<NetBindComponent*> gatheredEntities;
|
||||
AzFramework::IEntityBoundsUnion* entityBoundsUnion = AZ::Interface<AzFramework::IEntityBoundsUnion>::Get();
|
||||
AZ::Interface<AzFramework::IVisibilitySystem>::Get()->GetDefaultVisibilityScene()->Enumerate(viewFrustum,
|
||||
[&gatheredEntities, entityBoundsUnion](const AzFramework::IVisibilityScene::NodeData& nodeData)
|
||||
if (Camera::ActiveCameraRequestBus::HasHandlers())
|
||||
{
|
||||
gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size());
|
||||
for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries)
|
||||
// If there's a camera, update only what's visible
|
||||
AZ::Transform activeCameraTransform;
|
||||
Camera::Configuration activeCameraConfiguration;
|
||||
Camera::ActiveCameraRequestBus::BroadcastResult(activeCameraTransform, &Camera::ActiveCameraRequestBus::Events::GetActiveCameraTransform);
|
||||
Camera::ActiveCameraRequestBus::BroadcastResult(activeCameraConfiguration, &Camera::ActiveCameraRequestBus::Events::GetActiveCameraConfiguration);
|
||||
|
||||
const AZ::ViewFrustumAttributes frustumAttributes
|
||||
(
|
||||
activeCameraTransform,
|
||||
activeCameraConfiguration.m_frustumHeight / activeCameraConfiguration.m_frustumWidth,
|
||||
activeCameraConfiguration.m_fovRadians,
|
||||
activeCameraConfiguration.m_nearClipDistance,
|
||||
activeCameraConfiguration.m_farClipDistance
|
||||
);
|
||||
const AZ::Frustum viewFrustum = AZ::Frustum(frustumAttributes);
|
||||
|
||||
// Unfortunately necessary, as NotifyPreRender can update transforms and thus cause a deadlock inside the vis system
|
||||
AZStd::vector<NetBindComponent*> gatheredEntities;
|
||||
AzFramework::IEntityBoundsUnion* entityBoundsUnion = AZ::Interface<AzFramework::IEntityBoundsUnion>::Get();
|
||||
AZ::Interface<AzFramework::IVisibilitySystem>::Get()->GetDefaultVisibilityScene()->Enumerate(viewFrustum,
|
||||
[&gatheredEntities, entityBoundsUnion](const AzFramework::IVisibilityScene::NodeData& nodeData)
|
||||
{
|
||||
if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity)
|
||||
gatheredEntities.reserve(gatheredEntities.size() + nodeData.m_entries.size());
|
||||
for (AzFramework::VisibilityEntry* visEntry : nodeData.m_entries)
|
||||
{
|
||||
AZ::Entity* entity = static_cast<AZ::Entity*>(visEntry->m_userData);
|
||||
NetBindComponent* netBindComponent = entity->template FindComponent<NetBindComponent>();
|
||||
if (netBindComponent != nullptr)
|
||||
if (visEntry->m_typeFlags & AzFramework::VisibilityEntry::TypeFlags::TYPE_Entity)
|
||||
{
|
||||
gatheredEntities.push_back(netBindComponent);
|
||||
AZ::Entity* entity = static_cast<AZ::Entity*>(visEntry->m_userData);
|
||||
NetBindComponent* netBindComponent = entity->FindComponent<NetBindComponent>();
|
||||
if (netBindComponent != nullptr)
|
||||
{
|
||||
gatheredEntities.push_back(netBindComponent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
for (NetBindComponent* netBindComponent : gatheredEntities)
|
||||
for (NetBindComponent* netBindComponent : gatheredEntities)
|
||||
{
|
||||
netBindComponent->NotifyPreRender(deltaTime, adjustedBlendFactor);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
netBindComponent->NotifyPreRender(deltaTime, adjustedBlendFactor);
|
||||
// If there's no camera, fall back to updating all net entities
|
||||
for (auto& iter : *(m_networkEntityManager.GetNetworkEntityTracker()))
|
||||
{
|
||||
AZ::Entity* entity = iter.second;
|
||||
NetBindComponent* netBindComponent = entity->FindComponent<NetBindComponent>();
|
||||
if (netBindComponent != nullptr)
|
||||
{
|
||||
netBindComponent->NotifyPreRender(deltaTime, adjustedBlendFactor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <AzCore/Serialization/SerializeContext.h>
|
||||
#include <AzCore/Serialization/EditContext.h>
|
||||
#include <AzCore/Component/TransformBus.h>
|
||||
#include <AzCore/Console/IConsole.h>
|
||||
|
||||
#include <PhysX/SystemComponentBus.h>
|
||||
#include <PhysX/MathConversion.h>
|
||||
@@ -183,9 +184,7 @@ namespace PhysXDebug
|
||||
void SystemComponent::OnCrySystemInitialized([[maybe_unused]] ISystem& system, const SSystemInitParams&)
|
||||
{
|
||||
InitPhysXColorMappings();
|
||||
RegisterCommands();
|
||||
ConfigurePhysXVisualizationParameters();
|
||||
|
||||
}
|
||||
|
||||
void SystemComponent::Reflect(AZ::ReflectContext* context)
|
||||
@@ -537,12 +536,13 @@ namespace PhysXDebug
|
||||
}
|
||||
}
|
||||
|
||||
static void CmdEnableWireFrame([[maybe_unused]] IConsoleCmdArgs* args)
|
||||
static void physx_EnableWireFrame([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||
{
|
||||
PhysXDebug::PhysXDebugRequestBus::Broadcast(&PhysXDebug::PhysXDebugRequestBus::Events::ToggleCullingWireFrame);
|
||||
}
|
||||
AZ_CONSOLEFREEFUNC(physx_EnableWireFrame, AZ::ConsoleFunctorFlags::DontReplicate, "Enables physx wireframe view");
|
||||
|
||||
static void CmdConnectToPvd([[maybe_unused]] IConsoleCmdArgs* args)
|
||||
static void physx_ConnectToPvd([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||
{
|
||||
auto* debug = AZ::Interface<PhysX::Debug::PhysXDebugInterface>::Get();
|
||||
if (debug)
|
||||
@@ -550,8 +550,9 @@ namespace PhysXDebug
|
||||
debug->ConnectToPvd();
|
||||
}
|
||||
}
|
||||
AZ_CONSOLEFREEFUNC(physx_ConnectToPvd, AZ::ConsoleFunctorFlags::DontReplicate, "Connects to the physx visual debugger");
|
||||
|
||||
static void CmdDisconnectFromPvd([[maybe_unused]] IConsoleCmdArgs* args)
|
||||
static void physx_DisconnectFromPvd([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||
{
|
||||
auto* debug = AZ::Interface<PhysX::Debug::PhysXDebugInterface>::Get();
|
||||
if (debug)
|
||||
@@ -559,13 +560,14 @@ namespace PhysXDebug
|
||||
debug->DisconnectFromPvd();
|
||||
}
|
||||
}
|
||||
AZ_CONSOLEFREEFUNC(physx_DisconnectFromPvd, AZ::ConsoleFunctorFlags::DontReplicate, "Disconnects from the physx visual debugger");
|
||||
|
||||
static void CmdSetPhysXDebugCullingBoxSize(IConsoleCmdArgs* args)
|
||||
static void physx_SetPhysXDebugCullingBoxSize([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||
{
|
||||
const int argumentCount = args->GetArgCount();
|
||||
const int argumentCount = arguments.size();
|
||||
if (argumentCount == 2)
|
||||
{
|
||||
float newCullingBoxSize = (float)strtol(args->GetArg(1), nullptr, 10);
|
||||
float newCullingBoxSize = (float)strtol(AZ::CVarFixedString(arguments[1]).c_str(), nullptr, 10);
|
||||
PhysXDebug::PhysXDebugRequestBus::Broadcast(&PhysXDebug::PhysXDebugRequestBus::Events::SetCullingBoxSize, newCullingBoxSize);
|
||||
}
|
||||
else
|
||||
@@ -574,16 +576,17 @@ namespace PhysXDebug
|
||||
"Please use physx_SetDebugCullingBoxSize <boxSize> e.g. physx_SetDebugCullingBoxSize 100.");
|
||||
}
|
||||
}
|
||||
AZ_CONSOLEFREEFUNC(physx_SetPhysXDebugCullingBoxSize, AZ::ConsoleFunctorFlags::DontReplicate, "Sets physx debug culling box size");
|
||||
|
||||
static void CmdTogglePhysXDebugVisualization(IConsoleCmdArgs* args)
|
||||
static void physx_TogglePhysXDebugVisualization([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
|
||||
{
|
||||
using namespace CryStringUtils;
|
||||
|
||||
const int argumentCount = args->GetArgCount();
|
||||
const int argumentCount = arguments.size();
|
||||
|
||||
if (argumentCount == 2)
|
||||
{
|
||||
const auto userPreference = static_cast<DebugCVarValues>(strtol(args->GetArg(1), nullptr, 10));
|
||||
const auto userPreference = static_cast<DebugCVarValues>(strtol(AZ::CVarFixedString(arguments[1]).c_str(), nullptr, 10));
|
||||
|
||||
switch (userPreference)
|
||||
{
|
||||
@@ -609,29 +612,7 @@ namespace PhysXDebug
|
||||
AZ_Warning("PhysXDebug", false, "Invalid physx_Debug Arguments. Please use physx_Debug 1 to enable, physx_Debug 0 to disable or physx_Debug 2 to enable all configuration settings.");
|
||||
}
|
||||
}
|
||||
|
||||
void SystemComponent::RegisterCommands()
|
||||
{
|
||||
if (m_registered)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (gEnv)
|
||||
{
|
||||
IConsole* console = gEnv->pSystem->GetIConsole();
|
||||
if (console)
|
||||
{
|
||||
console->AddCommand("physx_Debug", CmdTogglePhysXDebugVisualization);
|
||||
console->AddCommand("physx_CullingBox", CmdEnableWireFrame);
|
||||
console->AddCommand("physx_CullingBoxSize", CmdSetPhysXDebugCullingBoxSize);
|
||||
console->AddCommand("physx_PvdConnect", CmdConnectToPvd);
|
||||
console->AddCommand("physx_PvdDisconnect", CmdDisconnectFromPvd);
|
||||
}
|
||||
|
||||
m_registered = true;
|
||||
}
|
||||
}
|
||||
AZ_CONSOLEFREEFUNC(physx_TogglePhysXDebugVisualization, AZ::ConsoleFunctorFlags::DontReplicate, "Toggles physx debug visualization");
|
||||
|
||||
void SystemComponent::ConfigurePhysXVisualizationParameters()
|
||||
{
|
||||
|
||||
@@ -161,9 +161,6 @@ namespace PhysXDebug
|
||||
/// Initialise the PhysX debug draw colors based on defaults.
|
||||
void InitPhysXColorMappings();
|
||||
|
||||
/// Register debug drawing PhysX commands with Open 3D Engine console during game mode.
|
||||
void RegisterCommands();
|
||||
|
||||
/// Draw the culling box being used by the viewport.
|
||||
/// @param cullingBoxAabb culling box Aabb to debug draw.
|
||||
void DrawDebugCullingBox(const AZ::Aabb& cullingBoxAabb);
|
||||
|
||||
Reference in New Issue
Block a user