diff --git a/src/Core/Resource/Model/SSurface.cpp b/src/Core/Resource/Model/SSurface.cpp index c9840222..60bb49cb 100644 --- a/src/Core/Resource/Model/SSurface.cpp +++ b/src/Core/Resource/Model/SSurface.cpp @@ -3,7 +3,7 @@ #include "Core/CRayCollisionTester.h" #include -std::pair SSurface::IntersectsRay(const CRay& rkRay, bool AllowBackfaces, float LineThreshold) +std::pair SSurface::IntersectsRay(const CRay& rkRay, bool AllowBackfaces, float LineThreshold) const { bool Hit = false; float HitDist = 0.0f; diff --git a/src/Core/Resource/Model/SSurface.h b/src/Core/Resource/Model/SSurface.h index 135f39a8..5c49e398 100644 --- a/src/Core/Resource/Model/SSurface.h +++ b/src/Core/Resource/Model/SSurface.h @@ -32,7 +32,7 @@ struct SSurface SSurface() = default; - std::pair IntersectsRay(const CRay& rkRay, bool AllowBackfaces = false, float LineThreshold = 0.02f); + std::pair IntersectsRay(const CRay& rkRay, bool AllowBackfaces = false, float LineThreshold = 0.02f) const; }; #endif // SSURFACE_H diff --git a/src/Core/Scene/CModelNode.cpp b/src/Core/Scene/CModelNode.cpp index 633a4ebc..c211cc30 100644 --- a/src/Core/Scene/CModelNode.cpp +++ b/src/Core/Scene/CModelNode.cpp @@ -132,7 +132,7 @@ void CModelNode::RayAABoxIntersectTest(CRayCollisionTester& rTester, const SView return; const CRay& rkRay = rTester.Ray(); - std::pair BoxResult = AABox().IntersectsRay(rkRay); + const std::pair BoxResult = AABox().IntersectsRay(rkRay); if (BoxResult.first) rTester.AddNodeModel(this, mpModel); @@ -144,16 +144,16 @@ SRayIntersection CModelNode::RayNodeIntersectTest(const CRay& rkRay, uint32 Asse Out.pNode = this; Out.ComponentIndex = AssetID; - CRay TransformedRay = rkRay.Transformed(Transform().Inverse()); - FRenderOptions Options = rkViewInfo.pRenderer->RenderOptions(); - std::pair Result = mpModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & ERenderOption::EnableBackfaceCull) == 0)); + const CRay TransformedRay = rkRay.Transformed(Transform().Inverse()); + const FRenderOptions Options = rkViewInfo.pRenderer->RenderOptions(); + const auto [intersects, distance] = mpModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & ERenderOption::EnableBackfaceCull) == 0)); - if (Result.first) + if (intersects) { Out.Hit = true; - CVector3f HitPoint = TransformedRay.PointOnRay(Result.second); - CVector3f WorldHitPoint = Transform() * HitPoint; + const CVector3f HitPoint = TransformedRay.PointOnRay(distance); + const CVector3f WorldHitPoint = Transform() * HitPoint; Out.Distance = Math::Distance(rkRay.Origin(), WorldHitPoint); } else diff --git a/src/Core/Scene/CScriptAttachNode.cpp b/src/Core/Scene/CScriptAttachNode.cpp index 1f788ce5..8b763363 100644 --- a/src/Core/Scene/CScriptAttachNode.cpp +++ b/src/Core/Scene/CScriptAttachNode.cpp @@ -111,7 +111,7 @@ void CScriptAttachNode::RayAABoxIntersectTest(CRayCollisionTester& rTester, cons if (!pModel) return; const CRay& rkRay = rTester.Ray(); - std::pair BoxResult = AABox().IntersectsRay(rkRay); + const std::pair BoxResult = AABox().IntersectsRay(rkRay); if (BoxResult.first) rTester.AddNodeModel(this, pModel); @@ -119,20 +119,20 @@ void CScriptAttachNode::RayAABoxIntersectTest(CRayCollisionTester& rTester, cons SRayIntersection CScriptAttachNode::RayNodeIntersectTest(const CRay& rkRay, uint32 AssetID, const SViewInfo& rkViewInfo) { - FRenderOptions Options = rkViewInfo.pRenderer->RenderOptions(); + const FRenderOptions Options = rkViewInfo.pRenderer->RenderOptions(); SRayIntersection Out; Out.pNode = mpParent; Out.ComponentIndex = AssetID; - CRay TransformedRay = rkRay.Transformed(Transform().Inverse()); - std::pair Result = Model()->GetSurface(AssetID)->IntersectsRay(TransformedRay, Options.HasFlag(ERenderOption::EnableBackfaceCull)); + const CRay TransformedRay = rkRay.Transformed(Transform().Inverse()); + const auto [intersects, distance] = Model()->GetSurface(AssetID)->IntersectsRay(TransformedRay, Options.HasFlag(ERenderOption::EnableBackfaceCull)); - if (Result.first) + if (intersects) { Out.Hit = true; - CVector3f HitPoint = TransformedRay.PointOnRay(Result.second); - CVector3f WorldHitPoint = Transform() * HitPoint; + const CVector3f HitPoint = TransformedRay.PointOnRay(distance); + const CVector3f WorldHitPoint = Transform() * HitPoint; Out.Distance = rkRay.Origin().Distance(WorldHitPoint); } else diff --git a/src/Core/ScriptExtra/CDoorExtra.cpp b/src/Core/ScriptExtra/CDoorExtra.cpp index 62bc67b7..3cb1770b 100644 --- a/src/Core/ScriptExtra/CDoorExtra.cpp +++ b/src/Core/ScriptExtra/CDoorExtra.cpp @@ -120,12 +120,12 @@ SRayIntersection CDoorExtra::RayNodeIntersectTest(const CRay& rkRay, uint32 Asse Out.ComponentIndex = AssetID; const CRay TransformedRay = rkRay.Transformed(Transform().Inverse()); - const std::pair Result = mpShieldModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & ERenderOption::EnableBackfaceCull) == 0)); + const auto [intersects, distance] = mpShieldModel->GetSurface(AssetID)->IntersectsRay(TransformedRay, ((Options & ERenderOption::EnableBackfaceCull) == 0)); - if (Result.first) + if (intersects) { Out.Hit = true; - const CVector3f HitPoint = TransformedRay.PointOnRay(Result.second); + const CVector3f HitPoint = TransformedRay.PointOnRay(distance); const CVector3f WorldHitPoint = Transform() * HitPoint; Out.Distance = rkRay.Origin().Distance(WorldHitPoint); } diff --git a/src/Editor/CGizmo.cpp b/src/Editor/CGizmo.cpp index 784bbe7f..58917e8c 100644 --- a/src/Editor/CGizmo.cpp +++ b/src/Editor/CGizmo.cpp @@ -163,18 +163,18 @@ bool CGizmo::CheckSelectedAxes(const CRay& rkRay) if (ModelBoxCheck) { bool Hit = false; - float Dist; + float Dist = 0.0f; for (size_t iSurf = 0; iSurf < pModel->GetSurfaceCount(); iSurf++) { // Skip surface/box check - since we use lines the boxes might be too small - SSurface *pSurf = pModel->GetSurface(iSurf); - std::pair SurfCheck = pSurf->IntersectsRay(rPartRay, false, 0.05f); + const SSurface* pSurf = pModel->GetSurface(iSurf); + const auto [intersects, distance] = pSurf->IntersectsRay(rPartRay, false, 0.05f); - if (SurfCheck.first) + if (intersects) { - if (!Hit || SurfCheck.second < Dist) - Dist = SurfCheck.second; + if (!Hit || distance < Dist) + Dist = distance; Hit = true; }