From 94e2b820fe0b2bdb0fc0ecbd6b3897b85d27a23d Mon Sep 17 00:00:00 2001 From: driAn Date: Tue, 20 May 2008 18:00:59 +0000 Subject: [PATCH] fixed broken music looping git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@2067 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/sound.cpp | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/source/src/sound.cpp b/source/src/sound.cpp index 106703e0..8b38df8b 100644 --- a/source/src/sound.cpp +++ b/source/src/sound.cpp @@ -162,7 +162,7 @@ struct oggstream bool update() { - if(!sourceid) return false; + if(!sourceid || !playing()) return false; // update buffer queue ALint processed; bool active = true; @@ -174,28 +174,31 @@ struct oggstream alSourceQueueBuffers(sourceid, 1, &bufferids[i]); } - // fade in - if(startmillis > 0) + if(active) { - const float start = (lastmillis-startmillis)/(float)startfademillis; - if(start>=0.00f && start<=1.00001f) setgain(start); - } - - // fade out - if(endmillis > 0) - { - if(lastmillis>endmillis) // stop + // fade in + if(startmillis > 0) { - active = false; + const float start = (lastmillis-startmillis)/(float)startfademillis; + if(start>=0.00f && start<=1.00001f) setgain(start); } - else + + // fade out + if(endmillis > 0) { - const float end = (endmillis-lastmillis)/(float)endfademillis; - if(end>=-0.00001f && end<=1.00f) setgain(end); + if(lastmillis>endmillis) // stop + { + reset(); + return false; + } + else // set gain + { + const float end = (endmillis-lastmillis)/(float)endfademillis; + if(end>=-0.00001f && end<=1.00f) setgain(end); + } } } - - if(!active) + else { if(looping) replay(); else reset();