Adding Contact extension
This commit is contained in:
parent
f2272b0555
commit
b8786c2aaf
53
axios/Engine/Extensions/Contact.cs
Normal file
53
axios/Engine/Extensions/Contact.cs
Normal file
@ -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
|
||||||
|
/// <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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user