*/
VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
{
+ world_instance *world = get_active_world();
+
int run_sim = 0;
ragdoll_frame ++;
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
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;
+ }
+ }
}
}