public void NavigationService_weighs_values() { RoomService roomService = NSubstitute.Substitute.For <RoomService>(); FloorPlan plan = new FloorPlan(20, 20, fill: true); RoomPlan roomPlan = new RoomPlan { Name = "Test", Width = 5, Height = 5, WallValue = 20, FloorValue = 1, DoorTile = new DoorTile(4, 2, cost: 3, notes: "Door") }; IFloorRoom room = roomService.GenerateRoom(roomPlan); plan.AddRoom(room, new Location(3, 12)); var display = plan.Print(); Debug.WriteLine(display); NavigationService navService = NSubstitute.Substitute.For <NavigationService>(plan); var path = navService.FindPath(new Location(1, 1), new Location(5, 14)); display = plan.Print(path); Debug.Write(display); }
public List <Location> Navigate(Location start, Location end, List <Location> path) { List <Location> pathSoFar = path; IFloorRoom room = FloorPlan.GetRoom(start); if (room == FloorPlan.GetRoom((end))) { pathSoFar.AddRange(FindPath(start, end)); return(pathSoFar); } else { var doors = room.DoorTiles; foreach (var door in room.DoorTiles) { pathSoFar.AddRange(Pathfinder.FindPath(start, door.Point)); var exitTile = door.ExitTile; Navigate(exitTile.Point, end, pathSoFar); } } return(pathSoFar); }
public void RoomService_generates_room() { RoomService service = NSubstitute.Substitute.For <RoomService>(); // North door RoomPlan roomType = new RoomPlan { Name = "Test", Width = 3, Height = 3, WallValue = 5, FloorValue = 1, DoorTile = new DoorTile(1, 0, cost: 3, notes: "Door") }; IFloorRoom room = service.GenerateRoom(roomType); string display = room.FloorTiles.Print(); Debug.WriteLine(display); display.ShouldBeEquivalentTo("535" + Environment.NewLine + "5_5" + Environment.NewLine + "555" + Environment.NewLine); // East door roomType.DoorTile = new DoorTile(2, 1, cost: 3, notes: "Door"); room = service.GenerateRoom(roomType); display = room.FloorTiles.Print(); Debug.WriteLine(display); display.ShouldBeEquivalentTo("555" + Environment.NewLine + "5_3" + Environment.NewLine + "555" + Environment.NewLine); // South door roomType.DoorTile = new DoorTile(1, 2, cost: 3, notes: "Door"); room = service.GenerateRoom(roomType); display = room.FloorTiles.Print(); Debug.WriteLine(display); display.ShouldBeEquivalentTo("555" + Environment.NewLine + "5_5" + Environment.NewLine + "535" + Environment.NewLine); // West door roomType.DoorTile = new DoorTile(0, 1, cost: 3, notes: "Door"); room = service.GenerateRoom(roomType); display = room.FloorTiles.Print(); Debug.WriteLine(display); display.ShouldBeEquivalentTo("555" + Environment.NewLine + "3_5" + Environment.NewLine + "555" + Environment.NewLine); // North door wide roomType.Width = 4; roomType.DoorTile = new DoorTile(1, 0, cost: 3, notes: "Door"); room = service.GenerateRoom(roomType); display = room.FloorTiles.Print(); Debug.WriteLine(display); display.ShouldBeEquivalentTo("5355" + Environment.NewLine + "5__5" + Environment.NewLine + "5555" + Environment.NewLine); }
public void AddRoom(IFloorRoom room, Location origin) { var placedRoom = room.Shift(origin); FloorRooms.Add(placedRoom); foreach (var tile in placedRoom.FloorTiles) { if (tile.X < Width && tile.Y < Height) { var oldTile = GetFloorTile(tile.X, tile.Y); if (oldTile != null) { FloorTiles.Remove(oldTile); } FloorTiles.Add(tile); } } }
public void AddRoom(IFloorRoom room) { AddRoom(room, new Location(0, 0)); }