Esempio n. 1
0
        private static TileRect GetCornerRect(LevelCorner corner, int width, int height, int size)
        {
            int minX, maxX, minY, maxY;

            if (corner.IsSouth())
            {
                minY = 0;
                maxY = size - 1;
            }
            else
            {
                minY = height - size;
                maxY = height - 1;
            }

            if (corner.IsEast())
            {
                minX = 0;
                maxX = size - 1;
            }
            else
            {
                minX = width - size;
                maxX = width - 1;
            }

            var rect = new TileRect(minX, minY, maxX, maxY);

            rect.Clamp(width, height);
            return(rect);
        }
Esempio n. 2
0
        private TilePosition GetRandomTileExcludingRect(int width, int height, TileRect excludedRect)
        {
            var totalArea           = width * height;
            var entryRectArea       = excludedRect.Area;
            var availableTilesCount = totalArea - entryRectArea;

            if (availableTilesCount == 0)
            {
                return(new TilePosition(0, 0));
            }
            var exitTileIndex = _random.Next() % availableTilesCount;

            var tileIndex = 0;

            for (var x = 0; x < width; x++)
            {
                for (var y = 0; y < height; y++)
                {
                    var position = new TilePosition(x, y);
                    if (excludedRect.Contains(position))
                    {
                        continue;
                    }

                    if (tileIndex == exitTileIndex)
                    {
                        return(position);
                    }

                    tileIndex++;
                }
            }

            return(TilePosition.Zero);
        }
Esempio n. 3
0
        private TilePosition GetRandomPositionIn(TileRect rect)
        {
            var x = rect.Min.Y + _random.Next() % rect.Width;
            var y = rect.Min.Y + _random.Next() % rect.Height;

            return(new TilePosition(x, y));
        }
Esempio n. 4
0
        public TilePosition GenerateExitPosition(int width, int height, TilePosition entryPosition)
        {
            var minX      = entryPosition.X - _minDistanceFromExitToEntry;
            var minY      = entryPosition.Y - _minDistanceFromExitToEntry;
            var maxX      = entryPosition.X + _minDistanceFromExitToEntry;
            var maxY      = entryPosition.Y + _minDistanceFromExitToEntry;
            var entryRect = new TileRect(minX, minY, maxX, maxY);

            entryRect.Clamp(width, height);

            return(GetRandomTileExcludingRect(width, height, entryRect));
        }