X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Floader.py;h=4ad1d585787be3cc944575c723708056db76eb8b;hb=923e068edb27b9b6d35359e496668038a1db6fa4;hp=b2ff5270cb8b315203c86594c3e5194fc889fe43;hpb=33618253d33989b6bac55b1109c8e2f9caf9f69c;p=tabakrolletjie.git diff --git a/tabakrolletjie/loader.py b/tabakrolletjie/loader.py index b2ff527..4ad1d58 100644 --- a/tabakrolletjie/loader.py +++ b/tabakrolletjie/loader.py @@ -4,14 +4,19 @@ import json import os import pygame.image +import pygame.font import pygame.display +import pygame.mixer from .constants import DEBUG +from .transforms import NullTransform class Loader(object): """ Load data files from beneath a prefix. """ + NULL_TRANSFORM = NullTransform() + def __init__(self, prefix): self._prefix = prefix self._cache = {} @@ -31,18 +36,37 @@ class Loader(object): with self.open_file("stations", *parts) as f: return json.load(f) - def load_image(self, *parts): + def load_image(self, *parts, **kwargs): """Return a pygame surface of the requested image.""" fn = self.full_path("images", *parts) - img = self._cache.get(fn, None) + transform = kwargs.pop("transform", self.NULL_TRANSFORM) + img = self._cache.get((fn, transform), None) if img is None: img = pygame.image.load(fn) # We assume pygame.display has been initialised # Fix this if that changes img.convert_alpha(pygame.display.get_surface()) - self._cache[fn] = img + img = transform.apply(img) + self._cache[(fn, transform)] = img return img + def load_font(self, *parts, **kwargs): + """Return a pygame font of the given size""" + size = kwargs.get('size', 12) + fn = self.full_path("fonts", *parts) + font = pygame.font.Font(fn, size) + # Do we need to cache this? + return font + + def load_sound(self, *parts): + """Return a pygame sound""" + fn = self.full_path("sounds", *parts) + sound = self._cache.get(fn, None) + if not sound: + sound = pygame.mixer.Sound(fn) + self._cache[fn] = sound + return sound + _DATA_PREFIX = os.path.abspath( os.path.join(os.path.dirname(__file__), "..", "data"))