From d9bc05ee3210c336814698cb541b632661931125 Mon Sep 17 00:00:00 2001 From: Evan Hemsley <2342303+ehemsley@users.noreply.github.com> Date: Sun, 29 Dec 2019 21:09:28 -0800 Subject: [PATCH] remove linq methods from AABB calculation --- Bonk/AABB.cs | 36 ++++++++++++++++++++++++++++------ Bonk/BroadPhase/SpatialHash.cs | 4 ---- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/Bonk/AABB.cs b/Bonk/AABB.cs index b525cd3..0ecbfdd 100644 --- a/Bonk/AABB.cs +++ b/Bonk/AABB.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Numerics; using MoonTools.Core.Structs; @@ -21,14 +20,39 @@ namespace MoonTools.Core.Bonk public static AABB FromTransformedVertices(IEnumerable 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 { - MinX = TransformedVertices.Min(vertex => vertex.X), - MinY = TransformedVertices.Min(vertex => vertex.Y), - MaxX = TransformedVertices.Max(vertex => vertex.X), - MaxY = TransformedVertices.Max(vertex => vertex.Y) + MinX = minX, + MinY = minY, + MaxX = maxX, + MaxY = maxY }; } diff --git a/Bonk/BroadPhase/SpatialHash.cs b/Bonk/BroadPhase/SpatialHash.cs index 9e5b953..05f0099 100644 --- a/Bonk/BroadPhase/SpatialHash.cs +++ b/Bonk/BroadPhase/SpatialHash.cs @@ -33,8 +33,6 @@ namespace MoonTools.Core.Bonk /// public void Insert(T id, IShape2D shape, Transform2D transform2D) { - if (shape == null) { throw new ArgumentNullException(nameof(shape)); } - var box = shape.AABB(transform2D); var minHash = Hash(box.MinX, box.MinY); var maxHash = Hash(box.MaxX, box.MaxY); @@ -64,8 +62,6 @@ namespace MoonTools.Core.Bonk /// 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); var minHash = Hash(box.MinX, box.MinY); var maxHash = Hash(box.MaxX, box.MaxY);