import logging
from functools import partial
logger = logging.getLogger(__name__)
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
logger.addHandler(ch)
logger.setLevel(logging.INFO)
try:
import sdl2.ext
except ImportError:
logger.error('cannot import pysdl2 (is it installed?)')
raise
import pytmx
__all__ = ['load_pysdl2', 'pysdl2_image_loader', ]
flag_names = (
'flipped_horizontally',
'flipped_vertically',
'flipped_diagonally',)
def pysdl2_image_loader(renderer, filename, colorkey, **kwargs):
def convert(surface):
texture_ = sdl2.SDL_CreateTextureFromSurface(renderer.renderer, surface)
sdl2.SDL_SetTextureBlendMode(texture_, sdl2.SDL_BLENDMODE_BLEND)
sdl2.SDL_FreeSurface(surface)
return texture_
def load_image(rect=None, flags=None):
if rect:
try:
flip = 0
if flags.flipped_horizontally:
flip |= sdl2.SDL_FLIP_HORIZONTAL
if flags.flipped_vertically:
flip |= sdl2.SDL_FLIP_VERTICAL
if flags.flipped_diagonally:
flip |= 4
rect = sdl2.rect.SDL_Rect(*rect)
return texture, rect, flip
except ValueError:
logger.error('Tile bounds outside bounds of tileset image')
raise
else:
return texture, None, 0
image = sdl2.ext.load_image(filename)
if colorkey:
colorkey = sdl2.ext.string_to_color('#' + colorkey)
key = sdl2.SDL_MapRGB(image.format, *colorkey[:3])
sdl2.SDL_SetColorKey(image, sdl2.SDL_TRUE, key)
texture = convert(image)
return load_image
def load_pysdl2(renderer, filename, *args, **kwargs):
kwargs['image_loader'] = partial(pysdl2_image_loader, renderer)
return pytmx.TiledMap(filename, *args, **kwargs)