mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 22:39:41 +00:00
Merge branch 'refactor/headtracking' into 'master'
Small improvement for headtracking See merge request OpenMW/openmw!1683
This commit is contained in:
commit
df41b4080d
1 changed files with 18 additions and 12 deletions
|
@ -1457,26 +1457,32 @@ namespace MWMechanics
|
||||||
|
|
||||||
MWMechanics::CreatureStats& stats = iter->first.getClass().getCreatureStats(iter->first);
|
MWMechanics::CreatureStats& stats = iter->first.getClass().getCreatureStats(iter->first);
|
||||||
bool firstPersonPlayer = isPlayer && world->isFirstPerson();
|
bool firstPersonPlayer = isPlayer && world->isFirstPerson();
|
||||||
bool inCombatOrPursue = stats.getAiSequence().isInCombat() || stats.getAiSequence().hasPackage(AiPackageTypeId::Pursue);
|
|
||||||
MWWorld::Ptr activePackageTarget;
|
|
||||||
|
|
||||||
// 1. Unconsious actor can not track target
|
// 1. Unconsious actor can not track target
|
||||||
// 2. Actors in combat and pursue mode do not bother to headtrack anyone except their target
|
// 2. Actors in combat and pursue mode do not bother to headtrack anyone except their target
|
||||||
// 3. Player character does not use headtracking in the 1st-person view
|
// 3. Player character does not use headtracking in the 1st-person view
|
||||||
if (!stats.getKnockedDown() && !firstPersonPlayer)
|
if (!stats.getKnockedDown() && !firstPersonPlayer)
|
||||||
{
|
{
|
||||||
|
bool inCombatOrPursue = stats.getAiSequence().isInCombat() || stats.getAiSequence().isInPursuit();
|
||||||
if (inCombatOrPursue)
|
if (inCombatOrPursue)
|
||||||
activePackageTarget = stats.getAiSequence().getActivePackage().getTarget();
|
|
||||||
|
|
||||||
for (PtrActorMap::iterator it(mActors.begin()); it != mActors.end(); ++it)
|
|
||||||
{
|
{
|
||||||
if (it->first == iter->first)
|
auto activePackageTarget = stats.getAiSequence().getActivePackage().getTarget();
|
||||||
continue;
|
if (!activePackageTarget.isEmpty())
|
||||||
|
{
|
||||||
|
// Track the specified target of package.
|
||||||
|
updateHeadTracking(iter->first, activePackageTarget, headTrackTarget, sqrHeadTrackDistance, inCombatOrPursue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Find something nearby.
|
||||||
|
for (auto& [ptr, _] : mActors)
|
||||||
|
{
|
||||||
|
if (ptr == iter->first)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (inCombatOrPursue && it->first != activePackageTarget)
|
updateHeadTracking(iter->first, ptr, headTrackTarget, sqrHeadTrackDistance, inCombatOrPursue);
|
||||||
continue;
|
}
|
||||||
|
|
||||||
updateHeadTracking(iter->first, it->first, headTrackTarget, sqrHeadTrackDistance, inCombatOrPursue);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue