コード例 #1
0
        public void GenerateRoomsInGrid_Transitions()
        {
            // ARRANGE
            var transition           = RoomTransition.CreateGlobalExit();
            var availableTransitions = new[] { transition };

            var randomMock = new Mock <IRoomGeneratorRandomSource>();

            randomMock.Setup(x => x.RollRoomMatrixPositions(It.IsAny <int>(), It.IsAny <int>()))
            .Returns(new[] { new OffsetCoords(0, 0) });
            randomMock.Setup(x => x.RollTransitions(It.IsAny <IEnumerable <RoomTransition> >()))
            .Returns(new[] { transition });
            randomMock.Setup(x => x.RollRoomSize(It.IsAny <int>(), It.IsAny <int>(), It.IsIn <int>(1)))
            .Returns <int, int, int>((min, max, count) => { return(new[] { new Size(0, 0) }); });
            var random = randomMock.Object;

            var generator = new RoomGenerator(random);

            var expectedTransitions = new[] { transition };

            // ACT
            var factRooms = generator.GenerateRoomsInGrid(1, 1, 1, availableTransitions);

            // ASSERT
            factRooms.ElementAt(0).Transitions.Should().BeEquivalentTo(availableTransitions);
        }
コード例 #2
0
        public void GenerateRoomsInGrid_WithFixLarge_NotThrowsExceptions()
        {
            // ARRANGE
            var random    = new FixLargeRoomGeneratorRandomSource();
            var generator = new RoomGenerator(random);
            var graphMap  = new SectorHexMap();

            // ACT
            Action act = () =>
            {
                var rooms    = generator.GenerateRoomsInGrid(20, 2, 20, new[] { RoomTransition.CreateGlobalExit() });
                var edgeHash = new HashSet <string>();
                generator.CreateRoomNodes(graphMap, rooms, edgeHash);
                generator.BuildRoomCorridors(graphMap, rooms, edgeHash);
            };

            // ASSERT
            act.Should().NotThrow();
        }
コード例 #3
0
        /// <summary>
        /// Создание карты.
        /// </summary>
        /// <param name="options">Параметры создания карты.</param>
        /// <returns>
        /// Возвращает экземпляр карты.
        /// </returns>
        public Task <ISectorMap> CreateAsync(object options)
        {
            const int START_ROOM_SIZE = 2;

            var mapSize = (int)options;

            ISectorMap map = new SectorHexMap();

            MapFiller.FillSquareMap(map, mapSize);

            var startRoomLeftBorder   = mapSize / 2 - START_ROOM_SIZE / 2;
            var startRoomTopBorder    = mapSize / 2 - START_ROOM_SIZE / 2;
            var startRoomRightBorder  = startRoomLeftBorder + START_ROOM_SIZE - 1;
            var startRoomBottomBorder = startRoomTopBorder + START_ROOM_SIZE - 1;

            var startNodes = map.Nodes.OfType <HexNode>()
                             .Where(node => (startRoomLeftBorder <= node.OffsetX && node.OffsetX <= startRoomRightBorder) &&
                                    (startRoomTopBorder <= node.OffsetY && node.OffsetY <= startRoomBottomBorder))
                             .ToArray();
            var startRegion = new MapRegion(1, startNodes)
            {
                IsStart = true,
            };

            var outerNodes  = map.Nodes.Where(x => !startNodes.Contains(x)).ToArray();
            var outerRegion = new MapRegion(2, outerNodes)
            {
                IsOut     = true,
                ExitNodes = new[] { outerNodes.Last() }
            };

            map.Regions.Add(startRegion);
            map.Regions.Add(outerRegion);

            map.Transitions.Add(outerNodes.Last(), RoomTransition.CreateGlobalExit());

            return(Task.FromResult(map));
        }