bugs/map edits
[carveJwlIkooP6JGAAIwe30JlM.git] / player_ragdoll.h
index db01ecec75fbfe435ad3284ccab1d4f42a3ce785..2bb0ae4220b1f7b3317f8b8dcbb490bdd58cdf96 100644 (file)
@@ -8,15 +8,6 @@
 #include "player_model.h"
 #include "world.h"
 
-VG_STATIC float k_ragdoll_floatyiness = 20.0f,
-                k_ragdoll_floatydrag  = 1.0f,
-                k_ragdoll_limit_scale = 1.0f;
-
-VG_STATIC int   k_ragdoll_div = 1,
-                ragdoll_frame = 0,
-                k_ragdoll_debug_collider = 1,
-                k_ragdoll_debug_constraints = 0;
-
 struct player_ragdoll
 {
    struct ragdoll_part
@@ -278,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 ++;
 
@@ -289,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
@@ -299,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;
+            }
+         }
       }
    }