1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-04-09 21:44:54 +00:00

Avoid dynamic_cast when possible.

This commit is contained in:
fredzio 2020-12-18 23:47:01 +01:00
parent 58297ffbf4
commit 93a12fe388

View File

@ -41,15 +41,21 @@ namespace MWPhysics
btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace); btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
if (mProjectile) if (mProjectile)
{ {
auto* holder = static_cast<PtrHolder*>(rayResult.m_collisionObject->getUserPointer()); switch (rayResult.m_collisionObject->getBroadphaseHandle()->m_collisionFilterGroup)
if (auto* target = dynamic_cast<Actor*>(holder))
{ {
case CollisionType_Actor:
{
auto* target = static_cast<Actor*>(rayResult.m_collisionObject->getUserPointer());
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld);
break;
} }
else if (auto* target = dynamic_cast<Projectile*>(holder)) case CollisionType_Projectile:
{ {
auto* target = static_cast<Projectile*>(rayResult.m_collisionObject->getUserPointer());
target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld); target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld);
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld);
break;
}
} }
} }