1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-01 00:45:34 +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))
{ {
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); case CollisionType_Actor:
} {
else if (auto* target = dynamic_cast<Projectile*>(holder)) auto* target = static_cast<Actor*>(rayResult.m_collisionObject->getUserPointer());
{ mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld);
target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld); break;
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld); }
case CollisionType_Projectile:
{
auto* target = static_cast<Projectile*>(rayResult.m_collisionObject->getUserPointer());
target->hit(mProjectile->getPtr(), m_hitPointWorld, m_hitNormalWorld);
mProjectile->hit(target->getPtr(), m_hitPointWorld, m_hitNormalWorld);
break;
}
} }
} }