mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-03 18:15:35 +00:00
Replace Play_NoTrack with playManualSound3D, and rename the latter
This commit is contained in:
parent
caae305ddd
commit
73448c72f6
7 changed files with 39 additions and 37 deletions
|
@ -29,13 +29,10 @@ namespace MWBase
|
|||
public:
|
||||
/* These must all fit together */
|
||||
enum PlayMode {
|
||||
Play_Normal = 0, /* tracked, non-looping, multi-instance, environment */
|
||||
Play_Normal = 0, /* non-looping, affected by environment */
|
||||
Play_Loop = 1<<0, /* Sound will continually loop until explicitly stopped */
|
||||
Play_NoEnv = 1<<1, /* Do not apply environment effects (eg, underwater filters) */
|
||||
Play_NoTrack = 1<<2, /* (3D only) Play the sound at the given object's position
|
||||
* but do not keep it updated (the sound will not move with
|
||||
* the object and will not stop when the object is deleted. */
|
||||
Play_RemoveAtDistance = 1<<3, /* (3D only) If the listener gets further than 2000 units away
|
||||
Play_RemoveAtDistance = 1<<2, /* (3D only) If the listener gets further than 2000 units away
|
||||
from the sound source, the sound is removed.
|
||||
This is weird stuff but apparently how vanilla works for sounds
|
||||
played by the PlayLoopSound family of script functions. Perhaps we
|
||||
|
@ -45,11 +42,11 @@ namespace MWBase
|
|||
Play_LoopRemoveAtDistance = Play_Loop | Play_RemoveAtDistance
|
||||
};
|
||||
enum PlayType {
|
||||
Play_TypeSfx = 1<<4, /* Normal SFX sound */
|
||||
Play_TypeVoice = 1<<5, /* Voice sound */
|
||||
Play_TypeFoot = 1<<6, /* Footstep sound */
|
||||
Play_TypeMusic = 1<<7, /* Music track */
|
||||
Play_TypeMovie = 1<<8, /* Movie audio track */
|
||||
Play_TypeSfx = 1<<3, /* Normal SFX sound */
|
||||
Play_TypeVoice = 1<<4, /* Voice sound */
|
||||
Play_TypeFoot = 1<<5, /* Footstep sound */
|
||||
Play_TypeMusic = 1<<6, /* Music track */
|
||||
Play_TypeMovie = 1<<7, /* Movie audio track */
|
||||
Play_TypeMask = Play_TypeSfx|Play_TypeVoice|Play_TypeFoot|Play_TypeMusic|Play_TypeMovie
|
||||
};
|
||||
|
||||
|
@ -120,9 +117,9 @@ namespace MWBase
|
|||
///< Play a 3D sound attached to an MWWorld::Ptr. Will be updated automatically with the Ptr's position, unless Play_NoTrack is specified.
|
||||
///< @param offset Value from [0,1] meaning from which fraction the sound the playback starts.
|
||||
|
||||
virtual MWBase::SoundPtr playManualSound3D(const osg::Vec3f& initialPos, const std::string& soundId,
|
||||
float volume, float pitch, PlayType type, PlayMode mode, float offset=0) = 0;
|
||||
///< Play a 3D sound at \a initialPos. If the sound should be moving, it must be updated manually using Sound::setPosition.
|
||||
virtual MWBase::SoundPtr playSound3D(const osg::Vec3f& initialPos, const std::string& soundId,
|
||||
float volume, float pitch, PlayType type=Play_TypeSfx, PlayMode mode=Play_Normal, float offset=0) = 0;
|
||||
///< Play a 3D sound at \a initialPos. If the sound should be moving, it must be updated using Sound::setPosition.
|
||||
|
||||
virtual void stopSound3D(const MWWorld::Ptr &reference, const std::string& soundId) = 0;
|
||||
///< Stop the given object from playing the given sound,
|
||||
|
|
|
@ -212,8 +212,9 @@ namespace MWMechanics
|
|||
MWBase::Environment::get().getWorld()->spawnEffect("meshes\\" + fx->mModel,
|
||||
"", mCreature.getRefData().getPosition().asVec3());
|
||||
|
||||
MWBase::Environment::get().getSoundManager()->playSound3D(mCreature, "conjuration hit", 1.f, 1.f,
|
||||
MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_NoTrack);
|
||||
MWBase::Environment::get().getSoundManager()->playSound3D(
|
||||
mCreature.getRefData().getPosition().asVec3(), "conjuration hit", 1.f, 1.f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -560,9 +560,6 @@ namespace MWSound
|
|||
if(iter != mUnusedBuffers.end())
|
||||
mUnusedBuffers.erase(iter);
|
||||
}
|
||||
if((mode&Play_NoTrack))
|
||||
mActiveSounds[MWWorld::Ptr()].push_back(std::make_pair(sound, sfxid));
|
||||
else
|
||||
mActiveSounds[ptr].push_back(std::make_pair(sound, sfxid));
|
||||
}
|
||||
catch(std::exception&)
|
||||
|
@ -572,7 +569,7 @@ namespace MWSound
|
|||
return sound;
|
||||
}
|
||||
|
||||
MWBase::SoundPtr SoundManager::playManualSound3D(const osg::Vec3f& initialPos, const std::string& soundId,
|
||||
MWBase::SoundPtr SoundManager::playSound3D(const osg::Vec3f& initialPos, const std::string& soundId,
|
||||
float volume, float pitch, PlayType type, PlayMode mode, float offset)
|
||||
{
|
||||
MWBase::SoundPtr sound;
|
||||
|
|
|
@ -168,9 +168,9 @@ namespace MWSound
|
|||
///< Play a 3D sound attached to an MWWorld::Ptr. Will be updated automatically with the Ptr's position, unless Play_NoTrack is specified.
|
||||
///< @param offset Value from [0,1] meaning from which fraction the sound the playback starts.
|
||||
|
||||
virtual MWBase::SoundPtr playManualSound3D(const osg::Vec3f& initialPos, const std::string& soundId,
|
||||
virtual MWBase::SoundPtr playSound3D(const osg::Vec3f& initialPos, const std::string& soundId,
|
||||
float volume, float pitch, PlayType type, PlayMode mode, float offset=0);
|
||||
///< Play a 3D sound at \a initialPos. If the sound should be moving, it must be updated manually using Sound::setPosition.
|
||||
///< Play a 3D sound at \a initialPos. If the sound should be moving, it must be updated using Sound::setPosition.
|
||||
|
||||
///< Play a sound from an object
|
||||
///< @param offset value from [0,1], when to start playback. 0 is beginning, 1 is end.
|
||||
|
|
|
@ -23,15 +23,22 @@ void MWWorld::Action::execute (const Ptr& actor)
|
|||
{
|
||||
if(mKeepSound && actor == MWMechanics::getPlayer())
|
||||
MWBase::Environment::get().getSoundManager()->playSound(mSoundId, 1.0, 1.0,
|
||||
MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal,mSoundOffset);
|
||||
MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Normal, mSoundOffset
|
||||
);
|
||||
else
|
||||
{
|
||||
bool local = mTarget.isEmpty() || !mTarget.isInCell(); // no usable target
|
||||
|
||||
if(mKeepSound)
|
||||
MWBase::Environment::get().getSoundManager()->playSound3D(
|
||||
(local ? actor : mTarget).getRefData().getPosition().asVec3(),
|
||||
mSoundId, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx,
|
||||
MWBase::SoundManager::Play_Normal, mSoundOffset
|
||||
);
|
||||
else
|
||||
MWBase::Environment::get().getSoundManager()->playSound3D(local ? actor : mTarget,
|
||||
mSoundId, 1.0, 1.0, MWBase::SoundManager::Play_TypeSfx,
|
||||
mKeepSound ? MWBase::SoundManager::Play_NoTrack : MWBase::SoundManager::Play_Normal,
|
||||
mSoundOffset);
|
||||
MWBase::SoundManager::Play_Normal, mSoundOffset
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ namespace MWWorld
|
|||
createModel(state, ptr.getClass().getModel(ptr), pos, orient);
|
||||
|
||||
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
||||
state.mSound = sndMgr->playManualSound3D(pos, sound, 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Loop);
|
||||
state.mSound = sndMgr->playSound3D(pos, sound, 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Loop);
|
||||
|
||||
mMagicBolts.push_back(state);
|
||||
}
|
||||
|
@ -374,7 +374,7 @@ namespace MWWorld
|
|||
createModel(state, model, osg::Vec3f(esm.mPosition), osg::Quat(esm.mOrientation));
|
||||
|
||||
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
||||
state.mSound = sndMgr->playManualSound3D(esm.mPosition, esm.mSound, 1.0f, 1.0f,
|
||||
state.mSound = sndMgr->playSound3D(esm.mPosition, esm.mSound, 1.0f, 1.0f,
|
||||
MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_Loop);
|
||||
state.mSoundId = esm.mSound;
|
||||
|
||||
|
|
|
@ -3153,9 +3153,9 @@ namespace MWWorld
|
|||
{
|
||||
MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager();
|
||||
if(!effect->mAreaSound.empty())
|
||||
sndMgr->playManualSound3D(origin, effect->mAreaSound, 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_NoTrack);
|
||||
sndMgr->playSound3D(origin, effect->mAreaSound, 1.0f, 1.0f);
|
||||
else
|
||||
sndMgr->playManualSound3D(origin, schools[effect->mData.mSchool]+" area", 1.0f, 1.0f, MWBase::SoundManager::Play_TypeSfx, MWBase::SoundManager::Play_NoTrack);
|
||||
sndMgr->playSound3D(origin, schools[effect->mData.mSchool]+" area", 1.0f, 1.0f);
|
||||
}
|
||||
// Get the actors in range of the effect
|
||||
std::vector<MWWorld::Ptr> objects;
|
||||
|
|
Loading…
Reference in a new issue