diff --git a/Bonk/BroadPhase/SpatialHash.cs b/Bonk/BroadPhase/SpatialHash.cs
index f87b53f..9e5b953 100644
--- a/Bonk/BroadPhase/SpatialHash.cs
+++ b/Bonk/BroadPhase/SpatialHash.cs
@@ -31,8 +31,10 @@ namespace MoonTools.Core.Bonk
/// A unique ID for the shape-transform pair.
///
///
- public void Insert(T id, TShape2D shape, Transform2D transform2D) where TShape2D : struct, IShape2D
+ 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);
@@ -60,9 +62,11 @@ namespace MoonTools.Core.Bonk
///
/// Retrieves all the potential collisions of a shape-transform pair. Excludes any shape-transforms with the given ID.
///
- public IEnumerable<(T, IShape2D, Transform2D)> Retrieve(T id, TShape2D shape, Transform2D transform2D) where TShape2D : struct, IShape2D
+ public IEnumerable<(T, IShape2D, Transform2D)> Retrieve(T id, IShape2D shape, Transform2D transform2D)
{
- var box = shape.AABB(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);
diff --git a/Bonk/NarrowPhase/EPA2D.cs b/Bonk/NarrowPhase/EPA2D.cs
index 5bb5715..5860d2f 100644
--- a/Bonk/NarrowPhase/EPA2D.cs
+++ b/Bonk/NarrowPhase/EPA2D.cs
@@ -24,8 +24,11 @@ namespace MoonTools.Core.Bonk
/// Returns a minimum separating vector in the direction from A to B.
///
/// A simplex returned by the GJK algorithm.
- public static Vector2 Intersect(TShapeA shapeA, Transform2D Transform2DA, TShapeB shapeB, Transform2D Transform2DB, Simplex2D simplex) where TShapeA : struct, IShape2D where TShapeB : struct, IShape2D
+ public static Vector2 Intersect(IShape2D shapeA, Transform2D Transform2DA, IShape2D shapeB, Transform2D Transform2DB, Simplex2D simplex)
{
+ if (shapeA == null) { throw new ArgumentNullException(nameof(shapeA)); }
+ if (shapeB == null) { throw new ArgumentNullException(nameof(shapeB)); }
+
var simplexVertices = simplex.Vertices.Select(vertex => vertex.ToVector2()).ToImmutableArray();
var e0 = (simplexVertices[1].X - simplexVertices[0].X) * (simplexVertices[1].Y + simplexVertices[0].Y);