]> git.mxchange.org Git - simgear.git/blobdiff - simgear/sound/sample_group.cxx
math: Move lerp function into SGMisc.
[simgear.git] / simgear / sound / sample_group.cxx
index 9dce6a4288eea3697a448242c6eb2bbae6bf51bd..069f85df9dd557776171d3855c9fd77712a54b37 100644 (file)
@@ -181,7 +181,7 @@ void SGSampleGroup::update( double dt ) {
                         alSourcePlay( source );
                         testForALError("sample play");
                     } else
-                        SG_LOG( SG_GENERAL, SG_ALERT, "No such buffer!\n");
+                        SG_LOG( SG_SOUND, SG_ALERT, "No such buffer!\n");
                 }
             }
 
@@ -406,6 +406,19 @@ void SGSampleGroup::update_pos_and_orientation() {
         sample->set_rotation( ec2body );
         sample->set_position( position );
         sample->set_velocity( velocity );
+
+        // Test if a sample is farther away than max distance, if so
+        // stop the sound playback and free it's source.
+        if (!_tied_to_listener) {
+            float max2 = sample->get_max_dist() * sample->get_max_dist();
+            float dist2 = position[0]*position[0]
+                          + position[1]*position[1] + position[2]*position[2];
+            if ((dist2 > max2) && !sample->test_out_of_range()) {
+                sample->set_out_of_range(true);
+            } else if ((dist2 < max2) && sample->test_out_of_range()) {
+                sample->set_out_of_range(false);
+            }
+        }
     }
 }
 
@@ -463,7 +476,7 @@ void SGSampleGroup::update_sample_config( SGSoundSample *sample ) {
 bool SGSampleGroup::testForError(void *p, string s)
 {
    if (p == NULL) {
-      SG_LOG( SG_GENERAL, SG_ALERT, "Error (sample group): " << s);
+      SG_LOG( SG_SOUND, SG_ALERT, "Error (sample group): " << s);
       return true;
    }
    return false;
@@ -473,7 +486,7 @@ bool SGSampleGroup::testForALError(string s)
 {
     ALenum error = alGetError();
     if (error != AL_NO_ERROR)  {
-       SG_LOG( SG_GENERAL, SG_ALERT, "AL Error (" << _refname << "): "
+       SG_LOG( SG_SOUND, SG_ALERT, "AL Error (" << _refname << "): "
                                       << alGetString(error) << " at " << s);
        return true;
     }