private MapInfoBuilder GetStandardMapInfoBuilderForTemplates() { var builder = new MapInfoBuilder(); var l1ConnectivityMap = new ConnectivityMap(); l1ConnectivityMap.AddRoomConnection(1, 2); l1ConnectivityMap.AddRoomConnection(2, 3); var corridor1 = new RoomTemplateTerrain[1, 3]; var corridor2 = new RoomTemplateTerrain[3, 1]; var room1 = new RoomTemplateTerrain[4, 4]; var l1RoomList = new List <TemplatePositioned>(); l1RoomList.Add(new TemplatePositioned(1, 1, 0, new RoomTemplate(corridor1), 0)); l1RoomList.Add(new TemplatePositioned(1, 1, 0, new RoomTemplate(corridor2), 1)); l1RoomList.Add(new TemplatePositioned(1, 1, 0, new RoomTemplate(room1), 2)); var l1DoorDict = new Dictionary <Connection, Point>(); l1DoorDict.Add(new Connection(2, 3), new Point(5, 5)); builder.AddConstructedLevel(0, l1ConnectivityMap, l1RoomList, l1DoorDict, 1); return(builder); }
public void MapWithTwoNonConnectedCyclesGivesTwoCyclesInAllCycles() { //Build a graph with one nested cycle ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle 1 newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 4); newMap.AddRoomConnection(4, 3); newMap.AddRoomConnection(5, 6); //Cycle 2 newMap.AddRoomConnection(6, 7); newMap.AddRoomConnection(7, 8); newMap.AddRoomConnection(8, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var allCycles = cycleReducer.AllCycles; Assert.AreEqual(2, allCycles.Count); }
public ConnectivityMap GenerateConnectivityMapNoCycles(int numberNodes, double branchingRatio) { var map = new ConnectivityMap(); var terminalNodes = new HashSet <int> { 0, 1 }; var nextNodeIndex = 2; map.AddRoomConnection(0, 1); while (nextNodeIndex < numberNodes) { var randomChance = rand.NextDouble(); int sourceVertex; if (randomChance < branchingRatio) { sourceVertex = rand.Next(nextNodeIndex); } else { sourceVertex = terminalNodes.RandomElementUsing(rand); } map.AddRoomConnection(sourceVertex, nextNodeIndex); terminalNodes.Remove(sourceVertex); terminalNodes.Add(nextNodeIndex); nextNodeIndex++; } return(map); }
public void MapCycleReducerRemovesOneCycleInInputMap() { //Build a graph with one nested cycle ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var roomMapping = cycleReducer.roomMappingFullToNoCycleMap; //Confirm that all the cycle nodes are mapped to the first node Assert.AreEqual(roomMapping[3], 3); Assert.AreEqual(roomMapping[4], 3); Assert.AreEqual(roomMapping[5], 3); }
public void SingleCycleInMapCanBeRetrievedWhenCycleSpecifiedInADifferentOrder() { //Build a graph with one nested cycle ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 4); newMap.AddRoomConnection(4, 3); newMap.AddRoomConnection(5, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var allCycles = cycleReducer.AllCycles; var expectedCycles = new List <List <Connection> > { new List <Connection> { new Connection(3, 5), new Connection(5, 4), new Connection(4, 3) } }; //Can't know whether the list will be returned in 'clockwise' or 'anticlockwise' ordering Assert.AreEqual(allCycles.Count, expectedCycles.Count); CollectionAssert.AreEquivalent(allCycles[0], expectedCycles[0]); }
public void MapCycleReducerMapsReducedCycleNodeBackToOriginalNodes() { //Build a graph with one nested cycles ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var roomMapping = cycleReducer.roomMappingNoCycleToFullMap; //Confirm that all the first node in the cycle maps back to all the collapsed nodes CollectionAssert.AreEquivalent(new List <int> { 3, 4, 5 }, roomMapping[3]); }
public void MapCycleReducerMapsNonReducedNodeBackToThemselves() { //Build a graph with one nested cycles ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var roomMapping = cycleReducer.roomMappingNoCycleToFullMap; //Confirm that all the first node in the cycle maps back to all the collapsed nodes CollectionAssert.AreEquivalent(new List <int>(new int[] { 1 }), roomMapping[1]); CollectionAssert.AreEquivalent(new List <int>(new int[] { 2 }), roomMapping[2]); CollectionAssert.AreEquivalent(new List <int>(new int[] { 6 }), roomMapping[6]); }
public void MapCycleReducerMapsContainsCorrectMappingForUnchangedEdgesInReducedMap() { //Build a graph with one nested cycles ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); //Exterior connections newMap.AddRoomConnection(5, 6); newMap.AddRoomConnection(6, 7); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var edgeMapping = cycleReducer.edgeMappingNoCycleToFullMap; Assert.AreEqual(new Connection(1, 2), edgeMapping[new Connection(1, 2)].Ordered); Assert.AreEqual(new Connection(2, 3), edgeMapping[new Connection(2, 3)].Ordered); Assert.AreEqual(new Connection(6, 7), edgeMapping[new Connection(6, 7)].Ordered); }
public void MapCycleReducerMapsContainsAMappingForEachEdgeInReducedMap() { //Build a graph with one nested cycles ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); //Exterior connections newMap.AddRoomConnection(5, 6); newMap.AddRoomConnection(4, 7); newMap.AddRoomConnection(4, 8); newMap.AddRoomConnection(3, 9); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); Assert.AreEqual(6, cycleReducer.edgeMappingNoCycleToFullMap.Count()); }
public void RoomsOnSideOfOriginInSplitMapAreInSameComponentAndViceVersa() { ConnectivityMap standardMap = BuildStandardTestMap(); MapSplitter splitter = new MapSplitter(standardMap.RoomConnectionGraph.Edges, standardMap.GetEdgeBetweenRooms(9, 10), 1); Assert.AreEqual(splitter.RoomComponentIndex(9), splitter.OriginComponentIndex); Assert.AreEqual(splitter.RoomComponentIndex(10), splitter.NonOriginComponentIndex); }
/// <summary> /// Add first level, or level without other connections /// </summary> public void AddConstructedLevel(int levelNo, ConnectivityMap levelMap, List <TemplatePositioned> roomsInLevelCoords, Dictionary <Connection, Point> doorsInLevel, int startRoom) { AddConstructedLevelItems(levelNo, levelMap, roomsInLevelCoords, doorsInLevel); fullMap = levelMap; this.startRoom = startRoom; }
public void AddingSameEdgeTwiceDoesntMakeTwoEdges() { ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(1, 2); Assert.AreEqual(1, newMap.RoomConnectionGraph.EdgeCount); }
public void CyclesOnSeparateLevelsCanBeReturned() { var builder = new MapInfoBuilder(); var l1ConnectivityMap = new ConnectivityMap(); //Cycle in level 1 l1ConnectivityMap.AddRoomConnection(1, 2); l1ConnectivityMap.AddRoomConnection(2, 3); l1ConnectivityMap.AddRoomConnection(3, 1); var l1RoomList = new List <TemplatePositioned>(); var room1 = new TemplatePositioned(1, 1, 0, null, 1); l1RoomList.Add(room1); l1RoomList.Add(new TemplatePositioned(1, 1, 0, null, 2)); l1RoomList.Add(new TemplatePositioned(1, 1, 0, null, 3)); var l2ConnectivityMap = new ConnectivityMap(); //Cycle in level 2 l2ConnectivityMap.AddRoomConnection(5, 6); l2ConnectivityMap.AddRoomConnection(6, 7); l2ConnectivityMap.AddRoomConnection(7, 5); var l2RoomList = new List <TemplatePositioned>(); var room5 = new TemplatePositioned(1, 1, 0, null, 5); l2RoomList.Add(room5); l2RoomList.Add(new TemplatePositioned(1, 1, 0, null, 6)); l2RoomList.Add(new TemplatePositioned(1, 1, 0, null, 7)); builder.AddConstructedLevel(0, l1ConnectivityMap, l1RoomList, new Dictionary <Connection, Point>(), 1); builder.AddConstructedLevel(1, l2ConnectivityMap, l2RoomList, new Dictionary <Connection, Point>(), new Connection(3, 5)); var mapInfo = new MapInfo(builder); var cyclesOnLevel0 = mapInfo.GetCyclesOnLevel(0).ToList(); Assert.AreEqual(1, cyclesOnLevel0.Count()); CollectionAssert.AreEquivalent(cyclesOnLevel0[0], new List <Connection> { new Connection(1, 2), new Connection(2, 3), new Connection(3, 1) }); var cyclesOnLevel1 = mapInfo.GetCyclesOnLevel(1).ToList(); Assert.AreEqual(1, cyclesOnLevel1.Count()); CollectionAssert.AreEquivalent(cyclesOnLevel1[0], new List <Connection> { new Connection(5, 6), new Connection(6, 7), new Connection(7, 5) }); }
public void CluesCanBePlacedInRoomIfOnlyOneRoomPossible() { ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); var mapNoCycles = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var mapMST = new MapMST(mapNoCycles.mapNoCycles.Edges); var manager = new DoorAndClueManager(mapNoCycles, 1); Assert.IsNotNull(manager.PlaceDoorAndClue(new DoorRequirements(new Connection(1, 2), "lock0"), 1)); }
public void RoomsOnSideOfOriginInMultiplySplitMapAreInOneComponent() { ConnectivityMap standardMap = BuildStandardTestMap(); var edgesToSplit = new List <TaggedEdge <int, string> >(); edgesToSplit.Add(standardMap.GetEdgeBetweenRooms(10, 11)); edgesToSplit.Add(standardMap.GetEdgeBetweenRooms(3, 5)); MapSplitter splitter = new MapSplitter(standardMap.RoomConnectionGraph.Edges, edgesToSplit, 1); CollectionAssert.AreEquivalent(new List <int>(new int[] { 1, 2, 3, 4, 7, 8, 9, 10 }), splitter.MapComponent(splitter.OriginComponentIndex).ToList()); }
public MapInfo(MapInfoBuilder builder) { rooms = builder.Rooms; roomToLevelMapping = builder.RoomLevelMapping; map = builder.FullConnectivityMap; startRoom = builder.StartRoom; doors = builder.Doors; model = new MapModel(map, startRoom); BuildRoomIndices(); }
public void DoesNotContainEdgeNotInMap() { //Build a simple graph ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); newMap.AddRoomConnection(3, 4); newMap.GetEdgeBetweenRooms(2, 4); }
/// <summary> /// Add second or subsequent level. /// </summary> public void AddConstructedLevel(int levelNo, ConnectivityMap levelMap, List <TemplatePositioned> roomsInLevelCoords, Dictionary <Connection, Point> doorsInLevel, Connection connectionBetweenLevels) { if (connectivityMap.Count == 0) { throw new ApplicationException("Need to add first level before using this method"); } AddConstructedLevelItems(levelNo, levelMap, roomsInLevelCoords, doorsInLevel); //Combine into full map fullMap.AddAllConnections(levelMap); fullMap.AddRoomConnection(connectionBetweenLevels); }
public void ContainEdgeInMap() { //Build a simple graph ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); var edge = newMap.GetEdgeBetweenRooms(1, 2); Assert.AreEqual(edge.Source, 1); Assert.AreEqual(edge.Target, 2); }
/** Build a map using templated rooms */ public Map GenerateMapBranchRooms() { //Load sample templates RoomTemplate branchRoom = RoomTemplateLoader.LoadTemplateFromFile("RogueBasin.bin.Debug.vaults.branchroom.room", StandardTemplateMapping.terrainMapping); RoomTemplate chamber1Doors = RoomTemplateLoader.LoadTemplateFromFile("RogueBasin.bin.Debug.vaults.chamber7x3_1door.room", StandardTemplateMapping.terrainMapping); RoomTemplate chamber2Doors = RoomTemplateLoader.LoadTemplateFromFile("RogueBasin.bin.Debug.vaults.chamber7x3_2door.room", StandardTemplateMapping.terrainMapping); RoomTemplate corridor1 = RoomTemplateLoader.LoadTemplateFromFile("RogueBasin.bin.Debug.vaults.corridortemplate3x1.room", StandardTemplateMapping.terrainMapping); //Build a network of branched corridors //Add to stores roomTemplates.Add(branchRoom); corridorTemplates.Add(corridor1); //Create generator (guess initial cache size) var mapBuilder = new TemplatedMapBuilder(100, 100); var templatedGenerator = new TemplatedMapGenerator(mapBuilder); //Place branch rooms to form the initial structure, joined on long axis PlaceOriginRoom(templatedGenerator, branchRoom); PlaceRandomConnectedRooms(templatedGenerator, 3, branchRoom, corridor1, 0, 0, () => Game.Random.Next(1) > 0 ? 3 : 4); //Add some 2-door rooms PlaceRandomConnectedRooms(templatedGenerator, 10, chamber2Doors, corridor1, 0, 0); //Add some 1-door deadends PlaceRandomConnectedRooms(templatedGenerator, 10, chamber1Doors, corridor1, 0, 0); //Add some extra connections, if doors are available AddCorridorsBetweenOpenDoors(templatedGenerator, 10); //Replace spare doors with walls templatedGenerator.ReplaceUnconnectedDoorsWithTerrain(RoomTemplateTerrain.Wall); Map masterMap = mapBuilder.MergeTemplatesIntoMap(terrainMapping); var mapRooms = templatedGenerator.GetRoomTemplatesInWorldCoords(); var firstRoom = mapRooms[0]; masterMap.PCStartLocation = new Point(firstRoom.X + firstRoom.Room.Width / 2, firstRoom.Y + firstRoom.Room.Height / 2); LogFile.Log.LogEntryDebug("Player start location (map coords) " + new Point(firstRoom.X + firstRoom.Room.Width / 2, firstRoom.Y + firstRoom.Room.Height / 2), LogDebugLevel.High); connectivityMap = templatedGenerator.ConnectivityMap; return(masterMap); }
private void AddConstructedLevelItems(int levelNo, ConnectivityMap levelMap, List <TemplatePositioned> roomsInLevelCoords, Dictionary <Connection, Point> doorsInLevel) { foreach (var r in roomsInLevelCoords) { roomTemplates.Add(r.RoomIndex, r); roomLevels.Add(r.RoomIndex, levelNo); } connectivityMap.Add(levelMap); //Add all new doors foreach (var p in doorsInLevel) { doors.Add(p.Key, new DoorLocationInfo(p.Value, levelNo)); } }
public void MapCycleReducerRemovesMultipleCyclesInInputMap() { //Build a graph with one two nested cycles ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 6); //Cycle newMap.AddRoomConnection(6, 7); newMap.AddRoomConnection(7, 8); newMap.AddRoomConnection(8, 9); newMap.AddRoomConnection(9, 10); newMap.AddRoomConnection(10, 11); newMap.AddRoomConnection(11, 6); newMap.AddRoomConnection(9, 6); newMap.AddRoomConnection(11, 12); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); var roomMapping = cycleReducer.roomMappingFullToNoCycleMap; //Confirm that all the first cycle nodes are mapped to the first node in the cycle Assert.AreEqual(3, roomMapping[3]); Assert.AreEqual(3, roomMapping[4]); Assert.AreEqual(3, roomMapping[5]); //Confirm that all the second cycle nodes are mapped to the first node in the second cycle Assert.AreEqual(6, roomMapping[6]); Assert.AreEqual(6, roomMapping[7]); Assert.AreEqual(6, roomMapping[8]); Assert.AreEqual(6, roomMapping[9]); Assert.AreEqual(6, roomMapping[10]); Assert.AreEqual(6, roomMapping[11]); }
public void ConnectionCanBeAddedFromAnotherMap() { ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); ConnectivityMap newMap2 = new ConnectivityMap(); newMap2.AddRoomConnection(3, 4); newMap2.AddRoomConnection(4, 5); newMap.AddAllConnections(newMap2); CollectionAssert.AreEquivalent(new List <Connection>(new Connection[] { new Connection(1, 2), new Connection(2, 3), new Connection(3, 4), new Connection(4, 5) }), newMap.GetAllConnections().ToList()); }
public void Connects_GetDirectedEdges_EdgesWithoutArrowsAreExcluded_withArrowHeads2() { var page1 = this.GetNewPage(); var shapes = this.draw_standard_shapes(page1); this.connect(shapes[0], shapes[1], true, true); this.connect(shapes[1], shapes[2], true, true); var ch1 = new VisioAutomation.DocumentAnalysis.ConnectorHandling(); ch1.NoArrowsHandling = VisioAutomation.DocumentAnalysis.NoArrowsHandling.ExcludeEdge; var edges1 = VisioAutomation.DocumentAnalysis.ConnectionAnalyzer.GetDirectedEdges(page1, ch1); var map1 = new ConnectivityMap(edges1); Assert.AreEqual(3, map1.CountFromNodes()); Assert.IsTrue(map1.HasConnectionFromTo("A", "B")); Assert.IsTrue(map1.HasConnectionFromTo("B", "A")); Assert.IsTrue(map1.HasConnectionFromTo("B", "C")); Assert.IsTrue(map1.HasConnectionFromTo("C", "B")); Assert.AreEqual(1, map1.CountConnectionsFrom("A")); Assert.AreEqual(2, map1.CountConnectionsFrom("B")); Assert.AreEqual(1, map1.CountConnectionsFrom("C")); var ch2 = new VisioAutomation.DocumentAnalysis.ConnectorHandling(); ch2.NoArrowsHandling = VisioAutomation.DocumentAnalysis.NoArrowsHandling.TreatEdgeAsBidirectional; var edges2 = VisioAutomation.DocumentAnalysis.ConnectionAnalyzer.GetTransitiveClosure(page1, ch2); var map2 = new ConnectivityMap(edges2); Assert.AreEqual(3, map2.CountFromNodes()); Assert.IsTrue(map2.HasConnectionFromTo("A", "B")); Assert.IsTrue(map2.HasConnectionFromTo("B", "A")); Assert.IsTrue(map2.HasConnectionFromTo("B", "C")); Assert.IsTrue(map2.HasConnectionFromTo("C", "B")); Assert.IsTrue(map2.HasConnectionFromTo("A", "C")); Assert.IsTrue(map2.HasConnectionFromTo("C", "A")); Assert.AreEqual(2, map2.CountConnectionsFrom("A")); Assert.AreEqual(2, map2.CountConnectionsFrom("B")); Assert.AreEqual(2, map2.CountConnectionsFrom("C")); page1.Delete(0); }
public void Connects_GetDirectedEdges_EdgesWithoutArrowsAreBidirectional() { var page1 = this.GetNewPage(); var shapes = this.draw_standard_shapes(page1); this.connect(shapes[0], shapes[1], false, false); this.connect(shapes[1], shapes[2], false, false); var options1 = new VA.DocumentAnalysis.ConnectionAnalyzerOptions(); options1.NoArrowsHandling = VA.DocumentAnalysis.NoArrowsHandling.TreatEdgeAsBidirectional; var edges1 = VA.DocumentAnalysis.ConnectionAnalyzer.GetDirectedEdges(page1, options1); var map1 = new ConnectivityMap(edges1); Assert.AreEqual(3, map1.CountFromNodes()); Assert.IsTrue(map1.HasConnectionFromTo("A", "B")); Assert.IsTrue(map1.HasConnectionFromTo("B", "A")); Assert.IsTrue(map1.HasConnectionFromTo("B", "C")); Assert.IsTrue(map1.HasConnectionFromTo("C", "B")); Assert.AreEqual(1, map1.CountConnectionsFrom("A")); Assert.AreEqual(2, map1.CountConnectionsFrom("B")); Assert.AreEqual(1, map1.CountConnectionsFrom("C")); var options2 = new VA.DocumentAnalysis.ConnectionAnalyzerOptions(); options2.NoArrowsHandling = VA.DocumentAnalysis.NoArrowsHandling.TreatEdgeAsBidirectional; var edges2 = VA.DocumentAnalysis.ConnectionAnalyzer.GetDirectedEdgesTransitive(page1, options2); var map2 = new ConnectivityMap(edges2); Assert.AreEqual(3, map2.CountFromNodes()); Assert.IsTrue(map2.HasConnectionFromTo("A", "B")); Assert.IsTrue(map2.HasConnectionFromTo("B", "A")); Assert.IsTrue(map2.HasConnectionFromTo("B", "C")); Assert.IsTrue(map2.HasConnectionFromTo("C", "B")); Assert.IsTrue(map2.HasConnectionFromTo("A", "C")); Assert.IsTrue(map2.HasConnectionFromTo("C", "A")); Assert.AreEqual(2, map2.CountConnectionsFrom("A")); Assert.AreEqual(2, map2.CountConnectionsFrom("B")); Assert.AreEqual(2, map2.CountConnectionsFrom("C")); page1.Delete(0); }
public void RoomsCanBeRetrievedByIndex() { var newTemplate = new TemplatePositioned(9, 9, 0, null, 100); var mapInfoBuilder = new MapInfoBuilder(); var templateList = new List <TemplatePositioned>(); templateList.Add(newTemplate); var map = new ConnectivityMap(); map.AddRoomConnection(new Connection(100, 101)); mapInfoBuilder.AddConstructedLevel(0, map, templateList, new Dictionary <Connection, Point>(), 100); var mapInfo = new MapInfo(mapInfoBuilder); Assert.AreEqual(new Point(9, 9), mapInfo.GetRoom(100).Location); }
private MapInfoBuilder GetStandardMapInfoBuilder() { var builder = new MapInfoBuilder(); var l1ConnectivityMap = new ConnectivityMap(); l1ConnectivityMap.AddRoomConnection(1, 2); l1ConnectivityMap.AddRoomConnection(2, 3); var l1RoomList = new List <TemplatePositioned>(); var room1 = new TemplatePositioned(1, 1, 0, null, 1); l1RoomList.Add(room1); l1RoomList.Add(new TemplatePositioned(1, 1, 0, null, 2)); l1RoomList.Add(new TemplatePositioned(1, 1, 0, null, 3)); var l2ConnectivityMap = new ConnectivityMap(); l2ConnectivityMap.AddRoomConnection(5, 6); l2ConnectivityMap.AddRoomConnection(6, 7); var l2RoomList = new List <TemplatePositioned>(); var room5 = new TemplatePositioned(1, 1, 0, null, 5); l2RoomList.Add(room5); l2RoomList.Add(new TemplatePositioned(1, 1, 0, null, 6)); l2RoomList.Add(new TemplatePositioned(1, 1, 0, null, 7)); var l1DoorDict = new Dictionary <Connection, Point>(); l1DoorDict.Add(new Connection(2, 3), new Point(5, 5)); var l2DoorDict = new Dictionary <Connection, Point>(); l2DoorDict.Add(new Connection(5, 6), new Point(8, 8)); builder.AddConstructedLevel(0, l1ConnectivityMap, l1RoomList, l1DoorDict, 1); builder.AddConstructedLevel(1, l2ConnectivityMap, l2RoomList, l2DoorDict, new Connection(3, 5)); return(builder); }
/** Build a map using templated rooms */ public Map GenerateMap2() { //Load sample templates RoomTemplate room1 = RoomTemplateLoader.LoadTemplateFromFile("RogueBasin.bin.Debug.vaults.vault1.room", StandardTemplateMapping.terrainMapping); RoomTemplate corridor1 = RoomTemplateLoader.LoadTemplateFromFile("RogueBasin.bin.Debug.vaults.corridortemplate3x1.room", StandardTemplateMapping.terrainMapping); //Add to stores roomTemplates.Add(room1); corridorTemplates.Add(corridor1); //Create generator (guess initial cache size) var mapBuilder = new TemplatedMapBuilder(100, 100); var templatedGenerator = new TemplatedMapGenerator(mapBuilder); int roomsToPlace = 100; int maxRoomDistance = 1; var roomsPlaced = PlaceRandomConnectedRooms(templatedGenerator, roomsToPlace, maxRoomDistance); //Add some extra connections, if doors are available var totalExtraConnections = 500; AddCorridorsBetweenOpenDoors(templatedGenerator, totalExtraConnections); //Replace spare doors with walls templatedGenerator.ReplaceUnconnectedDoorsWithTerrain(RoomTemplateTerrain.Wall); Map masterMap = mapBuilder.MergeTemplatesIntoMap(terrainMapping); var mapRooms = templatedGenerator.GetRoomTemplatesInWorldCoords(); var firstRoom = mapRooms[0]; masterMap.PCStartLocation = new Point(firstRoom.X + firstRoom.Room.Width / 2, firstRoom.Y + firstRoom.Room.Height / 2); LogFile.Log.LogEntryDebug("Player start location (map coords) " + new Point(firstRoom.X + firstRoom.Room.Width / 2, firstRoom.Y + firstRoom.Room.Height / 2), LogDebugLevel.High); connectivityMap = templatedGenerator.ConnectivityMap; return(masterMap); }
public void SquashedEdgeIsNotInMapAfterCycleReduction() { //Build a graph with one nested cycle ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); Assert.IsFalse(cycleReducer.IsEdgeInRoomsNoCycles(3, 4)); }
public void RemovedEdgeNotFoundInMapCycleReducer() { //Build a graph with one nested cycle ConnectivityMap newMap = new ConnectivityMap(); newMap.AddRoomConnection(1, 2); newMap.AddRoomConnection(2, 3); //Cycle newMap.AddRoomConnection(3, 4); newMap.AddRoomConnection(4, 5); newMap.AddRoomConnection(3, 5); newMap.AddRoomConnection(5, 6); MapCycleReducer cycleReducer = new MapCycleReducer(newMap.RoomConnectionGraph.Edges); cycleReducer.GetEdgeBetweenRoomsNoCycles(4, 5); }