mirror of
https://github.com/OpenMW/openmw.git
synced 2025-12-08 22:04:31 +00:00
Don't use cached awareness in combat
This commit is contained in:
parent
b3fe84a560
commit
4ca9cac784
5 changed files with 9 additions and 6 deletions
|
|
@ -102,7 +102,7 @@ namespace MWBase
|
|||
///< Return the number of deaths for actors with the given ID.
|
||||
|
||||
/// Check if \a observer is potentially aware of \a ptr. Does not do a line of sight check!
|
||||
virtual bool awarenessCheck(const MWWorld::Ptr& ptr, const MWWorld::Ptr& observer) = 0;
|
||||
virtual bool awarenessCheck(const MWWorld::Ptr& ptr, const MWWorld::Ptr& observer, bool useCache = true) = 0;
|
||||
|
||||
/// Makes \a ptr fight \a target. Also shouts a combat taunt.
|
||||
virtual void startCombat(
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ namespace MWMechanics
|
|||
ESM::Position enemyPos = enemy.getRefData().getPosition();
|
||||
|
||||
if (isTargetMagicallyHidden(enemy)
|
||||
&& !MWBase::Environment::get().getMechanicsManager()->awarenessCheck(enemy, actor))
|
||||
&& !MWBase::Environment::get().getMechanicsManager()->awarenessCheck(enemy, actor, false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ namespace MWMechanics
|
|||
return true;
|
||||
|
||||
if (isTargetMagicallyHidden(target)
|
||||
&& !MWBase::Environment::get().getMechanicsManager()->awarenessCheck(target, actor))
|
||||
&& !MWBase::Environment::get().getMechanicsManager()->awarenessCheck(target, actor, false))
|
||||
return false;
|
||||
|
||||
if (target.getClass().getCreatureStats(target).isDead())
|
||||
|
|
|
|||
|
|
@ -1608,7 +1608,7 @@ namespace MWMechanics
|
|||
commitCrime(player, victim, MWBase::MechanicsManager::OT_Murder);
|
||||
}
|
||||
|
||||
bool MechanicsManager::awarenessCheck(const MWWorld::Ptr& ptr, const MWWorld::Ptr& observer)
|
||||
bool MechanicsManager::awarenessCheck(const MWWorld::Ptr& ptr, const MWWorld::Ptr& observer, bool useCache)
|
||||
{
|
||||
if (observer.getClass().getCreatureStats(observer).isDead() || !observer.getRefData().isEnabled())
|
||||
return false;
|
||||
|
|
@ -1675,7 +1675,10 @@ namespace MWMechanics
|
|||
}
|
||||
|
||||
float target = x - y;
|
||||
return observerStats.getAwarenessRoll() >= target;
|
||||
if (useCache)
|
||||
return observerStats.getAwarenessRoll() >= target;
|
||||
auto& prng = MWBase::Environment::get().getWorld()->getPrng();
|
||||
return Misc::Rng::roll0to99(prng) >= target;
|
||||
}
|
||||
|
||||
void MechanicsManager::startCombat(
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ namespace MWMechanics
|
|||
///< Perform a persuasion action on NPC
|
||||
|
||||
/// Check if \a observer is potentially aware of \a ptr. Does not do a line of sight check!
|
||||
bool awarenessCheck(const MWWorld::Ptr& ptr, const MWWorld::Ptr& observer) override;
|
||||
bool awarenessCheck(const MWWorld::Ptr& ptr, const MWWorld::Ptr& observer, bool useCache = true) override;
|
||||
|
||||
/// Makes \a ptr fight \a target. Also shouts a combat taunt.
|
||||
void startCombat(
|
||||
|
|
|
|||
Loading…
Reference in a new issue