removed deprecated spam: rigidbody.h needs cleaning!
[carveJwlIkooP6JGAAIwe30JlM.git] / player_ragdoll.h
index e4a368ebfad8ed50bc60350057aa359eba502b9d..2bb0ae4220b1f7b3317f8b8dcbb490bdd58cdf96 100644 (file)
@@ -282,7 +282,24 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
 
    rb_solver_reset();
    for( int i=0; i<rd->part_count; i ++ )
-      rb_collide( &rd->parts[i].rb, &world->rb_geo );
+   {
+      if( rb_global_has_space() )
+      {
+         rb_ct *buf = rb_global_buffer();
+
+         int l = rb_capsule__scene(  rd->parts[i].rb.to_world,
+                                    &rd->parts[i].rb.inf.capsule,
+                                     NULL, &world->rb_geo.inf.scene, buf );
+
+         for( int j=0; j<l; j++ )
+         {
+            buf[j].rba = &rd->parts[i].rb;
+            buf[j].rbb = &world->rb_geo;
+         }
+
+         rb_contact_count += l;
+      }
+   }
 
    /* 
     * COLLISION DETECTION
@@ -292,7 +309,26 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
       for( int j=i+1; j<rd->part_count; j ++ )
       {
          if( rd->parts[j].parent != i )
-            rb_collide( &rd->parts[i].rb, &rd->parts[j].rb );
+         {
+            if( rb_global_has_space() )
+            {
+               rb_ct *buf = rb_global_buffer();
+
+               int l = rb_capsule__capsule( rd->parts[i].rb.to_world,
+                                            &rd->parts[i].rb.inf.capsule,
+                                            rd->parts[j].rb.to_world,
+                                            &rd->parts[j].rb.inf.capsule,
+                                            buf );
+
+               for( int k=0; k<l; k++ )
+               {
+                  buf[k].rba = &rd->parts[i].rb;
+                  buf[k].rbb = &rd->parts[j].rb;
+               }
+
+               rb_contact_count += l;
+            }
+         }
       }
    }