mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-21 09:39:56 +00:00
Avoid unnecessarily friending classes
This commit is contained in:
parent
7cc950ed64
commit
fc912b135f
@ -7,8 +7,6 @@ namespace MWSound
|
|||||||
{
|
{
|
||||||
class Sound
|
class Sound
|
||||||
{
|
{
|
||||||
virtual void update() = 0;
|
|
||||||
|
|
||||||
Sound& operator=(const Sound &rhs);
|
Sound& operator=(const Sound &rhs);
|
||||||
Sound(const Sound &rhs);
|
Sound(const Sound &rhs);
|
||||||
|
|
||||||
@ -20,19 +18,31 @@ namespace MWSound
|
|||||||
float mMinDistance;
|
float mMinDistance;
|
||||||
float mMaxDistance;
|
float mMaxDistance;
|
||||||
int mFlags;
|
int mFlags;
|
||||||
|
|
||||||
float mFadeOutTime;
|
float mFadeOutTime;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual void stop() = 0;
|
virtual void stop() = 0;
|
||||||
virtual bool isPlaying() = 0;
|
virtual bool isPlaying() = 0;
|
||||||
virtual double getTimeOffset() = 0;
|
virtual double getTimeOffset() = 0;
|
||||||
|
virtual void update() = 0;
|
||||||
void setPosition(const osg::Vec3f &pos) { mPos = pos; }
|
void setPosition(const osg::Vec3f &pos) { mPos = pos; }
|
||||||
void setVolume(float volume) { mVolume = volume; }
|
void setVolume(float volume) { mVolume = volume; }
|
||||||
void setFadeout(float duration) { mFadeOutTime=duration; }
|
void setBaseVolume(float volume) { mBaseVolume = volume; }
|
||||||
|
void setFadeout(float duration) { mFadeOutTime = duration; }
|
||||||
|
void updateFade(float duration)
|
||||||
|
{
|
||||||
|
if(mFadeOutTime > 0.0f)
|
||||||
|
{
|
||||||
|
float soundDuration = std::min(duration, mFadeOutTime);
|
||||||
|
mVolume *= (mFadeOutTime-soundDuration) / mFadeOutTime;
|
||||||
|
mFadeOutTime -= soundDuration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MWBase::SoundManager::PlayType getPlayType() const
|
MWBase::SoundManager::PlayType getPlayType() const
|
||||||
{ return (MWBase::SoundManager::PlayType)(mFlags&MWBase::SoundManager::Play_TypeMask); }
|
{ return (MWBase::SoundManager::PlayType)(mFlags&MWBase::SoundManager::Play_TypeMask); }
|
||||||
|
bool getDistanceCull() const { return mFlags&MWBase::SoundManager::Play_RemoveAtDistance; }
|
||||||
|
|
||||||
Sound(const osg::Vec3f& pos, float vol, float basevol, float pitch, float mindist, float maxdist, int flags)
|
Sound(const osg::Vec3f& pos, float vol, float basevol, float pitch, float mindist, float maxdist, int flags)
|
||||||
: mPos(pos)
|
: mPos(pos)
|
||||||
@ -42,12 +52,9 @@ namespace MWSound
|
|||||||
, mMinDistance(mindist)
|
, mMinDistance(mindist)
|
||||||
, mMaxDistance(maxdist)
|
, mMaxDistance(maxdist)
|
||||||
, mFlags(flags)
|
, mFlags(flags)
|
||||||
, mFadeOutTime(0)
|
, mFadeOutTime(0.0f)
|
||||||
{ }
|
{ }
|
||||||
virtual ~Sound() { }
|
virtual ~Sound() { }
|
||||||
|
|
||||||
friend class OpenAL_Output;
|
|
||||||
friend class SoundManager;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -828,10 +828,9 @@ namespace MWSound
|
|||||||
const osg::Vec3f objpos(pos.asVec3());
|
const osg::Vec3f objpos(pos.asVec3());
|
||||||
sound->setPosition(objpos);
|
sound->setPosition(objpos);
|
||||||
|
|
||||||
if((sound->mFlags&Play_RemoveAtDistance))
|
if(sound->getDistanceCull())
|
||||||
{
|
{
|
||||||
osg::Vec3f diff = mListenerPos - ptr.getRefData().getPosition().asVec3();
|
if((mListenerPos - objpos).length2() > 2000*2000)
|
||||||
if(diff.length2() > 2000*2000)
|
|
||||||
sound->stop();
|
sound->stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -839,15 +838,8 @@ namespace MWSound
|
|||||||
if(!sound->isPlaying())
|
if(!sound->isPlaying())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Update fade out
|
sound->updateFade(duration);
|
||||||
if(sound->mFadeOutTime > 0.0f)
|
|
||||||
{
|
|
||||||
float soundDuration = duration;
|
|
||||||
if(soundDuration > sound->mFadeOutTime)
|
|
||||||
soundDuration = sound->mFadeOutTime;
|
|
||||||
sound->setVolume(sound->mVolume - soundDuration/sound->mFadeOutTime*sound->mVolume);
|
|
||||||
sound->mFadeOutTime -= soundDuration;
|
|
||||||
}
|
|
||||||
sound->update();
|
sound->update();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -885,7 +877,7 @@ namespace MWSound
|
|||||||
for(;sndidx != snditer->second.end();++sndidx)
|
for(;sndidx != snditer->second.end();++sndidx)
|
||||||
{
|
{
|
||||||
MWBase::SoundPtr sound = sndidx->first;
|
MWBase::SoundPtr sound = sndidx->first;
|
||||||
sound->mBaseVolume = volumeFromType(sound->getPlayType());
|
sound->setBaseVolume(volumeFromType(sound->getPlayType()));
|
||||||
sound->update();
|
sound->update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -893,12 +885,12 @@ namespace MWSound
|
|||||||
for(;sayiter != mActiveSaySounds.end();++sayiter)
|
for(;sayiter != mActiveSaySounds.end();++sayiter)
|
||||||
{
|
{
|
||||||
MWBase::SoundPtr sound = sayiter->second.first;
|
MWBase::SoundPtr sound = sayiter->second.first;
|
||||||
sound->mBaseVolume = volumeFromType(sound->getPlayType());
|
sound->setBaseVolume(volumeFromType(sound->getPlayType()));
|
||||||
sound->update();
|
sound->update();
|
||||||
}
|
}
|
||||||
if(mMusic)
|
if(mMusic)
|
||||||
{
|
{
|
||||||
mMusic->mBaseVolume = volumeFromType(mMusic->getPlayType());
|
mMusic->setBaseVolume(volumeFromType(mMusic->getPlayType()));
|
||||||
mMusic->update();
|
mMusic->update();
|
||||||
}
|
}
|
||||||
mOutput->finishUpdate();
|
mOutput->finishUpdate();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user