removed deprecated spam: rigidbody.h needs cleaning!
[carveJwlIkooP6JGAAIwe30JlM.git] / player_ragdoll.h
index f1f62218d5de6adf9429df26e18bf7b701eb151d..2bb0ae4220b1f7b3317f8b8dcbb490bdd58cdf96 100644 (file)
@@ -269,6 +269,8 @@ VG_STATIC void player_debug_ragdoll(void)
  */
 VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
 {
+   world_instance *world = get_active_world();
+
    int run_sim = 0;
    ragdoll_frame ++;
 
@@ -280,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
@@ -290,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;
+            }
+         }
       }
    }