X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_skate.c;h=41e03a40b46e836e30d2543279f9753c624a86b6;hb=4eb81766e4e7c54599b057ebf57b7fab01cd0726;hp=6ddb4ae836141b30fb5eb825023e42ab7cacc9f6;hpb=c1e54530e1b29e131aad80e242faaf0c0cfee0b0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_skate.c b/player_skate.c index 6ddb4ae..41e03a4 100644 --- a/player_skate.c +++ b/player_skate.c @@ -974,11 +974,9 @@ static void skate_apply_jump_model(void){ v3_muladds( localplayer.rb.v, jumpdir, force, localplayer.rb.v ); state->jump_charge = 0.0f; state->jump_time = vg.time; - - audio_lock(); - audio_oneshot_3d( &audio_jumps[vg_randu32()%2], - localplayer.rb.co,40.0f,1.0f); - audio_unlock(); + player__networked_sfx( k_player_subsystem_skate, 32, + k_player_skate_soundeffect_jump, + localplayer.rb.co, 1.0f ); } } @@ -1495,8 +1493,12 @@ static void skate_adjust_up_direction(void){ 8.0f * player_skate.substep_delta, state->up_dir ); } else{ - v3_lerp( state->up_dir, localplayer.basis[1], - 12.0f * player_skate.substep_delta, state->up_dir ); + v3f avg; + v3_add( localplayer.rb.to_world[1], localplayer.basis[1], avg ); + v3_normalize( avg ); + + v3_lerp( state->up_dir, avg, + 6.0f * player_skate.substep_delta, state->up_dir ); } } @@ -2039,7 +2041,11 @@ static void player__skate_update(void){ if( world->water.enabled ){ if( localplayer.rb.co[1]+0.25f < world->water.height ){ - audio_oneshot_3d( &audio_splash, localplayer.rb.co, 40.0f, 1.0f ); +#if 0 + player__networked_sfx( k_player_subsystem_walk, 32, + k_player_walk_soundeffect_splash, + localplayer.rb.co, 1.0f ); +#endif player__skate_kill_audio(); player__dead_transition(); return; @@ -2160,15 +2166,15 @@ static void player__skate_update(void){ } if( (prev_contacts[0]+prev_contacts[1] == 1) && (contact_count == 2) ){ - audio_lock(); for( int i=0; i<2; i++ ){ if( !prev_contacts[i] ){ v3f co; m4x3_mulv( localplayer.rb.to_world, wheels[i].pos, co ); - audio_oneshot_3d( &audio_taps[vg_randu32()%4], co, 40.0f, 0.75f ); + player__networked_sfx( k_player_subsystem_skate, 32, + k_player_skate_soundeffect_tap, + localplayer.rb.co, 0.75f ); } } - audio_unlock(); } if( contact_count ){ @@ -2558,28 +2564,30 @@ begin_collision:; if( stick_frames > 5 ) stick_frames = 5; if( stick_frames == 4 ){ - audio_lock(); - if( state->activity == k_skate_activity_ground ){ if( (fabsf(state->slip) > 0.75f) ){ - audio_oneshot_3d( &audio_lands[vg_randu32()%2+3], localplayer.rb.co, - 40.0f, 1.0f ); + player__networked_sfx( k_player_subsystem_skate, 128, + k_player_skate_soundeffect_land_bad, + localplayer.rb.co, 0.6f ); } else{ - audio_oneshot_3d( &audio_lands[vg_randu32()%3], localplayer.rb.co, - 40.0f, 1.0f ); + player__networked_sfx( k_player_subsystem_skate, 128, + k_player_skate_soundeffect_land_good, + localplayer.rb.co, 1.0f ); } } else if( player_skate.surface == k_surface_prop_metal ){ - audio_oneshot_3d( &audio_board[3], localplayer.rb.co, 40.0f, 1.0f ); + player__networked_sfx( k_player_subsystem_skate, 128, + k_player_skate_soundeffect_grind_metal, + localplayer.rb.co, 1.0f ); } else{ - audio_oneshot_3d( &audio_board[8], localplayer.rb.co, 40.0f, 1.0f ); + player__networked_sfx( k_player_subsystem_skate, 128, + k_player_skate_soundeffect_grind_wood, + localplayer.rb.co, 1.0f ); } - - audio_unlock(); } else if( stick_frames == 0 ){ - + /* TODO: EXIT SOUNDS */ } } @@ -3190,7 +3198,7 @@ static void player__skate_reset( ent_spawn *rp ){ static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){ struct player_skate_animator *animator = data; - bitpack_bytes( ctx, sizeof(animator->root_co), animator->root_co ); + bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co ); bitpack_qquat( ctx, animator->root_q ); bitpack_qv3f( ctx, 8, -1.0f, 1.0f, animator->offset ); @@ -3236,4 +3244,29 @@ static void player__skate_animator_exchange( bitpack_ctx *ctx, void *data ){ bitpack_qf32( ctx, 16, 0.0f, 120.0f, &animator->jump_time ); } +static void player__skate_sfx_oneshot( u8 id, v3f pos, f32 volume ){ + audio_lock(); + + if( id == k_player_skate_soundeffect_jump ){ + audio_oneshot_3d( &audio_jumps[vg_randu32()%2], pos, 40.0f, volume ); + } + else if( id == k_player_skate_soundeffect_tap ){ + audio_oneshot_3d( &audio_taps[vg_randu32()%4], pos, 40.0f, volume ); + } + else if( id == k_player_skate_soundeffect_land_good ){ + audio_oneshot_3d( &audio_lands[vg_randu32()%3], pos, 40.0f, volume ); + } + else if( id == k_player_skate_soundeffect_land_bad ){ + audio_oneshot_3d( &audio_lands[vg_randu32()%2+3], pos, 40.0f, volume ); + } + else if( id == k_player_skate_soundeffect_grind_metal ){ + audio_oneshot_3d( &audio_board[3], pos, 40.0f, volume ); + } + else if( id == k_player_skate_soundeffect_grind_wood ){ + audio_oneshot_3d( &audio_board[8], pos, 40.0f, volume ); + } + + audio_unlock(); +} + #endif /* PLAYER_SKATE_C */