X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=koperkapel%2Floaders%2Flevelloader.py;h=839c171e8939bcfe3bc450cb2791a6067f9dfd87;hb=7a6f009672c912301b833797d4c135747e425828;hp=124161f37d12fe93dd9681471bf140cced3a3ef5;hpb=bc78ad7ce0a69ad00b10cf29a86d7596c1f90139;p=koperkapel.git diff --git a/koperkapel/loaders/levelloader.py b/koperkapel/loaders/levelloader.py index 124161f..839c171 100644 --- a/koperkapel/loaders/levelloader.py +++ b/koperkapel/loaders/levelloader.py @@ -1,9 +1,51 @@ """Loader a level, using the pygame-zero ResourceLoader infrastructure""" +import os import json from pgzero.loaders import images, ResourceLoader +import os +import random +from pygame.transform import rotate +class Tile: + IMG = None + + @classmethod + def image(cls): + if cls.IMG is None: + raise NotImplementedError() + + return images.load(cls.IMG) + +class RandomizedTile(Tile): + IMGDIR = None + ROTATE = True + + @classmethod + def image(cls): + if cls.IMGDIR is None: + raise NotImplementedError() + + imgdir = os.path.join(os.path.dirname(__file__), '..', 'images', cls.IMGDIR) + imgpath = os.path.splitext(random.choice(os.listdir(imgdir)))[0] + img = images.load(os.path.join(cls.IMGDIR, imgpath)) + + if cls.ROTATE: + img = rotate(img, 90 * random.randint(0, 3)) + + return img + +class Floor(RandomizedTile): + IMGDIR = "floor" + +class Wall(RandomizedTile): + IMGDIR = "wall" + +TILES = { + "cwall": Wall, # rename this everywhere + "floor": Floor, +} class LevelLoader(ResourceLoader): """ Level loader. """ @@ -18,6 +60,7 @@ class LevelLoader(ResourceLoader): self._height = len(level_data['tiles']) self._width = len(level_data['tiles'][0]) self._tiles = level_data['tiles'] + self._tileset = level_data['tileset'] # Consistency check, so we can assume things are correct # in the level renderer for row, row_data in enumerate(self._tiles): @@ -30,7 +73,7 @@ class LevelLoader(ResourceLoader): """Load all the tile images""" for row_data in self._tiles: for tile in row_data: - tile['image'] = images.load(tile['base']) + tile['image'] = TILES[tile['base']].image() levels = LevelLoader('levels')