Bläddra i källkod

audio: Fix stop() not working for looped sound while sound is inactive

Fixes #559

Also fixes #1031 for FMOD
rdb 5 år sedan
förälder
incheckning
e5eb5f8ed2

+ 4 - 2
panda/src/audiotraits/fmodAudioSound.cxx

@@ -259,6 +259,7 @@ stop() {
     }
   }
   _start_time = 0.0;
+  _paused = false;
 }
 
 
@@ -827,12 +828,13 @@ set_active(bool active) {
     } else {
       // ...deactivate the sound.
       if (status() == PLAYING) {
+        PN_stdfloat time = get_time();
+        stop();
         if (get_loop_count() == 0) {
           // ...we're pausing a looping sound.
           _paused = true;
-          _start_time = get_time();
+          _start_time = time;
         }
-        stop();
       }
     }
   }

+ 6 - 4
panda/src/audiotraits/openalAudioSound.cxx

@@ -217,6 +217,8 @@ stop() {
     _stream_queued.resize(0);
   }
 
+  _paused = false;
+
   _manager->stopping_sound(this);
   release_sound_data(false);
 }
@@ -828,13 +830,13 @@ set_active(bool active) {
     } else {
       // ...deactivate the sound.
       if (status()==PLAYING) {
-        if (_loop_count==0) {
-          // ...we're pausing a looping sound.
-          _paused=true;
-        }
         // Store off the current time so we can resume from where we paused.
         _start_time = get_time();
         stop();
+        if (_loop_count == 0) {
+          // ...we're pausing a looping sound.
+          _paused = true;
+        }
       }
     }
   }