Exemplo n.º 1
0
    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
Exemplo n.º 2
0
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)