public Position Shove(Creature target, int distance)
{
var attackerPosition = this.GetPosition();
var targetPosition = target.GetPosition();
var newPos = attackerPosition.GetRelative(targetPosition, distance);
Position intersection;
if (target.Region.Collisions.Find(targetPosition, newPos, out intersection))
newPos = targetPosition.GetRelative(intersection, -50);
target.SetPosition(newPos.X, newPos.Y);
return newPos;
}