public static List <int> GetNonCornerPerimiterPositions(int width, int height) { var perimeter = new List <int>(); for (int i = 0, l = width * height; i < l; i++) { if (RoomMath.CoordinateOnNonCornerPerimeter(Coordinate.FromPosition(i, width), width, height)) { perimeter.Add(i); } } return(perimeter); }
public static List <int> GetPositionsAtDistance(int[] tileTypeMap, int origin, Range permissableDistance, TileType typeOfTile, bool requireStairsPosition, int width) { var matchingPositions = new List <int>(); int height = tileTypeMap.Length / width; for (int i = 0; i < tileTypeMap.Length; i++) { if (tileTypeMap[i] == (int)typeOfTile && (!requireStairsPosition || RoomMath.CoordinateOnNonCornerPerimeter(Coordinate.FromPosition(i, width), width, height)) && permissableDistance.Inside(RoomMath.GetManhattanDistance(origin, i, width))) { matchingPositions.Add(i); } } return(matchingPositions); }