Source code for pytmx.util_pygame_sdl2

"""
Copyright (C) 2012-2022, Leif Theden <leif.theden@gmail.com>

This file is part of pytmx.

pytmx is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

pytmx is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with pytmx.  If not, see <http://www.gnu.org/licenses/>.
"""
import dataclasses
import logging
from functools import partial
from typing import Tuple

from pygame.rect import Rect

import pytmx

logger = logging.getLogger(__name__)

try:
    from pygame._sdl2 import Texture, Image, Renderer, Window
    import pygame
except ImportError:
    logger.error("cannot import pygame (is it installed?)")
    raise


[docs]@dataclasses.dataclass(order=True) class PygameSDL2Tile: texture: Texture srcrect: Rect size: Tuple[int, int] angle: float = 0.0 center: None = None flipx: bool = False flipy: bool = False
[docs]def handle_flags(flags: pytmx.TileFlags): """ Return angle and flip values for the SDL2 renderer """ if flags is None: return 0.0, False, False if flags.flipped_diagonally: if flags.flipped_vertically: return 270, False, False else: return 90, False, False else: return 0.0, flags.flipped_horizontally, flags.flipped_vertically
[docs]def pygame_sd2_image_loader(renderer: Renderer, filename: str, colorkey, **kwargs): """ pytmx image loader for pygame """ image = pygame.image.load(filename) parent_rect = image.get_rect() texture = Texture.from_surface(renderer, image) def load_image(rect=None, flags=None) -> PygameSDL2Tile: if rect: assert parent_rect.contains(rect) else: rect = parent_rect angle, flipx, flipy = handle_flags(flags) rect = Rect(*rect) size = rect.size return PygameSDL2Tile( texture=texture, srcrect=rect, size=size, angle=angle, center=None, flipx=flipx, flipy=flipy, ) return load_image
[docs]def load_pygame_sdl2(renderer: Renderer, filename: str, *args, **kwargs): """ Load a TMX file, images, and return a TiledMap class """ kwargs["image_loader"] = partial(pygame_sd2_image_loader, renderer) return pytmx.TiledMap(filename, *args, **kwargs)