diff --git a/squirrelbattle/mapgeneration/broguelike.py b/squirrelbattle/mapgeneration/broguelike.py index 4a97e44..f746f37 100644 --- a/squirrelbattle/mapgeneration/broguelike.py +++ b/squirrelbattle/mapgeneration/broguelike.py @@ -26,9 +26,11 @@ DEFAULT_PARAMS = { "spawn_per_region": [1, 2], } -def dist(level, y1, x1, y2, x2): + +def dist(level: List[List[Tile]], y1: int, x1: int, y2: int, x2: int) -> int: """ - Compute the minimum walking distance between points (y1, x1) and (y2, x2) on a Tile grid + Compute the minimum walking distance between points (y1, x1) and (y2, x2) + on a Tile grid """ # simple breadth first search copy = [[t for t in row] for row in level] @@ -60,9 +62,9 @@ class Generator: room: List[List[Tile]], door_y: int, door_x: int, dy: int, dx: int) -> bool: """ - Using point (door_y, door_x) in the room as a reference and placing it + Using point (door_y, door_x) in the room as a reference and placing it over point (y, x) in the level, returns whether or not the room fits - here + here """ lh, lw = len(level), len(level[0]) rh, rw = len(room), len(room[0]) @@ -93,7 +95,7 @@ class Generator: def place_room(level: List[List[Tile]], y: int, x: int, room: List[List[Tile]], door_y: int, door_x: int) -> None: """ - Mutates level in place to add the room. Placement is determined by + Mutates level in place to add the room. Placement is determined by making (door_y, door_x) in the room correspond with (y, x) in the level """ rh, rw = len(room), len(room[0]) @@ -106,11 +108,11 @@ class Generator: @staticmethod def add_loop(level: List[List[Tile]], y: int, x: int) -> bool: """ - Try to add a corridor between two far apart floor tiles, passing + Try to add a corridor between two far apart floor tiles, passing through point (y, x). """ h, w = len(level), len(level[0]) - + if level[y][x] != Tile.EMPTY: return False @@ -128,8 +130,8 @@ class Generator: continue def verify_sides() -> bool: - # switching up dy and dx here pivots the axis, so - # (y+dx, x+dy) and (y-dx, x-dy) are the tiles adjacent to + # switching up dy and dx here pivots the axis, so + # (y+dx, x+dy) and (y-dx, x-dy) are the tiles adjacent to # (y, x), but not on the original axis for delta_x, delta_y in [[dy, dx], [-dy, -dx]]: for i in range(1, y2 - y1 + x2 - x1): @@ -194,8 +196,8 @@ class Generator: dy: int, dx: int, length: int) -> bool: """ Tries to build the exit from the room at given coordinates - Depending on parameter length, it will either attempt to build a - simple door, or a long corridor. Return value is a boolean + Depending on parameter length, it will either attempt to build a + simple door, or a long corridor. Return value is a boolean signifying whether or not the exit was successfully built """ rh, rw = len(room), len(room[0]) @@ -247,15 +249,15 @@ class Generator: if room[y][x] == Tile.EMPTY and \ Generator.build_door(room, y, x, dy, dx, length): break - else: - return None, None + else: # pragma: no cover + return None, None, None, None return y + length * dy, x + length * dx, dy, dx def create_circular_room(self, spawnable: bool = True) \ -> Tuple[List[List[Tile]], int, int, int, int]: """ - Create and return as a tile grid a room that is circular in shape, and + Create and return as a tile grid a room that is circular in shape, and may have a center, also circular hole Also return door info so we know how to place the room in the level """ @@ -298,7 +300,7 @@ class Generator: def create_random_room(self, spawnable: bool = True) \ -> Tuple[List[list], int, int, int, int]: """ - Randomly select a room shape and return one such room along with its + Randomly select a room shape and return one such room along with its door info. Set spawnable to False is the room should be marked as a potential spawning region on the map """ @@ -319,12 +321,12 @@ class Generator: def update_spawnable(self, y: int, x: int) -> None: """ Convert previous spawn positions relative to the room grid to actual - actual spawn positions on the level grid, using the position of the - top left corner of the room on the level, then log them as a + actual spawn positions on the level grid, using the position of the + top left corner of the room on the level, then log them as a spawnable region """ - if self.queued_area != None: - translated_area = [[y+ry, x+rx] for ry, rx in self.queued_area] + if self.queued_area is not None: + translated_area = [[y + ry, x + rx] for ry, rx in self.queued_area] self.spawn_areas.append(translated_area) self.queued_area = None @@ -333,11 +335,6 @@ class Generator: Populate every spawnable area with some randomly chosen, randomly placed entity """ - if self.queued_area is not None: - translated_area = [[y + ry, x + rx] for ry, rx in self.queued_area] - self.spawn_areas.append(translated_area) - self.queued_area = None - min_c, max_c = self.params["spawn_per_region"] for region in self.spawn_areas: entity_count = randint(min_c, max_c)