X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=player_ragdoll.h;h=2bb0ae4220b1f7b3317f8b8dcbb490bdd58cdf96;hb=26bde92c7084971f13352b37fd4d1ea528b45dcf;hp=db01ecec75fbfe435ad3284ccab1d4f42a3ce785;hpb=07d0834b13ecf5de312cf3578e8aca8f106f5ef1;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_ragdoll.h b/player_ragdoll.h index db01ece..2bb0ae4 100644 --- a/player_ragdoll.h +++ b/player_ragdoll.h @@ -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; 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 @@ -299,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; + } + } } }