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