Example #1
0
        /// <summary>
        /// Intersects a segment with this collision skin part and returns the intersection point that is nearest to the
        /// beginning of the segment.
        /// </summary>
        /// <param name="segment">The segment to intersect with.</param>
        /// <param name="scalar">Returns a value between 0 and 1 indicating where on the segment the first intersection occurs.</param>
        /// <param name="point">Returns the point of the first intersection.</param>
        /// <returns>Returns a value indicating whether the segment intersects with the part.</returns>
        public override bool Intersect(ref Segment segment, out float scalar, out Vector3 point)
        {
            scalar = float.PositiveInfinity;
            point  = Vector3.Zero;
            float   scalar1;
            Vector3 point1;

            for (int i = 0; i < FaceCount; i++)
            {
                var     face = Face(i);
                Vector3 p0;
                World(face[0], out p0);
                var plane = new Plane(p0, _faceNormals[i]);
                if (plane.Intersect(ref segment, out scalar1, out point1) &&
                    scalar1 < scalar && IsPointOnFace(i, ref point1, true))
                {
                    scalar = scalar1;
                    point  = point1;
                }
            }
            return(!float.IsPositiveInfinity(scalar));
        }
Example #2
0
 /// <summary>
 /// Intersects a segment with this collision skin part and returns the intersection point that is nearest to the
 /// beginning of the segment.
 /// </summary>
 /// <param name="segment">The segment to intersect with.</param>
 /// <param name="scalar">Returns a value between 0 and 1 indicating where on the segment the first intersection occurs.</param>
 /// <param name="point">Returns the point of the first intersection.</param>
 /// <returns>Returns a value indicating whether the segment intersects with the part.</returns>
 public override bool Intersect(ref Segment segment, out float scalar, out Vector3 point)
 {
     return(Plane.Intersect(ref segment, out scalar, out point));
 }
		/// <summary>
		/// Intersects a segment with this collision skin part and returns the intersection point that is nearest to the
		/// beginning of the segment.
		/// </summary>
		/// <param name="segment">The segment to intersect with.</param>
		/// <param name="scalar">Returns a value between 0 and 1 indicating where on the segment the first intersection occurs.</param>
		/// <param name="point">Returns the point of the first intersection.</param>
		/// <returns>Returns a value indicating whether the segment intersects with the part.</returns>
		public override bool Intersect(ref Segment segment, out float scalar, out Vector3 point)
		{
			scalar = float.PositiveInfinity;
			point = Vector3.Zero;
			float scalar1;
			Vector3 point1;
			for (int i = 0; i < FaceCount; i++)
			{
				var face = Face(i);
				Vector3 p0;
				World(face[0], out p0);
				var plane = new Plane(p0, _faceNormals[i]);
				if (plane.Intersect(ref segment, out scalar1, out point1) &&
					scalar1 < scalar && IsPointOnFace(i, ref point1, true))
				{
					scalar = scalar1;
					point = point1;
				}
			}
			return !float.IsPositiveInfinity(scalar);
		}