From 93a12fe388236f28b7451cdedffc339f8c23c304 Mon Sep 17 00:00:00 2001 From: fredzio Date: Fri, 18 Dec 2020 23:47:01 +0100 Subject: [PATCH] Avoid dynamic_cast when possible. --- .../closestnotmerayresultcallback.cpp | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwphysics/closestnotmerayresultcallback.cpp b/apps/openmw/mwphysics/closestnotmerayresultcallback.cpp index f9dc3bdd50..c3104f8603 100644 --- a/apps/openmw/mwphysics/closestnotmerayresultcallback.cpp +++ b/apps/openmw/mwphysics/closestnotmerayresultcallback.cpp @@ -41,15 +41,21 @@ namespace MWPhysics btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace); if (mProjectile) { - auto* holder = static_cast(rayResult.m_collisionObject->getUserPointer()); - if (auto* target = dynamic_cast(holder)) + switch (rayResult.m_collisionObject->getBroadphaseHandle()->m_collisionFilterGroup) { - mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); - } - else if (auto* target = dynamic_cast(holder)) - { - target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld); - mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); + case CollisionType_Actor: + { + auto* target = static_cast(rayResult.m_collisionObject->getUserPointer()); + mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); + break; + } + case CollisionType_Projectile: + { + auto* target = static_cast(rayResult.m_collisionObject->getUserPointer()); + target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld); + mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); + break; + } } }