def _generate_grid(self, tile_size: int) -> List[List[TileSprite]]: """Initialize a grid of Tiles, add to self Sprite Group.""" grid = [] x_offset = 0 board_type = GameStateModel.instance().game_board.board_type file_path = self.choose_board(board_type) tile_images = Spritesheet(file_path, 10, 8).cell_images for i in range(0, self.width): grid.append([]) y_offset = 0 for j in range(0, self.height): image = tile_images[j][i] tile_sprite = TileSprite(image, self._fire_image, self._smoke_image, self.rect.x, self.rect.y, x_offset, y_offset, j, i) grid[i].append(tile_sprite) tile_model = GameStateModel.instance().game_board.get_tile_at( int(y_offset / 128), int(x_offset / 128)) tile_model.add_observer(tile_sprite) east_obstacle = tile_model.get_obstacle_in_direction("East") south_obstacle = tile_model.get_obstacle_in_direction("South") if east_obstacle: if isinstance(east_obstacle, DoorModel): door = DoorSprite(east_obstacle, "vertical", tile_sprite, tile_model, (j, i, "East")) door.button = RectButton(x_offset + 128 - 5, y_offset, 14, 125, Color.BLACK) self.door_buttons.append(door.button_input) self.doors.append(door) if isinstance(east_obstacle, WallModel): wall = WallSprite(east_obstacle, "vertical", tile_sprite, tile_model, (j, i, "East")) wall.button = RectButton(x_offset + 128 - 5, y_offset, 14, 125, Color.BLACK) self.wall_buttons.append(wall.button) self.walls.append(wall) if south_obstacle: if isinstance(south_obstacle, DoorModel): door = DoorSprite(south_obstacle, "horizontal", tile_sprite, tile_model, (j, i, "South")) door.button = RectButton(x_offset, y_offset + 128 - 5, 125, 14, Color.BLACK) self.door_buttons.append(door.button_input) self.doors.append(door) if isinstance(south_obstacle, WallModel): wall = WallSprite(south_obstacle, "horizontal", tile_sprite, tile_model, (j, i, "South")) wall.button = RectButton(x_offset, y_offset + 128 - 5, 125, 14, Color.BLACK) self.wall_buttons.append(wall.button) self.walls.append(wall) self.add(grid[i][j]) y_offset += tile_size x_offset += tile_size return grid
class PermissionPrompt(object): """Prompt for the player deciding whether to allow to be commanded or not.""" def __init__(self): self.accept_button = RectButton( 500 - 75, 310, 75, 50, Color.ORANGE, 0, Text(pygame.font.SysFont('Agency FB', 20), "Accept", Color.GREEN2)) self.accept_button.change_bg_image(WOOD) self.accept_button.add_frame(FRAME) self.deny_button = RectButton( 500 + 300, 310, 75, 50, Color.ORANGE, 0, Text(pygame.font.SysFont('Agency FB', 20), "Deny", Color.GREEN2)) self.deny_button.change_bg_image(WOOD) self.deny_button.add_frame(FRAME) self.accept_button.on_click(self._accept_on_click) self.deny_button.on_click(self._deny_on_click) self._source = None self._target = None self.background = RectLabel( 500, 300, 300, 75, Color.GREY, 0, Text(pygame.font.SysFont('Agency FB', 20), "Permission?", Color.GREEN2)) self.background.change_bg_image(WOOD) self.background.add_frame(FRAME) self._enabled = False def _send_reply_event(self, reply: bool): if Networking.get_instance().is_host: Networking.get_instance().send_to_all_client( PermissionReplyEvent(reply, self._source, self._target)) else: Networking.get_instance().send_to_server( PermissionReplyEvent(reply, self._source, self._target)) def _deny_on_click(self): self.enabled = False self._send_reply_event(False) def _accept_on_click(self): self.enabled = False self._send_reply_event(True) def update(self, event_queue: EventQueue): if self._enabled: self.background.update(event_queue) self.accept_button.update(event_queue) self.deny_button.update(event_queue) def draw(self, screen): if self._enabled: self.background.draw(screen) self.accept_button.draw(screen) self.deny_button.draw(screen) @property def enabled(self) -> bool: return self._enabled @enabled.setter def enabled(self, enable: bool): self._enabled = enable @property def command(self) -> Tuple[PlayerModel, PlayerModel]: return self._source, self._target @command.setter def command(self, command: Tuple[PlayerModel, PlayerModel]): self._source = command[0] self._target = command[1] self.background.change_text( Text(pygame.font.SysFont('Agency FB', 20), f"{self._source.nickname} wants to command you", Color.GREEN2)) self.background.change_bg_image(WOOD) self.background.add_frame(FRAME)