|
|
@@ -1,8 +1,11 @@
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
-import pygame
|
|
|
+from xml.etree import ElementTree
|
|
|
+import struct
|
|
|
import sys
|
|
|
|
|
|
+import pygame
|
|
|
+
|
|
|
class Tileset(object):
|
|
|
tilesize = 16
|
|
|
RIGHT = 0
|
|
|
@@ -23,7 +26,7 @@ class Tileset(object):
|
|
|
self.tile_width /= self.tilesize
|
|
|
self.tile_height /= self.tilesize
|
|
|
|
|
|
- def _render(self, tile_x, tile_y, pos, direction=RIGHT):
|
|
|
+ def render(self, tile_x, tile_y, pos, direction=RIGHT):
|
|
|
tileset = self.tileset[direction]
|
|
|
if direction == self.RIGHT:
|
|
|
x, y = tile_x, tile_y
|
|
|
@@ -38,15 +41,14 @@ class Tileset(object):
|
|
|
self.screen.blit(tileset, pos, (x, y, self.tilesize, self.tilesize))
|
|
|
|
|
|
def render_person(self, pos, direction):
|
|
|
- self._render(0, 13, pos, direction)
|
|
|
+ self.render(0, 13, pos, direction)
|
|
|
|
|
|
-size = width, height = 640, 480
|
|
|
black = (0, 0, 0)
|
|
|
render_x = 0
|
|
|
render_y = 13*16
|
|
|
|
|
|
pygame.init()
|
|
|
-screen = pygame.display.set_mode(size)
|
|
|
+screen = pygame.display.set_mode((800, 800))
|
|
|
tileset = Tileset(screen)
|
|
|
clock = pygame.time.Clock()
|
|
|
|
|
|
@@ -66,6 +68,14 @@ def handle_event(event):
|
|
|
elif event.type == pygame.QUIT:
|
|
|
sys.exit()
|
|
|
|
|
|
+def load_level(): # https://bitbucket.org/r1chardj0n3s/pygame-tutorial/src/a383dd24790d/tmx.py#cl-241
|
|
|
+ level_data = ElementTree.parse('level1.tmx').getroot()
|
|
|
+ raw_data = level_data.findall('layer')[0].findall('data')[0].text.strip()
|
|
|
+ data = raw_data.decode('base64').decode('zlib')
|
|
|
+ level_array = struct.unpack('<{}i'.format(len(data)/4), data) # read as array of 4-byte ints
|
|
|
+ return level_array
|
|
|
+level_array = load_level()
|
|
|
+
|
|
|
direction = Tileset.RIGHT
|
|
|
while True:
|
|
|
clock.tick(60)
|
|
|
@@ -87,5 +97,11 @@ while True:
|
|
|
direction = Tileset.UP
|
|
|
|
|
|
screen.fill(black)
|
|
|
+ for i, tile in enumerate(level_array):
|
|
|
+ x, y = divmod(i, 50)
|
|
|
+ x *= tileset.tilesize
|
|
|
+ y *= tileset.tilesize
|
|
|
+ tile_y, tile_x = divmod(tile - 1, tileset.tilesize) # those 1-indexing fuckers
|
|
|
+ tileset.render(tile_x, tile_y, (y, x))
|
|
|
tileset.render_person((render_x, render_y), direction)
|
|
|
pygame.display.flip()
|