]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - snd_mix.c
restructured parts of explosion code
[xonotic/darkplaces.git] / snd_mix.c
index 6434dbcf2098232dda8b67db1ff4ae181f122547..29e319f890d56932444e5c06cb44c7d054889df2 100644 (file)
--- a/snd_mix.c
+++ b/snd_mix.c
@@ -296,6 +296,17 @@ void S_PaintChannels(int endtime)
                        if (!S_LoadSound (sfx, true))
                                continue;
 
+                       // if the channel is paused
+                       if (ch->flags & CHANNELFLAG_PAUSED)
+                       {
+                               size_t pausedtime;
+
+                               pausedtime = end - paintedtime;
+                               ch->lastptime += pausedtime;
+                               ch->end += pausedtime;
+                               continue;
+                       }
+
                        // if the sound hasn't been painted last time, update his position
                        if (ch->lastptime < paintedtime)
                        {
@@ -306,7 +317,7 @@ void S_PaintChannels(int endtime)
                                {
                                        int loopstart;
 
-                                       if (ch->forceloop)
+                                       if (ch->flags & CHANNELFLAG_FORCELOOP)
                                                loopstart = 0;
                                        else
                                                loopstart = -1;
@@ -352,7 +363,7 @@ void S_PaintChannels(int endtime)
                                if (ltime >= ch->end)
                                {
                                        // if at end of loop, restart
-                                       if ((sfx->loopstart >= 0 || ch->forceloop) && !stop_paint)
+                                       if ((sfx->loopstart >= 0 || (ch->flags & CHANNELFLAG_FORCELOOP)) && !stop_paint)
                                        {
                                                ch->pos = bound(0, sfx->loopstart, (int)sfx->total_length - 1);
                                                ch->end = ltime + sfx->total_length - ch->pos;
@@ -364,9 +375,7 @@ void S_PaintChannels(int endtime)
 
                                if (stop_paint)
                                {
-                                       if (ch->sfx->fetcher->end != NULL)
-                                               ch->sfx->fetcher->end (ch);
-                                       ch->sfx = NULL;
+                                       S_StopChannel (ch - channels);
                                        break;
                                }
                        }