forked from MoonsideGames/MoonTools.Bonk
				
			remove linq methods from AABB calculation
							parent
							
								
									0952b77761
								
							
						
					
					
						commit
						d9bc05ee32
					
				
							
								
								
									
										36
									
								
								Bonk/AABB.cs
								
								
								
								
							
							
						
						
									
										36
									
								
								Bonk/AABB.cs
								
								
								
								
							| 
						 | 
					@ -1,6 +1,5 @@
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					 | 
				
			||||||
using System.Numerics;
 | 
					using System.Numerics;
 | 
				
			||||||
using MoonTools.Core.Structs;
 | 
					using MoonTools.Core.Structs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -21,14 +20,39 @@ namespace MoonTools.Core.Bonk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public static AABB FromTransformedVertices(IEnumerable<Position2D> vertices, Transform2D transform)
 | 
					        public static AABB FromTransformedVertices(IEnumerable<Position2D> vertices, Transform2D transform)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var TransformedVertices = vertices.Select(vertex => Vector2.Transform(vertex, transform.TransformMatrix));
 | 
					            float minX = float.MaxValue;
 | 
				
			||||||
 | 
					            float minY = float.MaxValue;
 | 
				
			||||||
 | 
					            float maxX = float.MinValue;
 | 
				
			||||||
 | 
					            float maxY = float.MinValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            foreach (var vertex in vertices)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var transformedVertex = Vector2.Transform(vertex, transform.TransformMatrix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (transformedVertex.X < minX)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    minX = transformedVertex.X;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (transformedVertex.Y < minY)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    minY = transformedVertex.Y;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (transformedVertex.X > maxX)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    maxX = transformedVertex.X;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (transformedVertex.Y > maxY)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    maxY = transformedVertex.Y;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return new AABB
 | 
					            return new AABB
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MinX = TransformedVertices.Min(vertex => vertex.X),
 | 
					                MinX = minX,
 | 
				
			||||||
                MinY = TransformedVertices.Min(vertex => vertex.Y),
 | 
					                MinY = minY,
 | 
				
			||||||
                MaxX = TransformedVertices.Max(vertex => vertex.X),
 | 
					                MaxX = maxX,
 | 
				
			||||||
                MaxY = TransformedVertices.Max(vertex => vertex.Y)
 | 
					                MaxY = maxY
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -33,8 +33,6 @@ namespace MoonTools.Core.Bonk
 | 
				
			||||||
        /// <param name="transform2D"></param>
 | 
					        /// <param name="transform2D"></param>
 | 
				
			||||||
        public void Insert(T id, IShape2D shape, Transform2D transform2D)
 | 
					        public void Insert(T id, IShape2D shape, Transform2D transform2D)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (shape == null) { throw new ArgumentNullException(nameof(shape)); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            var box = shape.AABB(transform2D);
 | 
					            var box = shape.AABB(transform2D);
 | 
				
			||||||
            var minHash = Hash(box.MinX, box.MinY);
 | 
					            var minHash = Hash(box.MinX, box.MinY);
 | 
				
			||||||
            var maxHash = Hash(box.MaxX, box.MaxY);
 | 
					            var maxHash = Hash(box.MaxX, box.MaxY);
 | 
				
			||||||
| 
						 | 
					@ -64,8 +62,6 @@ namespace MoonTools.Core.Bonk
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        public IEnumerable<(T, IShape2D, Transform2D)> Retrieve(T id, IShape2D shape, Transform2D transform2D)
 | 
					        public IEnumerable<(T, IShape2D, Transform2D)> Retrieve(T id, IShape2D shape, Transform2D transform2D)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (shape == null) { throw new ArgumentNullException(paramName: nameof(shape)); }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            AABB box = shape.AABB(transform2D);
 | 
					            AABB box = shape.AABB(transform2D);
 | 
				
			||||||
            var minHash = Hash(box.MinX, box.MinY);
 | 
					            var minHash = Hash(box.MinX, box.MinY);
 | 
				
			||||||
            var maxHash = Hash(box.MaxX, box.MaxY);
 | 
					            var maxHash = Hash(box.MaxX, box.MaxY);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue