@ -715,16 +715,18 @@ osg::Vec3f AimDirToMovingTarget(const MWWorld::Ptr& actor, const MWWorld::Ptr& t
float t_collision ;
float projVelDirSquared = projSpeed * projSpeed - velPerp * velPerp ;
if ( projVelDirSquared > 0 )
{
osg : : Vec3f vTargetMoveDirNormalized = vTargetMoveDir ;
vTargetMoveDirNormalized . normalize ( ) ;
osg : : Vec3f vTargetMoveDirNormalized = vTargetMoveDir ;
vTargetMoveDirNormalized . normalize ( ) ;
float projDistDiff = vDirToTarget * vTargetMoveDirNormalized ; // dot product
projDistDiff = std : : sqrt ( distToTarget * distToTarget - projDistDiff * projDistDiff ) ;
float projDistDiff = vDirToTarget * vTargetMoveDirNormalized ; // dot product
projDistDiff = std : : sqrt ( distToTarget * distToTarget - projDistDiff * projDistDiff ) ;
if ( projVelDirSquared > 0 )
t_collision = projDistDiff / ( std : : sqrt ( projVelDirSquared ) - velDir ) ;
else t_collision = 0 ; // speed of projectile is not enough to reach moving target
}
else
t_collision = 0 ; // speed of projectile is not enough to reach moving target
return vDirToTarget + vTargetMoveDir * t_collision ;
}