mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-21 04:41:35 +00:00
Avoid making expensive visitEffectSources calls if no spell absorption effect is active
This commit is contained in:
parent
354447cc45
commit
abdf40e0d5
1 changed files with 21 additions and 18 deletions
|
@ -472,12 +472,14 @@ namespace MWMechanics
|
||||||
MWBase::Environment::get().getWindowManager()->setEnemy(target);
|
MWBase::Environment::get().getWindowManager()->setEnemy(target);
|
||||||
|
|
||||||
// Try absorbing if it's a spell
|
// Try absorbing if it's a spell
|
||||||
// NOTE: Vanilla does this once per spell absorption effect source instead of adding the % from all sources together, so use the same approach here
|
// Unlike Reflect, this is done once per spell absorption effect source
|
||||||
bool absorbed = false;
|
bool absorbed = false;
|
||||||
if (spell && caster != target && target.getClass().isActor())
|
if (spell && caster != target && target.getClass().isActor())
|
||||||
|
{
|
||||||
|
CreatureStats& stats = target.getClass().getCreatureStats(target);
|
||||||
|
if (stats.getMagicEffects().get(ESM::MagicEffect::SpellAbsorption).getMagnitude() > 0.f)
|
||||||
{
|
{
|
||||||
GetAbsorptionProbability check(target);
|
GetAbsorptionProbability check(target);
|
||||||
MWMechanics::CreatureStats& stats = target.getClass().getCreatureStats(target);
|
|
||||||
stats.getActiveSpells().visitEffectSources(check);
|
stats.getActiveSpells().visitEffectSources(check);
|
||||||
stats.getSpells().visitEffectSources(check);
|
stats.getSpells().visitEffectSources(check);
|
||||||
if (target.getClass().hasInventoryStore(target))
|
if (target.getClass().hasInventoryStore(target))
|
||||||
|
@ -491,9 +493,10 @@ namespace MWMechanics
|
||||||
MWBase::Environment::get().getWorld()->getAnimation(target)->addEffect(
|
MWBase::Environment::get().getWorld()->getAnimation(target)->addEffect(
|
||||||
"meshes\\" + absorbStatic->mModel, ESM::MagicEffect::SpellAbsorption, false, "");
|
"meshes\\" + absorbStatic->mModel, ESM::MagicEffect::SpellAbsorption, false, "");
|
||||||
// Magicka is increased by cost of spell
|
// Magicka is increased by cost of spell
|
||||||
DynamicStat<float> magicka = target.getClass().getCreatureStats(target).getMagicka();
|
DynamicStat<float> magicka = stats.getMagicka();
|
||||||
magicka.setCurrent(magicka.getCurrent() + spell->mData.mCost);
|
magicka.setCurrent(magicka.getCurrent() + spell->mData.mCost);
|
||||||
target.getClass().getCreatureStats(target).setMagicka(magicka);
|
stats.setMagicka(magicka);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue