*/
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();
}
/*
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;