X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=3d42096d2f420296566a897ebe2f77e5d0079ede;hb=5f4eb3866525724188461589485ac1aa50d08870;hp=8619308a0cffe686a929574701353ca2d3be4c23;hpb=d4746875c05dd3e077e1b266e50ffe4856b45502;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 8619308..3d42096 100644 --- a/player.h +++ b/player.h @@ -1137,53 +1137,59 @@ static void player_animate_camera(void) */ static void player_audio(void) { - audio_sample_occlusion( player.camera[3] ); - - float speed = vg_minf(v3_length( player.rb.v )*0.1f,1.0f), - attn = v3_dist( player.rb.co, player.camera[3] )+1.0f; - attn = (1.0f/(attn*attn)) * speed; + sfx_lock(); static float air = 0.0f; air = vg_lerpf(air, player.in_air? 1.0f: 0.0f, 5.0f*ktimestep); - + + /* Spacial info */ v3f ears = { 1.0f,0.0f,0.0f }; v3f delta; + float *cam = player.camera[3], + *pos = player.rb.co; + v3_sub( player.rb.co, player.camera[3], delta ); v3_normalize( delta ); m3x3_mulv( player.camera, ears, ears ); - float pan = v3_dot( ears, delta ); - audio_player0.pan = pan; - audio_player1.pan = pan; - audio_player2.pan = pan; - - audio_player3.pan = 0.0f; - - if( freecam ) + if( freecam || player.is_dead || !player.on_board ) { audio_player0.vol = 0.0f; audio_player1.vol = 0.0f; audio_player2.vol = 0.0f; + + audio_player0.pan = 0.0f; + audio_player1.pan = 0.0f; + audio_player2.pan = 0.0f; } else { - if( player.is_dead ) - { - audio_player0.vol = 0.0f; - audio_player1.vol = 0.0f; - audio_player2.vol = 0.0f; - } - else - { - float slide = vg_clampf( fabsf(player.slip), 0.0f, 1.0f ); - audio_player0.vol = (1.0f-air)*attn*(1.0f-slide); - audio_player1.vol = air *attn; - audio_player2.vol = (1.0f-air)*attn*slide; - } + /* Spacialize 0 */ + audio_spacialize( &audio_player0, pos, cam, ears, 1.0f ); + audio_player1.pan = audio_player0.pan; + audio_player2.pan = audio_player0.pan; + + /* Composite */ + float speed = vg_minf(v3_length( player.rb.v )*0.1f,1.0f), + attn = audio_player0.vol * speed, + slide = vg_clampf( fabsf(player.slip), 0.0f, 1.0f ), + vol0 = (1.0f-air)*attn*(1.0f-slide), + vol1 = air *attn, + vol2 = (1.0f-air)*attn*slide; + + audio_player1.vol = vol1; + audio_player2.vol = vol2; + audio_player0.vol = vol0; } + /* Tunnel / occlusion */ + audio_sample_occlusion( player.camera[3] ); + audio_player3.pan = 0.0f; audio_player3.vol = audio_player0.vol * audio_occlusion_current * 2.0f; + + world_audio_update( cam, ears ); + sfx_unlock(); } /*