From c2bed99f8a4908e0778458201b8c873ea15bc677 Mon Sep 17 00:00:00 2001 From: driAn Date: Tue, 18 Nov 2008 21:56:50 +0000 Subject: [PATCH] mapsound fadeout fix, winservice init fix git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@3630 e016b1c5-ed68-44aa-a2f7-31cac88cffde --- source/src/servercontroller.h | 7 ++++++- source/src/sound.cpp | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/source/src/servercontroller.h b/source/src/servercontroller.h index a3ca21eb..31adc79c 100644 --- a/source/src/servercontroller.h +++ b/source/src/servercontroller.h @@ -19,7 +19,12 @@ struct winservice : servercontroller HANDLE stopevent; const char *name; - winservice(const char *name) : name(name) { callbacks::svc = this; }; + winservice(const char *name) : name(name) + { + callbacks::svc = this; + statushandle = 0; + }; + ~winservice() { if(status.dwCurrentState != SERVICE_STOPPED) stop(); diff --git a/source/src/sound.cpp b/source/src/sound.cpp index 7d130f21..faa4baad 100644 --- a/source/src/sound.cpp +++ b/source/src/sound.cpp @@ -1098,10 +1098,19 @@ struct location : sourceowner if(ref->nodistance()) { // own distance model for entities/mapsounds: linear & clamping + + const float innerradius = float(eref.ent->attr3); // full gain area / size property + const float outerradius = float(eref.ent->attr2); // fading gain area / radius property float dist = camera1->o.dist(pos); - if(dist <= eref.ent->attr3) src->gain(1.0f*vol); - else if(dist <= eref.ent->attr2) src->gain((1.0f - dist/(float)eref.ent->attr2)*vol); - else src->gain(0.0f); + + if(dist <= innerradius) src->gain(1.0f*vol); // inside full gain area + else if(dist <= outerradius) // inside fading gain area + { + const float fadeoutdistance = outerradius-innerradius; + const float fadeout = dist-innerradius; + src->gain((1.0f - fadeout/fadeoutdistance)*vol); + } + else src->gain(0.0f); // outside entity } else {