X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=c3ff3e97511e2c99386161c8c64fe7bf71f1a9a0;hb=0cf7e0563088708f2749f7dacd26ffdf1391dccc;hp=99cb6c8105af173d585f941ee7ad542442d721a2;hpb=4a883ac1b2506032f9dddab342712de46f2ca734;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 99cb6c8..c3ff3e9 100644 --- a/player.h +++ b/player.h @@ -1137,47 +1137,62 @@ static void player_animate_camera(void) */ static void player_audio(void) { - 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; + audio_lock(); static float air = 0.0f; - air = vg_lerpf(air, player.in_air? 1.0f: 0.0f, 0.7f); - + 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; + + audio_player_set_position( &audio_player0, player.rb.co ); + audio_player_set_position( &audio_player1, player.rb.co ); + audio_player_set_position( &audio_player2, 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; + /* TODO, Make function */ + v3_copy( ears, vg_audio.listener_ears ); + v3_copy( player.camera[3], vg_audio.listener_pos ); - if( freecam ) + /* Tunnel / occlusion */ + audio_sample_occlusion( player.camera[3] ); + + if( freecam || player.is_dead || !player.on_board ) { - audio_player0.vol = 0.0f; - audio_player1.vol = 0.0f; - audio_player2.vol = 0.0f; + audio_player_set_vol( &audio_player0, 0.0f ); + audio_player_set_vol( &audio_player1, 0.0f ); + audio_player_set_vol( &audio_player2, 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; - } + /* Composite */ + float speed = vg_minf(v3_length( player.rb.v )*0.1f,1.0f), + attn = 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_player_set_vol( &audio_player0, vol0 ); + audio_player_set_vol( &audio_player1, vol1 ); + audio_player_set_vol( &audio_player2, vol2 ); + + float reverb_amt = vol0 * audio_occlusion_current * 1.0f; + audio_player_set_pan( &audio_player3, 0.0f ); + audio_player_set_vol( &audio_player3, reverb_amt ); } + +#if 0 + world_audio_update( cam, ears ); +#endif + audio_unlock(); } /* @@ -1282,7 +1297,8 @@ static void player_update(void) player.on_board ^= 0x1; } - if( glfwGetKey( vg_window, GLFW_KEY_O ) ) + if( (glfwGetKey( vg_window, GLFW_KEY_O ) || (player.rb.co[1] < 0.0f)) && + !player.is_dead) { character_ragdoll_copypose( &player.mdl, player.rb.v ); player.is_dead = 1;