X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=tabakrolletjie%2Floader.py;h=4ad1d585787be3cc944575c723708056db76eb8b;hb=da0dc03472ab119b77a4706c6a4d3d581e37b50d;hp=d37120fde77ed23431090626bb97b08f5679d96f;hpb=ab39c18968fd4435bcf1bfcaf89ede5ad08e3f88;p=tabakrolletjie.git diff --git a/tabakrolletjie/loader.py b/tabakrolletjie/loader.py index d37120f..4ad1d58 100644 --- a/tabakrolletjie/loader.py +++ b/tabakrolletjie/loader.py @@ -4,12 +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 = {} @@ -18,7 +25,8 @@ class Loader(object): path = "/".join(parts) rel_path = os.path.join(*path.split("/")) abs_path = os.path.join(self._prefix, rel_path) - print abs_path + if DEBUG: + print abs_path return abs_path def open_file(self, *parts): @@ -28,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"))