Reorganise level jsohn structure. Drop 'pos' attribute in favour of the array positio...
[koperkapel.git] / koperkapel / loaders / levelloader.py
1 """Loader a level, using the pygame-zero ResourceLoader infrastructure"""
2
3 import json
4
5 from pgzero.loaders import images, ResourceLoader
6
7
8 class LevelLoader(ResourceLoader):
9     """ Level loader. """
10
11     EXTNS = ['json']
12     TYPE = 'level'
13
14     def _load(self, level_path):
15         f = open(level_path, 'r')
16         level_data = json.load(f)
17         f.close()
18         self._height = len(level_data['tiles'])
19         self._width = len(level_data['tiles'][0])
20         self._tiles = level_data['tiles']
21         # Consistency check, so we can assume things are correct
22         # in the level renderer
23         for row, row_data in enumerate(self._tiles):
24             if len(row_data) != self._width:
25                 raise RuntimeError("Incorrect len for row %d" % row)
26         self._load_tile_images()
27         return level_data
28
29     def _load_tile_images(self):
30         """Load all the tile images"""
31         for row_data in self._tiles:
32             for tile in row_data:
33                 tile['image'] = images.load(tile['base'])
34
35
36 levels = LevelLoader('levels')