expose Line properties + no-ID retrieve
							parent
							
								
									be4b5cf2c7
								
							
						
					
					
						commit
						27e0404ec0
					
				|  | @ -8,8 +8,8 @@ namespace MoonWorks.Collision | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     public struct Line : IShape2D, System.IEquatable<Line> |     public struct Line : IShape2D, System.IEquatable<Line> | ||||||
|     { |     { | ||||||
|         private Vector2 Start { get; } |         public Vector2 Start { get; } | ||||||
|         private Vector2 End { get; } |         public Vector2 End { get; } | ||||||
| 
 | 
 | ||||||
|         public AABB2D AABB { get; } |         public AABB2D AABB { get; } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -99,6 +99,43 @@ namespace MoonWorks.Collision | ||||||
| 			FreeHashSet(returned); | 			FreeHashSet(returned); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		/// <summary> | ||||||
|  | 		/// Retrieves all the potential collisions of a shape-transform pair. | ||||||
|  | 		/// </summary> | ||||||
|  | 		public IEnumerable<(T, ICollidable, Transform2D, uint)> Retrieve(ICollidable shape, Transform2D transform2D, uint collisionMask = uint.MaxValue) | ||||||
|  | 		{ | ||||||
|  | 			var returned = AcquireHashSet(); | ||||||
|  | 
 | ||||||
|  | 			var box = shape.TransformedAABB(transform2D); | ||||||
|  | 			var (minX, minY) = Hash(box.Min); | ||||||
|  | 			var (maxX, maxY) = Hash(box.Max); | ||||||
|  | 
 | ||||||
|  | 			if (minX < MinX) { minX = MinX; } | ||||||
|  | 			if (maxX > MaxX) { maxX = MaxX; } | ||||||
|  | 			if (minY < MinY) { minY = MinY; } | ||||||
|  | 			if (maxY > MaxY) { maxY = MaxY; } | ||||||
|  | 
 | ||||||
|  | 			foreach (var key in Keys(minX, minY, maxX, maxY)) | ||||||
|  | 			{ | ||||||
|  | 				if (hashDictionary.ContainsKey(key)) | ||||||
|  | 				{ | ||||||
|  | 					foreach (var t in hashDictionary[key]) | ||||||
|  | 					{ | ||||||
|  | 						if (!returned.Contains(t)) | ||||||
|  | 						{ | ||||||
|  | 							var (otherShape, otherTransform, collisionGroups) = IDLookup[t]; | ||||||
|  | 							if (((collisionGroups & collisionMask) > 0) && AABB2D.TestOverlap(box, otherShape.TransformedAABB(otherTransform))) | ||||||
|  | 							{ | ||||||
|  | 								returned.Add(t); | ||||||
|  | 								yield return (t, otherShape, otherTransform, collisionGroups); | ||||||
|  | 							} | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			FreeHashSet(returned); | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// Retrieves objects based on a pre-transformed AABB. | 		/// Retrieves objects based on a pre-transformed AABB. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue