mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-17 10:21:11 +00:00
Merge branch 'fix_5630' into 'master'
Fix #5630 "NPCs momentarily turn when the player character is moving backwards during combat" Closes #5630 See merge request OpenMW/openmw!339
This commit is contained in:
commit
1274e68e1d
@ -240,24 +240,24 @@ namespace MWMechanics
|
|||||||
|
|
||||||
storage.mReadyToAttack = (currentAction->isAttackingOrSpell() && distToTarget <= rangeAttack && storage.mLOS);
|
storage.mReadyToAttack = (currentAction->isAttackingOrSpell() && distToTarget <= rangeAttack && storage.mLOS);
|
||||||
|
|
||||||
|
if (isRangedCombat)
|
||||||
|
{
|
||||||
|
// rotate actor taking into account target movement direction and projectile speed
|
||||||
|
osg::Vec3f& lastTargetPos = storage.mLastTargetPos;
|
||||||
|
vAimDir = AimDirToMovingTarget(actor, target, lastTargetPos, AI_REACTION_TIME, (weapon ? weapon->mData.mType : 0), storage.mStrength);
|
||||||
|
lastTargetPos = vTargetPos;
|
||||||
|
|
||||||
|
storage.mMovement.mRotation[0] = getXAngleToDir(vAimDir);
|
||||||
|
storage.mMovement.mRotation[2] = getZAngleToDir(vAimDir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
storage.mMovement.mRotation[0] = getXAngleToDir(vAimDir);
|
||||||
|
storage.mMovement.mRotation[2] = getZAngleToDir((vTargetPos-vActorPos)); // using vAimDir results in spastic movements since the head is animated
|
||||||
|
}
|
||||||
|
|
||||||
if (storage.mReadyToAttack)
|
if (storage.mReadyToAttack)
|
||||||
{
|
{
|
||||||
if (isRangedCombat)
|
|
||||||
{
|
|
||||||
// rotate actor taking into account target movement direction and projectile speed
|
|
||||||
osg::Vec3f& lastTargetPos = storage.mLastTargetPos;
|
|
||||||
vAimDir = AimDirToMovingTarget(actor, target, lastTargetPos, AI_REACTION_TIME, (weapon ? weapon->mData.mType : 0), storage.mStrength);
|
|
||||||
lastTargetPos = vTargetPos;
|
|
||||||
|
|
||||||
storage.mMovement.mRotation[0] = getXAngleToDir(vAimDir);
|
|
||||||
storage.mMovement.mRotation[2] = getZAngleToDir(vAimDir);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
storage.mMovement.mRotation[0] = getXAngleToDir(vAimDir);
|
|
||||||
storage.mMovement.mRotation[2] = getZAngleToDir((vTargetPos-vActorPos)); // using vAimDir results in spastic movements since the head is animated
|
|
||||||
}
|
|
||||||
|
|
||||||
storage.startCombatMove(isRangedCombat, distToTarget, rangeAttack, actor, target);
|
storage.startCombatMove(isRangedCombat, distToTarget, rangeAttack, actor, target);
|
||||||
// start new attack
|
// start new attack
|
||||||
storage.startAttackIfReady(actor, characterController, weapon, isRangedCombat);
|
storage.startAttackIfReady(actor, characterController, weapon, isRangedCombat);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user