X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_ragdoll.c;h=3dc7ba6e51d8b2e657b84234f386502787d50642;hb=eb5b5f5fa7d0b8767df69510b6313cb601df66b4;hp=a7e3e7569dae27d7eb413ade9c91a85b96cc2f1f;hpb=1b522daa02f28128498b04def4d60b63e590d1f3;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_ragdoll.c b/player_ragdoll.c index a7e3e75..3dc7ba6 100644 --- a/player_ragdoll.c +++ b/player_ragdoll.c @@ -46,7 +46,7 @@ VG_STATIC void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, v3_zero( v1 ); v1[ major_axis ] = 1.0f; - rb_tangent_basis( v1, tx, ty ); + v3_tangent_basis( v1, tx, ty ); float r = (fabsf(v3_dot(tx,v0)) + fabsf(v3_dot(ty,v0))) * 0.25f, l = fabsf(v0[ major_axis ]); @@ -66,7 +66,7 @@ VG_STATIC void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, } else{ vg_warn( "type: %u\n", bone->collider ); - vg_fatal_exit_loop( "Invalid bone collider type" ); + vg_fatal_error( "Invalid bone collider type" ); } m4x3_invert_affine( rp->collider_mtx, rp->inv_collider_mtx ); @@ -89,7 +89,7 @@ VG_STATIC u32 ragdoll_bone_parent( struct player_ragdoll *rd, if( rd->parts[ j ].bone_id == bone_id ) return j; - vg_fatal_exit_loop( "Referenced parent bone does not have a rigidbody" ); + vg_fatal_error( "Referenced parent bone does not have a rigidbody" ); return 0; } @@ -117,7 +117,7 @@ VG_STATIC void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd, continue; if( rd->part_count > vg_list_size(rd->parts) ) - vg_fatal_exit_loop( "Playermodel has too many colliders" ); + vg_fatal_error( "Playermodel has too many colliders" ); struct ragdoll_part *rp = &rd->parts[ rd->part_count ++ ]; rp->bone_id = i; @@ -269,7 +269,7 @@ VG_STATIC void player_debug_ragdoll(void) */ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) { - world_instance *world = get_active_world(); + world_instance *world = world_current_instance(); int run_sim = 0; ragdoll_frame ++; @@ -295,12 +295,14 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) if( rd->parts[i].obj.type == k_rb_shape_capsule ){ l = rb_capsule__scene( rd->parts[i].obj.rb.to_world, &rd->parts[i].obj.inf.capsule, - NULL, &world->rb_geo.inf.scene, buf ); + NULL, &world->rb_geo.inf.scene, buf, + k_material_flag_ghosts ); } else if( rd->parts[i].obj.type == k_rb_shape_box ){ l = rb_box__scene( rd->parts[i].obj.rb.to_world, rd->parts[i].obj.rb.bbx, - NULL, &world->rb_geo.inf.scene, buf ); + NULL, &world->rb_geo.inf.scene, buf, + k_material_flag_ghosts ); } else continue; @@ -346,14 +348,15 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) } } - for( int j=0; jpart_count; j++ ){ - struct ragdoll_part *pj = &rd->parts[j]; + if( world->water.enabled ){ + for( int j=0; jpart_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->obj.rb, plane, - k_ragdoll_floatyiness, - k_ragdoll_floatydrag ); + if( run_sim ){ + rb_effect_simple_bouyency( &pj->obj.rb, world->water.plane, + k_ragdoll_floatyiness, + k_ragdoll_floatydrag ); + } } } @@ -446,7 +449,7 @@ VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd ) if( stress ){ temp_filter = 20; audio_lock(); - audio_oneshot_3d( &audio_hits[rand()%5], stress->co, 20.0f, 1.0f ); + audio_oneshot_3d( &audio_hits[vg_randu32()%5], stress->co, 20.0f, 1.0f ); audio_unlock(); } }