| 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␍␊ |
| /// <summary>␍␊ |
| /// Returns the direction that the collision happened.␍␊ |
| /// Should be used in the event OnAfterCollision␍␊ |
| /// </summary>␍␊ |
| /// <param name="c"></param>␍␊ |
| /// <returns></returns>␍␊ |
| 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;␍␊ |
| }␍␊ |
| }␍␊ |
| }␍␊ |