- if( ch->flags & AUDIO_FLAG_SPACIAL_3D )
- {
- if( !vg_validf(vg_audio.listener_pos[0]) ||
- !vg_validf(vg_audio.listener_pos[1]) ||
- !vg_validf(vg_audio.listener_pos[2]) ||
- !vg_validf(vg_audio.listener_velocity[0]) ||
- !vg_validf(vg_audio.listener_velocity[1]) ||
- !vg_validf(vg_audio.listener_velocity[2]) ||
- !vg_validf(ch->_.spacial_falloff[0]) ||
- !vg_validf(ch->_.spacial_falloff[1]) ||
- !vg_validf(ch->_.spacial_falloff[2]) )
- {
- vg_error( "NaN listener/world position (%s)\n", ch->name );
+ if( ch->flags & AUDIO_FLAG_SPACIAL_3D ){
+ v3f delta;
+ v3_sub( ch->_.spacial_falloff, vg_audio.listener_pos, delta );
+
+ float dist = v3_length( delta ),
+ vol = vg_maxf( 0.0f, 1.0f - ch->_.spacial_falloff[3]*dist );