diff --git a/axios/Engine/Extensions/Contact.cs b/axios/Engine/Extensions/Contact.cs new file mode 100644 index 0000000..e8c16a8 --- /dev/null +++ b/axios/Engine/Extensions/Contact.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FarseerPhysics.Dynamics.Contacts; +using Microsoft.Xna.Framework; + +namespace Axios.Engine.Extensions +{ + public enum CollisionDirection + { + Right, + Left, + Top, + Bottom + } + public static class AxiosExtensions_Contact + { + /// http://farseerphysics.codeplex.com/discussions/281783 + /// + /// Returns the direction that the collision happened. + /// Should be used in the event OnAfterCollision + /// + /// + /// + public static CollisionDirection Direction(this Contact c) + { + CollisionDirection direction; + // Work out collision direction + Vector2 colNorm = c.Manifold.LocalNormal; + if (Math.Abs(colNorm.X) > Math.Abs(colNorm.Y)) + { + // X direction is dominant + if (colNorm.X > 0) + direction = CollisionDirection.Right; + else + direction = CollisionDirection.Left; + } + else + { + // Y direction is dominant + if (colNorm.Y > 0) + direction = CollisionDirection.Top; + else + direction = CollisionDirection.Bottom; + } + + + + return direction; + } + } +}