示例#1
0
        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);
        }
示例#2
0
        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);
        }