Example #1
0
        public void Builder_WithSize_LessThanOne_ThrowsArgumentOutOfRangeException(int x, int y)
        {
            var builder = new Map.Builder();

            Assert.That(() => builder.WithSize(x, y),
                        Throws.InstanceOf <ArgumentOutOfRangeException>());
        }
Example #2
0
    private void Generate()
    {
        Assert.IsNotNull(_cellToTileTranslator);
        Assert.IsNotNull(_floorTilemap);
        Assert.IsNotNull(_templates);
        Assert.IsNotNull(_floorTile);

        Map = new Map.Builder()
              .WithSize(_mapSize.x, _mapSize.y)
              .WithRoomSize(_roomSize.x, _roomSize.y)
              .Build();

        var generator = new MapGenerator(Map)
        {
            BranchProbability = _branchProbability,
            MinDensity        = _minDensity
        };

        foreach (var templateRoom in _templates.CreateRooms())
        {
            generator.AddRoomTemplate(templateRoom);
        }

        generator.Generate();
        Map = Map.GetCroppedClone()
              .GetCloneWithExtraBorderRooms(_borderInRooms)
              .CreateRemainingRoomsAndFillWithWalls();

        Redraw();
    }
Example #3
0
        private static void Main(string[] args)
        {
            var map = new Map.Builder()
                      .WithSize(32, 16)
                      .WithRoomSize(4, 4)
                      .Build();

            var room1 = map.CreateRoomTemplate()
                        .SetCell(2, 2, Cells.Wall);

            var room2 = map.CreateRoomTemplate()
                        .SetCell(1, 1, Cells.Wall)
                        .SetCell(2, 2, Cells.Wall);

            var room3 = map.CreateRoomTemplate()
                        .SetCell(2, 2, Cells.Treasure);

            var room4 = map.CreateRoomTemplate()
                        .SetCell(2, 2, Cells.Trap);

            var room5 = map.CreateRoomTemplate();

            var mapGenerator = new MapGenerator(map)
                               .AddRoomTemplates(room1, room2, room3, room4, room5);

            mapGenerator.Generate();

            Console.WriteLine(map);
        }
Example #4
0
        public void TotalSize_ReturnsRoomSizeTimesRoomCount(int width, int height, int roomWidth, int roomHeight)
        {
            var map = new Map.Builder()
                      .WithSize(width, height)
                      .WithRoomSize(roomWidth, roomHeight)
                      .Build();

            Assert.That(map.TotalWidth, Is.EqualTo(width * roomWidth));
            Assert.That(map.TotalHeight, Is.EqualTo(height * roomHeight));
        }
        /**
         * <summary>
         * Converts map into protocol message.</summary>
         *
         * <param name="map">Map to convert.</param>
         * <returns>Protocol message map.</returns>
         */
        private static Map WrapMap <TKey, TVal>(IDictionary <TKey, TVal> map)
        {
            Map.Builder builder = Map.CreateBuilder();

            foreach (KeyValuePair <TKey, TVal> pair in map)
            {
                builder.AddEntry(WrapEntry(pair.Key, pair.Value));
            }

            return(builder.Build());
        }
        /**
         * <summary>
         * Converts map into protocol message.</summary>
         *
         * <param name="map">Map to convert.</param>
         * <returns>Protocol message map.</returns>
         */
        private static Map WrapMap(sc::IDictionary map)
        {
            Map.Builder builder = Map.CreateBuilder();

            foreach (sc::DictionaryEntry pair in map)
            {
                builder.AddEntry(WrapEntry(pair.Key, pair.Value));
            }

            return(builder.Build());
        }
Example #7
0
    public static Map GetCroppedClone([NotNull] this Map map)
    {
        if (map == null)
        {
            throw new ArgumentNullException(nameof(map));
        }
        if (!map.HasBounds(out var bounds))
        {
            throw new InvalidOperationException("The map is empty.");
        }

        var(minX, maxX, minY, maxY) = bounds;

        var width  = maxX - minX + 1;
        var height = maxY - minY + 1;

        var clone = new Map.Builder()
                    .WithSize(width, height)
                    .WithRoomSize(map.RoomWidth, map.RoomHeight)
                    .Build();

        for (var x = 0; x < width; x++)
        {
            for (var y = 0; y < height; y++)
            {
                var sourceX = minX + x;
                var sourceY = minY + y;

                if (!map.TryGetRoomAt(sourceX, sourceY, out var sourceRoom))
                {
                    continue;
                }

                var destinationRoom = clone.CreateRoomAt(x, y);
                sourceRoom.CopyTo(destinationRoom);
            }
        }

        return(clone);
    }