diff --git a/Sources/Overload/OvEditor/src/OvEditor/Rendering/DebugSceneRenderer.cpp b/Sources/Overload/OvEditor/src/OvEditor/Rendering/DebugSceneRenderer.cpp index f21778fde..a7fcf01bc 100644 --- a/Sources/Overload/OvEditor/src/OvEditor/Rendering/DebugSceneRenderer.cpp +++ b/Sources/Overload/OvEditor/src/OvEditor/Rendering/DebugSceneRenderer.cpp @@ -43,10 +43,10 @@ const OvMaths::FVector3 kLightVolumeColor = { 1.0f, 1.0f, 0.0f }; const OvMaths::FVector3 kColliderColor = { 0.0f, 1.0f, 0.0f }; const OvMaths::FVector3 kFrustumColor = { 1.0f, 1.0f, 1.0f }; -const OvMaths::FVector4 kDefaultOutlineColor{ 1.0f, 0.7f, 0.0f, 1.0f }; -const OvMaths::FVector4 kSelectedOutlineColor{ 1.0f, 1.0f, 0.0f, 1.0f }; +const OvMaths::FVector4 kHoveredOutlineColor{ 1.0f, 1.0f, 0.0f, 1.0f }; +const OvMaths::FVector4 kSelectedOutlineColor{ 1.0f, 0.7f, 0.0f, 1.0f }; -constexpr float kDefaultOutlineWidth = 2.5f; +constexpr float kHoveredOutlineWidth = 2.5f; constexpr float kSelectedOutlineWidth = 5.0f; OvMaths::FMatrix4 CalculateCameraModelMatrix(OvCore::ECS::Actor& p_actor) @@ -174,8 +174,16 @@ class DebugActorRenderPass : public OvRendering::Core::ARenderPass if (debugSceneDescriptor.selectedActor) { auto& selectedActor = debugSceneDescriptor.selectedActor.value(); + const bool isActorHovered = debugSceneDescriptor.highlightedActor && debugSceneDescriptor.highlightedActor->GetID() == selectedActor.GetID(); + DrawActorDebugElements(selectedActor); - m_renderer.GetFeature().DrawOutline(selectedActor, kSelectedOutlineColor, kSelectedOutlineWidth); + m_renderer.GetFeature().DrawOutline( + selectedActor, + isActorHovered ? + kHoveredOutlineColor : + kSelectedOutlineColor, + kSelectedOutlineWidth + ); m_renderer.Clear(false, true, false, OvMaths::FVector3::Zero); m_renderer.GetFeature().DrawGizmo( selectedActor.transform.GetWorldPosition(), @@ -185,6 +193,17 @@ class DebugActorRenderPass : public OvRendering::Core::ARenderPass debugSceneDescriptor.highlightedGizmoDirection ); } + + if (debugSceneDescriptor.highlightedActor) + { + auto& highlightedActor = debugSceneDescriptor.highlightedActor.value(); + + // Render the outline only if the actor is not already selected (as its outline render should have been handled already). + if (!debugSceneDescriptor.selectedActor || highlightedActor.GetID() != debugSceneDescriptor.selectedActor->GetID()) + { + m_renderer.GetFeature().DrawOutline(highlightedActor, kHoveredOutlineColor, kHoveredOutlineWidth); + } + } } void DrawActorDebugElements(OvCore::ECS::Actor& p_actor)