소스 검색

Merge pull request #12724 from AndreaCatania/bullet

Bullet: Fix collision exceptions
Rémi Verschelde 7 년 전
부모
커밋
706431b061
2개의 변경된 파일5개의 추가작업 그리고 0개의 파일을 삭제
  1. 4 0
      modules/bullet/collision_object_bullet.cpp
  2. 1 0
      modules/bullet/space_bullet.h

+ 4 - 0
modules/bullet/collision_object_bullet.cpp

@@ -93,11 +93,15 @@ void CollisionObjectBullet::setupBulletCollisionObject(btCollisionObject *p_coll
 void CollisionObjectBullet::add_collision_exception(const CollisionObjectBullet *p_ignoreCollisionObject) {
 	exceptions.insert(p_ignoreCollisionObject->get_self());
 	bt_collision_object->setIgnoreCollisionCheck(p_ignoreCollisionObject->bt_collision_object, true);
+	if (space)
+		space->get_broadphase()->getOverlappingPairCache()->cleanProxyFromPairs(bt_collision_object->getBroadphaseHandle(), space->get_dispatcher());
 }
 
 void CollisionObjectBullet::remove_collision_exception(const CollisionObjectBullet *p_ignoreCollisionObject) {
 	exceptions.erase(p_ignoreCollisionObject->get_self());
 	bt_collision_object->setIgnoreCollisionCheck(p_ignoreCollisionObject->bt_collision_object, false);
+	if (space)
+		space->get_broadphase()->getOverlappingPairCache()->cleanProxyFromPairs(bt_collision_object->getBroadphaseHandle(), space->get_dispatcher());
 }
 
 bool CollisionObjectBullet::has_collision_exception(const CollisionObjectBullet *p_otherCollisionObject) const {

+ 1 - 0
modules/bullet/space_bullet.h

@@ -109,6 +109,7 @@ public:
 	void flush_queries();
 	void step(real_t p_delta_time);
 
+	_FORCE_INLINE_ btBroadphaseInterface *get_broadphase() { return broadphase; }
 	_FORCE_INLINE_ btCollisionDispatcher *get_dispatcher() { return dispatcher; }
 	_FORCE_INLINE_ btSoftBodyWorldInfo *get_soft_body_world_info() { return soft_body_world_info; }
 	_FORCE_INLINE_ bool is_using_soft_world() { return soft_body_world_info; }