X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_ragdoll.h;h=2bb0ae4220b1f7b3317f8b8dcbb490bdd58cdf96;hb=343d594b37f42a94f220a5089c9db36da9da3ab4;hp=e4a368ebfad8ed50bc60350057aa359eba502b9d;hpb=56f320d8ce6e8997370ec8e02fe50ca2d07b67f0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_ragdoll.h b/player_ragdoll.h index e4a368e..2bb0ae4 100644 --- a/player_ragdoll.h +++ b/player_ragdoll.h @@ -282,7 +282,24 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) rb_solver_reset(); for( int i=0; ipart_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; jparts[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; jpart_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; kparts[i].rb; + buf[k].rbb = &rd->parts[j].rb; + } + + rb_contact_count += l; + } + } } }