#include "player.h"
#include "audio.h"
-VG_STATIC void player_ragdoll_init(void)
+static void player_ragdoll_init(void)
{
VG_VAR_F32( k_ragdoll_limit_scale );
VG_VAR_I32( k_ragdoll_div );
VG_VAR_I32( k_ragdoll_debug_constraints );
}
-VG_STATIC void player_init_ragdoll_bone_collider( struct skeleton_bone *bone,
+static void player_init_ragdoll_bone_collider( struct skeleton_bone *bone,
struct ragdoll_part *rp )
{
m4x3_identity( rp->collider_mtx );
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 ]);
/*
* Get parent index in the ragdoll
*/
-VG_STATIC u32 ragdoll_bone_parent( struct player_ragdoll *rd,
+static u32 ragdoll_bone_parent( struct player_ragdoll *rd,
struct player_avatar *av, u32 bone_id )
{
for( u32 j=0; j<rd->part_count; j++ )
/*
* Setup ragdoll colliders
*/
-VG_STATIC void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd,
+static void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd,
struct player_avatar *av )
{
rd->part_count = 0;
/*
* Make avatar copy the ragdoll
*/
-VG_STATIC void copy_ragdoll_pose_to_avatar( struct player_ragdoll *rd,
+static void copy_ragdoll_pose_to_avatar( struct player_ragdoll *rd,
struct player_avatar *av )
{
for( int i=0; i<rd->part_count; i++ ){
/*
* Make the ragdoll copy the player model
*/
-VG_STATIC void copy_avatar_pose_to_ragdoll( struct player_avatar *av,
+static void copy_avatar_pose_to_ragdoll( struct player_avatar *av,
struct player_ragdoll *rd,
v3f velocity )
{
/*
* Draw rigidbody colliders for ragdoll
*/
-VG_STATIC void player_debug_ragdoll(void)
+static void player_debug_ragdoll(void)
{
}
/*
* Ragdoll physics step
*/
-VG_STATIC void player_ragdoll_iter( struct player_ragdoll *rd )
+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 ++;
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;
}
}
- for( int j=0; j<rd->part_count; j++ ){
- struct ragdoll_part *pj = &rd->parts[j];
+ if( world->water.enabled ){
+ for( int j=0; j<rd->part_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 );
+ }
}
}
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();
}
}