X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_ragdoll.h;h=2bb0ae4220b1f7b3317f8b8dcbb490bdd58cdf96;hb=343d594b37f42a94f220a5089c9db36da9da3ab4;hp=f1f62218d5de6adf9429df26e18bf7b701eb151d;hpb=9edcce70acf6cf8fbb2449bf54d797e212ebb2c2;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_ragdoll.h b/player_ragdoll.h index f1f6221..2bb0ae4 100644 --- a/player_ragdoll.h +++ b/player_ragdoll.h @@ -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; 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 @@ -290,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; + } + } } }