audio occlusion
[carveJwlIkooP6JGAAIwe30JlM.git] / player.h
index 99cb6c8105af173d585f941ee7ad542442d721a2..8619308a0cffe686a929574701353ca2d3be4c23 100644 (file)
--- a/player.h
+++ b/player.h
@@ -1137,12 +1137,14 @@ 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;
 
    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);
    
    v3f ears = { 1.0f,0.0f,0.0f };
    v3f delta;
@@ -1150,12 +1152,14 @@ static void player_audio(void)
    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 )
    {
       audio_player0.vol = 0.0f;
@@ -1178,6 +1182,8 @@ static void player_audio(void)
          audio_player2.vol = (1.0f-air)*attn*slide;
       }
    }
+
+   audio_player3.vol = audio_player0.vol * audio_occlusion_current * 2.0f;
 }
 
 /*
@@ -1282,7 +1288,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;