protected override bool tryAddDetails(Models.DungeonLevel Level, Models.Doorway Entrance, Models.Room room) { int numberOfExits = RollNumberOfExits(room.Area); if (numberOfExits == 0) { addHiddenExits(Level, room); } for (int i = 0; i < numberOfExits; i++) { Doorway exit = new Doorway(); do { exit.SideIn = RollExitSide(Entrance.SideIn); if (exit.SideIn == Side.North || exit.SideIn == Side.South) { exit.Height = 0; exit.Width = 1; if (exit.SideIn == Side.North) { exit.y = room.getYEdge(); } else { exit.y = room.y; } exit.x = DiceBag.getDice().rand.Next(room.x, room.getXEdge()); } else { exit.Width = 0; exit.Height = 1; if (exit.SideIn == Side.East) { exit.x = room.getXEdge(); } else { exit.x = room.x; } exit.y = DiceBag.getDice().rand.Next(room.y, room.getYEdge()); } } while (room.hasDoorAt(exit.x, exit.y) && !FindDoorType(Level, exit)); room.Doors.Add(exit); Level.Add(exit); } return(true); }
protected override Models.Room GetComponent(Models.Doorway Entrance) { Models.Room r = new Models.Room(0, 0, 1, 1); switch (Models.DiceBag.getDice().d20()) // TABLE V { case 1: case 2: // 1-2 Square 10' x 10' r.Height = 2; r.Width = 2; break; case 3: case 4: // 3-4 Square 20' x 20' r.Height = 4; r.Width = 4; break; case 5: case 6: // 5-6 Square 30' x 30' r.Height = 6; r.Width = 6; break; case 7: case 8: // 7-8 Square 40' x 40' r.Height = 8; r.Width = 8; break; case 9: case 10: // 9-10 Rectangle 10' x 20' r.Height = 2; r.Width = 4; break; case 11: case 12: case 13: // 11-13 Rectangle 20' x 30' r.Height = 4; r.Width = 6; break; case 14: case 15: // 14-15 Rectangle 20' x 40' r.Height = 4; r.Width = 8; break; case 16: case 17: // 116-17 Rectangle 30' x 40' r.Height = 6; r.Width = 8; break; case 18: case 19: case 20: // Unusual shape and size // TODO implement handling for unusual shapes. r.Height = 6; r.Width = 4; break; } return(r); }