X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_ragdoll.c;h=84908ffee0fe946a4dca9d249673abbaadfcc463;hb=5f6a4f9df6c8accc89f1920bfe9ace3cbac4c4b6;hp=413f9a8d137e73b58466475b7d4713bfd681bc6f;hpb=a109f126d8adab622e38fbcc2d4281e75255246a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_ragdoll.c b/player_ragdoll.c index 413f9a8..84908ff 100644 --- a/player_ragdoll.c +++ b/player_ragdoll.c @@ -5,8 +5,23 @@ #include "scene_rigidbody.h" #include "player.h" +#include "player_dead.h" #include "audio.h" +static float k_ragdoll_floatyiness = 20.0f, + k_ragdoll_floatydrag = 1.0f, + k_ragdoll_limit_scale = 1.0f, + k_ragdoll_spring = 127.0f, + k_ragdoll_dampening = 15.0f, + k_ragdoll_correction = 0.5f, + k_ragdoll_angular_drag = 0.08f, + k_ragdoll_active_threshold = 5.0f; + +static int k_ragdoll_div = 1, + ragdoll_frame = 0, + k_ragdoll_debug_collider = 1, + k_ragdoll_debug_constraints = 0; + static int dev_ragdoll_saveload(int argc, const char *argv[]){ if( argc != 2 ){ vg_info( "Usage: ragdoll load/save filepath\n" ); @@ -42,7 +57,8 @@ static int dev_ragdoll_saveload(int argc, const char *argv[]){ return 0; } -static void player_ragdoll_init(void){ +void player_ragdoll_init(void) +{ VG_VAR_F32( k_ragdoll_active_threshold ); VG_VAR_F32( k_ragdoll_angular_drag ); VG_VAR_F32( k_ragdoll_correction ); @@ -55,8 +71,8 @@ static void player_ragdoll_init(void){ vg_console_reg_cmd( "ragdoll", dev_ragdoll_saveload, NULL ); } -static void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, - struct ragdoll_part *rp ) +void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, + struct ragdoll_part *rp ) { f32 k_density = 8.0f, k_inertia_scale = 2.0f; @@ -128,7 +144,8 @@ static void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, /* * Get parent index in the ragdoll */ -static u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id ){ +u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id ) +{ for( u32 j=0; jpart_count; j++ ) if( rd->parts[ j ].bone_id == bone_id ) return j; @@ -140,8 +157,9 @@ static u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id ){ /* * Setup ragdoll colliders from skeleton */ -static void setup_ragdoll_from_skeleton( struct skeleton *sk, - struct player_ragdoll *rd ){ +void setup_ragdoll_from_skeleton( struct skeleton *sk, + struct player_ragdoll *rd ) +{ rd->part_count = 0; if( !sk->collider_count ) @@ -236,7 +254,8 @@ static void setup_ragdoll_from_skeleton( struct skeleton *sk, /* * Make avatar copy the ragdoll */ -static void copy_ragdoll_pose_to_localplayer( struct player_ragdoll *rd ){ +void copy_ragdoll_pose_to_localplayer( struct player_ragdoll *rd ) +{ for( int i=0; ipart_count; i++ ){ struct ragdoll_part *part = &rd->parts[i]; @@ -280,8 +299,9 @@ static void copy_ragdoll_pose_to_localplayer( struct player_ragdoll *rd ){ /* * Make the ragdoll copy the player model */ -static void copy_localplayer_to_ragdoll( struct player_ragdoll *rd, - enum player_die_type type ){ +void copy_localplayer_to_ragdoll( struct player_ragdoll *rd, + enum player_die_type type ) +{ v3f centroid; v3f *bone_mtx = localplayer.final_mtx[localplayer.id_hip]; @@ -328,7 +348,8 @@ static void copy_localplayer_to_ragdoll( struct player_ragdoll *rd, /* * Ragdoll physics step */ -static void player_ragdoll_iter( struct player_ragdoll *rd ){ +void player_ragdoll_iter( struct player_ragdoll *rd ) +{ world_instance *world = world_current_instance(); int run_sim = 0;