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); }
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(); }
/// <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)); }