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:
parent
58297ffbf4
commit
93a12fe388
1 changed files with 14 additions and 8 deletions
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue