/// <summary>
/// For PlanarUpDown directions, return Direction.None if the direction cannot be entered,
/// or the direction, adjusted by slopes (i.e. or'ed with Up or Down)
/// </summary>
public static Direction AdjustMoveDir(this IEnvironmentObject env, IntVector3 location, Direction dir)
{
Debug.Assert(dir.IsValid());
Debug.Assert(dir != Direction.None);
Debug.Assert(dir.IsPlanarUpDown());
if (EnvironmentExtensions.CanMoveFromTo(env, location, dir))
{
return(dir);
}
if (dir == Direction.Up || dir == Direction.Down)
{
return(Direction.None);
}
if (EnvironmentExtensions.CanMoveFromTo(env, location, dir | Direction.Up))
{
return(dir | Direction.Up);
}
if (EnvironmentExtensions.CanMoveFromTo(env, location, dir | Direction.Down))
{
return(dir | Direction.Down);
}
return(Direction.None);
}