From 377df892471fd282843b5521b4f8e095f7e7bfb2 Mon Sep 17 00:00:00 2001 From: Andreas Torebring Date: Sun, 10 Mar 2024 21:23:21 +0100 Subject: [PATCH] Calc coll vector for circle and oriented rect --- .../CollisionComponent.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cs/MonoGame.Extended.Collisions/CollisionComponent.cs b/src/cs/MonoGame.Extended.Collisions/CollisionComponent.cs index d9211682..56206d13 100644 --- a/src/cs/MonoGame.Extended.Collisions/CollisionComponent.cs +++ b/src/cs/MonoGame.Extended.Collisions/CollisionComponent.cs @@ -267,8 +267,16 @@ namespace MonoGame.Extended.Collisions private static Vector2 PenetrationVector(CircleF circleA, OrientedRectangle orientedRectangleB) { - return new Vector2(); - throw new NotImplementedException(); + var rotation = Matrix2.CreateRotationZ(orientedRectangleB.Orientation.Rotation); + var circleCenterInRectangleSpace = rotation.Transform(circleA.Center - orientedRectangleB.Center); + var circleInRectangleSpace = new CircleF(circleCenterInRectangleSpace, circleA.Radius); + var boundingRectangle = new BoundingRectangle(new Point2(), orientedRectangleB.Radii); + + var penetrationVector = PenetrationVector(circleInRectangleSpace, boundingRectangle); + var inverseRotation = Matrix2.CreateRotationZ(-orientedRectangleB.Orientation.Rotation); + var transformedPenetration = inverseRotation.Transform(penetrationVector); + + return transformedPenetration; } private static Vector2 PenetrationVector(RectangleF rect, CircleF circ)