From 7d7d40ba8e6402895a61259f00485010ecc7f3ab Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 24 Nov 2022 12:02:08 +0800 Subject: [PATCH] Debug draw is always enabled. --- .../System/SHPhysicsDebugDrawSystem.cpp | 45 +++++++++++++++---- .../src/Physics/System/SHPhysicsSystem.cpp | 14 +----- .../System/SHPhysicsSystemRoutines.cpp | 6 +-- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp index 3c80883c..1ca7ae39 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsDebugDrawSystem.cpp @@ -120,21 +120,25 @@ namespace SHADE } rp3d::DebugRenderer* rp3dRenderer = nullptr; - #ifdef SHEDITOR - const auto* EDITOR = SHSystemManager::GetSystem(); - if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) - { + if (system->physicsSystem->worldState.world) rp3dRenderer = &system->physicsSystem->worldState.world->getDebugRenderer(); - rp3dRenderer->setIsDebugItemDisplayed(rp3d::DebugRenderer::DebugItem::CONTACT_POINT, false); - rp3dRenderer->setIsDebugItemDisplayed(rp3d::DebugRenderer::DebugItem::CONTACT_NORMAL, false); - } - #endif for (int i = 0; i < SHUtilities::ConvertEnum(DebugDrawFlags::NUM_FLAGS); ++i) { const bool DRAW = (system->debugDrawFlags & (1U << i)) > 0; if (DRAW) + { drawFunctions[i](debugDrawSystem, rp3dRenderer); + } + else + { + if (rp3dRenderer && (i == 3 || i == 4)) + { + rp3dRenderer->setIsDebugItemDisplayed(reactphysics3d::DebugRenderer::DebugItem::CONTACT_POINT, false); + rp3dRenderer->setIsDebugItemDisplayed(reactphysics3d::DebugRenderer::DebugItem::CONTACT_NORMAL, false); + } + } + } // Automatically clear the container of raycasts despite debug drawing state @@ -180,6 +184,7 @@ namespace SHADE void SHPhysicsDebugDrawSystem::drawContactPoints(SHDebugDrawSystem* debugRenderer, rp3d::DebugRenderer* rp3dRenderer) noexcept { #ifdef SHEDITOR + const auto* EDITOR = SHSystemManager::GetSystem(); if (EDITOR && EDITOR->editorState != SHEditor::State::STOP) { @@ -192,6 +197,18 @@ namespace SHADE for (int i = 0; i < NUM_TRIS; ++i) debugRenderer->DrawTri(SHColour::RED, TRI_ARRAY[i].point1, TRI_ARRAY[i].point2, TRI_ARRAY[i].point3); } + + #else + + rp3dRenderer->setIsDebugItemDisplayed(rp3d::DebugRenderer::DebugItem::CONTACT_POINT, true); + const int NUM_TRIS = static_cast(rp3dRenderer->getNbTriangles()); + if (NUM_TRIS == 0) + return; + + const auto& TRI_ARRAY = rp3dRenderer->getTrianglesArray(); + for (int i = 0; i < NUM_TRIS; ++i) + debugRenderer->DrawTri(SHColour::RED, TRI_ARRAY[i].point1, TRI_ARRAY[i].point2, TRI_ARRAY[i].point3); + #endif } @@ -210,6 +227,18 @@ namespace SHADE for (int i = 0; i < NUM_LINES; ++i) debugRenderer->DrawLine(SHColour::RED, LINE_ARRAY[i].point1, LINE_ARRAY[i].point2); } + + #else + + rp3dRenderer->setIsDebugItemDisplayed(rp3d::DebugRenderer::DebugItem::CONTACT_NORMAL, true); + const int NUM_LINES = static_cast(rp3dRenderer->getNbLines()); + if (NUM_LINES == 0) + return; + + const auto& LINE_ARRAY = rp3dRenderer->getLinesArray(); + for (int i = 0; i < NUM_LINES; ++i) + debugRenderer->DrawLine(SHColour::RED, LINE_ARRAY[i].point1, LINE_ARRAY[i].point2); + #endif } diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp index a9e5a9e9..dd2cc091 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystem.cpp @@ -163,8 +163,6 @@ namespace SHADE // Destroy an existing world if (worldState.world != nullptr) { - - objectManager.RemoveAllObjects(); objectManager.SetWorld(nullptr); @@ -174,12 +172,8 @@ namespace SHADE worldState.DestroyWorld(factory); } - worldState.CreateWorld(factory); - #ifdef _PUBLISH - worldState.world->setIsDebugRenderingEnabled(false); - #else - worldState.world->setIsDebugRenderingEnabled(true); - #endif + worldState.CreateWorld(factory); + worldState.world->setIsDebugRenderingEnabled(true); // Link Collision Listener & Raycaster collisionListener.BindToWorld(worldState.world); @@ -444,11 +438,7 @@ namespace SHADE return onPlayEvent->handle; worldState.CreateWorld(factory); - #ifdef _PUBLISH - worldState.world->setIsDebugRenderingEnabled(false); - #else worldState.world->setIsDebugRenderingEnabled(true); - #endif // Link Collision Listener & Raycaster collisionListener.BindToWorld(worldState.world); diff --git a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp index be1d968e..d133f562 100644 --- a/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp +++ b/SHADE_Engine/src/Physics/System/SHPhysicsSystemRoutines.cpp @@ -334,10 +334,6 @@ namespace SHADE if (physicsObject.GetRigidBody()->isActive()) physicsObject.prevTransform = CURRENT_TF; - // Skip sleeping objects - if (physicsObject.GetRigidBody()->isSleeping()) - return; - // Sync with rigid bodies if (rigidBodyComponent && SHSceneManager::CheckNodeAndComponentsActive(physicsObject.entityID)) { @@ -369,7 +365,7 @@ namespace SHADE colliderComponent->orientation = CURRENT_TF.getOrientation(); } - // Set transform for rendering + // Set transform for rendering if (transformComponent) { transformComponent->SetWorldPosition(renderPos);