Bläddra i källkod

Suppress colliding shape pairs when filtered out

Daniele Bartolini 12 år sedan
förälder
incheckning
7c58c37cac
2 ändrade filer med 7 tillägg och 42 borttagningar
  1. 7 37
      engine/physics/PhysicsWorld.cpp
  2. 0 5
      engine/physics/PhysicsWorld.h

+ 7 - 37
engine/physics/PhysicsWorld.cpp

@@ -158,20 +158,18 @@ namespace physics_system
 			return PxFilterFlag::eDEFAULT;
 		}
 
-		// generate contacts for all that were not filtered above
-		pairFlags = PxPairFlag::eCONTACT_DEFAULT;
-
 		// trigger the contact callback for pairs (A,B) where 
 		// the filtermask of A contains the ID of B and vice versa.
-		//if((filterData0.word0 & filterData1.word1) && (filterData1.word0 & filterData0.word1))
+		if((filterData0.word0 & filterData1.word1) && (filterData1.word0 & filterData0.word1))
 		{
-			pairFlags |= PxPairFlag::eNOTIFY_TOUCH_FOUND
-						| PxPairFlag::eNOTIFY_TOUCH_LOST
-						| PxPairFlag::eNOTIFY_CONTACT_POINTS;
+			pairFlags |= PxPairFlag::eCONTACT_DEFAULT
+			 		  | PxPairFlag::eNOTIFY_TOUCH_FOUND
+					  | PxPairFlag::eNOTIFY_TOUCH_LOST
+					  | PxPairFlag::eNOTIFY_CONTACT_POINTS;
 			return PxFilterFlag::eDEFAULT;
 		}
 
-		return PxFilterFlag::eDEFAULT;
+		return PxFilterFlag::eSUPPRESS;
 	}
 
 	// Global PhysX objects
@@ -328,20 +326,6 @@ void PhysicsWorld::destroy_raycast(RaycastId id)
 	m_raycasts.destroy(id);
 }
 
-//-----------------------------------------------------------------------------
-Actor* PhysicsWorld::lookup_actor(StringId32 name)
-{
-	for (uint32_t i = 0; i < m_actors.size(); i++)
-	{
-		Actor* actor = m_actors[i];
-
-		if (actor->name() == name)
-		{
-			return actor;
-		}
-	}
-}
-
 //-----------------------------------------------------------------------------
 Actor* PhysicsWorld::lookup_actor(ActorId id)
 {
@@ -376,20 +360,6 @@ void PhysicsWorld::set_gravity(const Vector3& g)
 	m_scene->setGravity(PxVec3(g.x, g.y, g.z));
 }
 
-//-----------------------------------------------------------------------------
-void PhysicsWorld::set_kinematic(ActorId id)
-{
-	Actor* actor = lookup_actor(id);
-	actor->set_kinematic();
-}
-
-//-----------------------------------------------------------------------------
-void PhysicsWorld::clear_kinematic(ActorId id)
-{
-	Actor* actor = lookup_actor(id);
-	actor->clear_kinematic();
-}
-
 //-----------------------------------------------------------------------------
 void PhysicsWorld::overlap_test(CollisionType::Enum filter, ShapeType::Enum type,
 								const Vector3& pos, const Quaternion& rot, const Vector3& size, Array<Actor*>& actors)
@@ -398,7 +368,7 @@ void PhysicsWorld::overlap_test(CollisionType::Enum filter, ShapeType::Enum type
 
 	switch(type)
 	{
-		case ShapeType::SPHERE:	
+		case ShapeType::SPHERE:
 		{
 			PxSphereGeometry geometry(size.x);
 			m_scene->overlap(geometry, transform, m_buffer);

+ 0 - 5
engine/physics/PhysicsWorld.h

@@ -99,20 +99,15 @@ public:
 	RaycastId create_raycast(CollisionMode::Enum mode, CollisionType::Enum filter);
 	void destroy_raycast(RaycastId id);
 
-
 	Vector3 gravity() const;
 	void set_gravity(const Vector3& g);
 
-	void set_kinematic(ActorId id);
-	void clear_kinematic(ActorId id);
-
 	/// Finds all actors in the physics world that are in a particular shape (supported: spheres, capsules and boxes)
 	void overlap_test(CollisionType::Enum filter, ShapeType::Enum type,
 						const Vector3& pos, const Quaternion& rot, const Vector3& size, Array<Actor*>& actors);
 
 	void update(float dt);
 
-	Actor* lookup_actor(StringId32 name);
 	Actor* lookup_actor(ActorId id);
 	Controller* lookup_controller(ControllerId id);
 	Raycast* lookup_raycast(RaycastId id);