1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-21 18:40:01 +00:00

Optimize combat music update

This commit is contained in:
Andrei Kortunov 2018-09-21 22:34:18 +04:00
parent fb484c6fde
commit b9346798c6

View File

@ -1242,21 +1242,24 @@ namespace MWMechanics
void Actors::updateCombatMusic () void Actors::updateCombatMusic ()
{ {
MWWorld::Ptr player = getPlayer(); MWWorld::Ptr player = getPlayer();
int hostilesCount = 0; // need to know this to play Battle music const osg::Vec3f playerPos = player.getRefData().getPosition().asVec3();
bool hasHostiles = false; // need to know this to play Battle music
bool aiActive = MWBase::Environment::get().getMechanicsManager()->isAIActive();
for(PtrActorMap::iterator iter(mActors.begin()); iter != mActors.end(); ++iter) if (aiActive)
{ {
if (!iter->first.getClass().getCreatureStats(iter->first).isDead()) for(PtrActorMap::iterator iter(mActors.begin()); iter != mActors.end(); ++iter)
{ {
bool inProcessingRange = (player.getRefData().getPosition().asVec3() - iter->first.getRefData().getPosition().asVec3()).length2() if (iter->first == player) continue;
<= sqrAiProcessingDistance;
if (MWBase::Environment::get().getMechanicsManager()->isAIActive() && inProcessingRange) bool inProcessingRange = (playerPos - iter->first.getRefData().getPosition().asVec3()).length2() <= sqrAiProcessingDistance;
if (inProcessingRange)
{ {
if (iter->first != player) MWMechanics::CreatureStats& stats = iter->first.getClass().getCreatureStats(iter->first);
if (!stats.isDead() && stats.getAiSequence().isInCombat())
{ {
MWMechanics::CreatureStats& stats = iter->first.getClass().getCreatureStats(iter->first); hasHostiles = true;
if (stats.getAiSequence().isInCombat() && !stats.isDead()) hostilesCount++; break;
} }
} }
} }
@ -1265,13 +1268,13 @@ namespace MWMechanics
// check if we still have any player enemies to switch music // check if we still have any player enemies to switch music
static int currentMusic = 0; static int currentMusic = 0;
if (currentMusic != 1 && hostilesCount == 0 && !(player.getClass().getCreatureStats(player).isDead() && if (currentMusic != 1 && !hasHostiles && !(player.getClass().getCreatureStats(player).isDead() &&
MWBase::Environment::get().getSoundManager()->isMusicPlaying())) MWBase::Environment::get().getSoundManager()->isMusicPlaying()))
{ {
MWBase::Environment::get().getSoundManager()->playPlaylist(std::string("Explore")); MWBase::Environment::get().getSoundManager()->playPlaylist(std::string("Explore"));
currentMusic = 1; currentMusic = 1;
} }
else if (currentMusic != 2 && hostilesCount > 0) else if (currentMusic != 2 && hasHostiles)
{ {
MWBase::Environment::get().getSoundManager()->playPlaylist(std::string("Battle")); MWBase::Environment::get().getSoundManager()->playPlaylist(std::string("Battle"));
currentMusic = 2; currentMusic = 2;