Created
March 15, 2020 12:29
-
-
Save andreivasiliu/bf6a7862f927779e3bf68651301cd97c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def show_map() -> Iterable[str]: | |
yield f"The map has {len(bat_map)} rooms." | |
if not current_room: | |
return | |
yield f"Current room: {current_room.title}" | |
links = bat_links.get(current_room.room_id) | |
if links: | |
inc = len(links.incoming) | |
out = len(links.outgoing) | |
yield f"Current room has {inc} incoming and {out} outgoing links." | |
grid: Dict[Tuple[int, int], Room] = {} | |
place_rooms(current_room, grid, 0, 0) | |
for y in range(-4, 5): | |
rooms = [ | |
"[ ]" if (x, y) in grid else " " | |
for x in range(-5, 5) | |
] | |
yield '' | |
yield ' '.join(rooms) | |
def get_xy_in(direction: str, x: int, y: int) -> Tuple[int, int]: | |
direction_offset = { | |
'north': (0, 1), | |
'northeast': (1, 1), | |
'east': (1, 0), | |
'southeast': (1, -1), | |
'south': (0, -1), | |
'southwest': (-1, -1), | |
'west': (-1, 0), | |
'northwest': (-1, 1), | |
'up': (2, 2), | |
'down': (-2, -2), | |
} | |
offset = direction_offset.get(direction, (2, -2)) | |
return x + offset[0], y + offset[1] | |
def place_rooms(room: Room, grid: Dict[Tuple[int, int], Room], x: int, y: int): | |
if x < -5 or x > 5 or y < -5 or y > 5 or (x, y) in grid: | |
return | |
grid[(x, y)] = room | |
links = bat_links.get(room.room_id) | |
if not links: | |
return | |
for direction in set(links.outgoing).union(set(links.incoming)): | |
outgoing_room = links.outgoing.get(direction) | |
rooms = [outgoing_room] if outgoing_room else [] | |
rooms += links.incoming.get(direction, []) | |
rooms = set(rooms) | |
log("Rooms: {}", rooms) | |
if len(rooms) == 1: | |
other_room = bat_map[rooms[0]] | |
place_rooms(other_room, grid, *get_xy_in(direction, x, y)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment