- for( int i=0; i<mdl->ragdoll_count-1; i ++ )
- {
- for( int j=i+1; j<mdl->ragdoll_count; j ++ )
- {
- if( mdl->ragdoll[j].parent != i )
- rb_collide( &mdl->ragdoll[i].rb, &mdl->ragdoll[j].rb );
+ for( int i=0; i<rd->part_count-1; i ++ ){
+ for( int j=i+1; j<rd->part_count; j ++ ){
+ if( rd->parts[j].parent != i ){
+ if( !rb_global_has_space() )
+ break;
+
+ if( rd->parts[j].rb.type != k_rb_shape_capsule )
+ continue;
+
+ if( rd->parts[i].rb.type != k_rb_shape_capsule )
+ continue;
+
+ 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;
+ }
+ }
+ }
+
+ for( int j=0; j<rd->part_count; j++ ){
+ struct ragdoll_part *pj = &rd->parts[j];
+
+ if( run_sim ){
+ v4f plane = {0.0f,1.0f,0.0f,0.0f};
+ rb_effect_simple_bouyency( &pj->rb, plane, k_ragdoll_floatyiness,
+ k_ragdoll_floatydrag );