Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool PhysicsManager::SweepRigidbodyTest(physx::PxRigidActor* actor, const Vector3f &direction, float distance, RaycastHit& outHit, int layer)
- {
- if (!actor)
- return false;
- Assert (IsNormalized (direction));
- if (distance == std::numeric_limits<float>::infinity())
- distance = PX_MAX_F32;
- m_SweepShapesTmp.Update(*actor);
- PxSweepHit hit;
- int mask = 0xffffffff;
- if (layer >= 0 && layer < kNumLayers)
- mask = m_LayerCollisionMatrix[layer];
- CastFilter filter(actor, true, mask);
- PxRigidBody& body = static_cast<PxRigidBody&>(*actor); //###TODO: improve
- PxU32 shapeIndex;
- bool nb = PxRigidBodyExt::linearSweepSingle(body, GetDynamicsScene(), (const PxVec3&)direction, distance,
- PxSceneQueryFlag::eDISTANCE|PxSceneQueryFlag::eIMPACT|PxSceneQueryFlag::eUV|PxSceneQueryFlag::eNORMAL/*|PxSceneQueryFlag::eINITIAL_OVERLAP_DISABLE*/,
- hit, shapeIndex,
- PxQueryFilterData(PxSceneQueryFilterFlag::eDYNAMIC|PxSceneQueryFilterFlag::eSTATIC|PxSceneQueryFilterFlag::ePREFILTER|PxSceneQueryFilterFlag::ePOSTFILTER),
- &filter);
- if (nb)
- {
- PxToRaycastHit(hit, distance, outHit);
- return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement