preliminary compressed audio
[carveJwlIkooP6JGAAIwe30JlM.git] / player.h
index 99cb6c8105af173d585f941ee7ad542442d721a2..c3ff3e97511e2c99386161c8c64fe7bf71f1a9a0 100644 (file)
--- 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;