OpenSim.Region.ScriptEngine.Shared.Api.LSL_Api.AvatarIntersection C# (CSharp) Method

AvatarIntersection() private method

private AvatarIntersection ( System.Vector3 rayStart, System.Vector3 rayEnd, bool skipPhys ) : ContactResult[]
rayStart System.Vector3
rayEnd System.Vector3
skipPhys bool
return ContactResult[]
        private ContactResult[] AvatarIntersection(Vector3 rayStart, Vector3 rayEnd, bool skipPhys)
        {
            List<ContactResult> contacts = new List<ContactResult>();

            Vector3 ab = rayEnd - rayStart;
            float ablen = ab.Length();

            World.ForEachScenePresence(delegate(ScenePresence sp)
            {
                if(skipPhys && sp.PhysicsActor != null)
                    return;

                Vector3 ac = sp.AbsolutePosition - rayStart;

                double d = Math.Abs(Vector3.Mag(Vector3.Cross(ab, ac)) / ablen);

                if (d > 1.5)
                    return;

                double d2 = Vector3.Dot(Vector3.Negate(ab), ac);

                if (d2 > 0)
                    return;

                double dp = Math.Sqrt(Vector3.Mag(ac) * Vector3.Mag(ac) - d * d);
                Vector3 p = rayStart + Vector3.Divide(Vector3.Multiply(ab, (float)dp), (float)Vector3.Mag(ab));

                if (!InBoundingBox(sp, p))
                    return;

                ContactResult result = new ContactResult ();
                result.ConsumerID = sp.LocalId;
                result.Depth = Vector3.Distance(rayStart, p);
                result.Normal = Vector3.Zero;
                result.Pos = p;

                contacts.Add(result);
            });

            return contacts.ToArray();
        }
LSL_Api