Cached point must be in front of camera.
Do not allow using a cached point far beyond the active aim range.
878 {
880 return false;
881
882 vector cameraPos =
g_Game.GetCurrentCameraPosition();
883 vector cameraDir =
g_Game.GetCurrentCameraDirection();
884
885 if (cameraPos == vector.Zero || cameraDir == vector.Zero)
886 return false;
887
889
890 vector cameraToPosition =
position - cameraPos;
891 float projectedDistance = vector.
Dot(cameraToPosition, cameraDir);
892
894 if (projectedDistance <= 0.0)
895 return false;
896
898
899 if (safeDistance <= 1.0)
901
903 if (projectedDistance > safeDistance + maxPerpendicularDistance)
904 return false;
905
906 vector closestPointOnRay = cameraPos + cameraDir * projectedDistance;
907 float maxPerpendicularDistanceSq = maxPerpendicularDistance * maxPerpendicularDistance;
908
909 return vector.DistanceSq(
position, closestPointOnRay) <= maxPerpendicularDistanceSq;
910 }
static const float SYNTHETIC_CURSOR_DISTANCE_BUFFER
float m_MaxActionDistance
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
proto float Normalize()
Normalizes vector. Returns length.