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;
}