Ejemplo n.º 1
0
void PhysXRigidbody::setFlags(Flag flags)
{
    bool ccdEnabledOld = mInternal->getRigidBodyFlags() & PxRigidBodyFlag::eENABLE_CCD;
    bool ccdEnabledNew = ((UINT32)flags & (UINT32)Flag::CCD) != 0;

    if(ccdEnabledOld != ccdEnabledNew)
    {
        if(ccdEnabledNew)
        {
            if (!gPhysics().hasFlag(PhysicsFlag::CCD_Enable))
                LOGWRN("Enabling CCD on a Rigidbody but CCD is not enabled globally.");
        }

        mInternal->setRigidBodyFlag(PxRigidBodyFlag::eENABLE_CCD, ccdEnabledNew);

        // Enable/disable CCD on shapes so the filter can handle them properly
        UINT32 numShapes = mInternal->getNbShapes();
        PxShape** shapes = (PxShape**)bs_stack_alloc(sizeof(PxShape*) * numShapes);

        mInternal->getShapes(shapes, sizeof(PxShape*) * numShapes);

        for (UINT32 i = 0; i < numShapes; i++)
        {
            Collider* collider = (Collider*)shapes[i]->userData;
            collider->_getInternal()->_setCCD(ccdEnabledNew);
        }
    }

    Rigidbody::setFlags(flags);
}
	bool PhysXCharacterController::filter(const PxController& a, const PxController& b)
	{
		CharacterController* controllerA = (CharacterController*)a.getUserData();
		CharacterController* controllerB = (CharacterController*)b.getUserData();

		bool canCollide = gPhysics().isCollisionEnabled(controllerA->getLayer(), controllerB->getLayer());
		return canCollide;
	}
	PxQueryHitType::Enum PhysXCharacterController::preFilter(const PxFilterData& filterData, const PxShape* shape,
		const PxRigidActor* actor, PxHitFlags& queryFlags)
	{
		PxFilterData colliderFilterData = shape->getSimulationFilterData();
		UINT64 colliderLayer = *(UINT64*)&colliderFilterData.word0;

		bool canCollide = gPhysics().isCollisionEnabled(colliderLayer, getLayer());

		if(canCollide)
			return PxSceneQueryHitType::eBLOCK;

		return PxSceneQueryHitType::eNONE;
	}
Ejemplo n.º 4
0
	void CCollider::onTransformChanged(TransformChangedFlags flags)
	{
		if (!SO()->getActive())
			return;

		if ((flags & TCF_Parent) != 0)
			updateParentRigidbody();

		// Don't update the transform if it's due to Physics update since then we can guarantee it will remain at the same
		// relative transform to its parent
		if (gPhysics()._isUpdateInProgress())
			return;

		if ((flags & (TCF_Parent | TCF_Transform)) != 0)
			updateTransform();
	}
	SPtr<CharacterController> CharacterController::create(const CHAR_CONTROLLER_DESC& desc)
	{
		return gPhysics().createCharacterController(desc);
	}
Ejemplo n.º 6
0
	SPtr<D6Joint> D6Joint::create(const D6_JOINT_DESC& desc)
	{
		return gPhysics().createD6Joint(desc);
	}
Ejemplo n.º 7
0
	bool Collider::rayCast(const Vector3& origin, const Vector3& unitDir, PhysicsQueryHit& hit, float maxDist) const
	{
		return gPhysics()._rayCast(origin, unitDir, *this, hit, maxDist);
	}
Ejemplo n.º 8
0
	bool Collider::rayCast(const Ray& ray, PhysicsQueryHit& hit, float maxDist) const
	{
		return gPhysics()._rayCast(ray.getOrigin(), ray.getDirection(), *this, hit, maxDist);
	}
Ejemplo n.º 9
0
SPtr<SliderJoint> SliderJoint::create(const SLIDER_JOINT_DESC& desc)
{
    return gPhysics().createSliderJoint(desc);
}
Ejemplo n.º 10
0
	SPtr<HingeJoint> HingeJoint::create(const HINGE_JOINT_DESC& desc)
	{
		return gPhysics().createHingeJoint(desc);
	}
Ejemplo n.º 11
0
	SPtr<Rigidbody> Rigidbody::create(const HSceneObject& linkedSO)
	{
		return gPhysics().createRigidbody(linkedSO);
	}
Ejemplo n.º 12
0
SPtr<FixedJoint> FixedJoint::create(const FIXED_JOINT_DESC& desc)
{
    return gPhysics().createFixedJoint(desc);
}