54 lines
1.5 KiB
C#
54 lines
1.5 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|