summaryrefslogtreecommitdiffstats
path: root/tileset.py
diff options
context:
space:
mode:
Diffstat (limited to 'tileset.py')
-rw-r--r--tileset.py38
1 files changed, 24 insertions, 14 deletions
diff --git a/tileset.py b/tileset.py
index f24efd6..c13d863 100644
--- a/tileset.py
+++ b/tileset.py
@@ -41,14 +41,27 @@ class Tileset(object):
y *= self.TILESIZE
self.screen.blit(tileset, pos, (x, y, self.TILESIZE, self.TILESIZE))
+ def _render_layer(self, layer):
+ for i, tile in enumerate(layer):
+ y, x = divmod(i, self.MAPSIZE)
+ x *= self.TILESIZE
+ y *= self.TILESIZE
+ if tile != 0:
+ tile_y, tile_x = divmod(tile - 1, self.TILESIZE) # those 1-indexing fuckers
+ self._render(tile_x, tile_y, (x, y))
+
def render_person(self, pos, direction):
self._render(0, 13, pos, direction)
+ def render_level(self):
+ self._render_layer(self.floor)
+ self._render_layer(self.walls)
+
def load_level(self): # https://bitbucket.org/r1chardj0n3s/pygame-tutorial/src/a383dd24790d/tmx.py#cl-241
level_data = ElementTree.parse('level1.tmx').getroot()
layers = level_data.findall('layer')
- if len(layers) != 2:
- raise Exception('expected 2 layers: level and units')
+ if len(layers) != 3:
+ raise Exception('expected 3 layers: floor, wall, and units')
loaded = {}
for layer in layers:
name = layer.attrib['name']
@@ -58,14 +71,18 @@ class Tileset(object):
array = list(struct.unpack('<{}i'.format(len(data)/4), data))
loaded[name] = array
- self.level_array = loaded['level']
- collidables = frozenset([6, 7, 8, 22, 24, 38, 39, 40])
+ # load floor
+ self.floor = loaded['floor']
+
+ # load wall
+ self.walls = loaded['wall']
collisions = set()
- for i, tile in enumerate(loaded['level']):
- if tile in collidables:
+ for i, tile in enumerate(loaded['wall']):
+ if tile != 0:
y, x = divmod(i, self.MAPSIZE)
collisions.add((x, y))
+ # load units
units = {
self.ENEMY1: [],
self.PLAYER: [],
@@ -76,12 +93,5 @@ class Tileset(object):
units[tile].append((x, y))
if len(units[self.PLAYER]) != 1:
raise Exception('expected exactly 1 player tile in units layer, found ' + str(len(units[self.PLAYER])))
- return collisions, units
- def render_level(self):
- for i, tile in enumerate(self.level_array):
- y, x = divmod(i, self.MAPSIZE)
- x *= self.TILESIZE
- y *= self.TILESIZE
- tile_y, tile_x = divmod(tile - 1, self.TILESIZE) # those 1-indexing fuckers
- self._render(tile_x, tile_y, (x, y))
+ return collisions, units