41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
|
import pygame as pg
|
||
|
import numpy as np
|
||
|
import xml.etree.ElementTree as ET
|
||
|
|
||
|
class Map:
|
||
|
def __init__(self, world):
|
||
|
self.world = world
|
||
|
self.cam = np.array([0.0, 0.0])
|
||
|
self.data = self.load()
|
||
|
self.tileset = pg.image.load('data/tilemap.png')
|
||
|
|
||
|
def draw(self, screen):
|
||
|
# MAP
|
||
|
for i in range(0, 64):
|
||
|
for j in range(0, 64):
|
||
|
k = i * 64 + j
|
||
|
index = int(self.data[k]) - 1
|
||
|
self.draw_tile(screen, (j*32, i*32), index)
|
||
|
|
||
|
# PLAYER
|
||
|
player = self.world.get_player()
|
||
|
self.cam = (player.pos[0] - screen.get_width()/2,
|
||
|
player.pos[1] - screen.get_height()/2)
|
||
|
|
||
|
pg.draw.rect(screen, 'white', (
|
||
|
player.pos[0] - player.size[0]/2.0 - self.cam[0],
|
||
|
player.pos[1] - player.size[1]/2.0 - self.cam[1],
|
||
|
player.size[0],
|
||
|
player.size[1]
|
||
|
))
|
||
|
|
||
|
def draw_tile(self, screen, pos, index):
|
||
|
p = (pos[0] - self.cam[0], pos[1] - self.cam[1])
|
||
|
screen.blit(self.tileset, p, (index * 32, 0, 32, 32))
|
||
|
|
||
|
def load(self):
|
||
|
tree = ET.parse('data/map.tmx')
|
||
|
root = tree.getroot()
|
||
|
csv = root[1][0]
|
||
|
return csv.text.split(',')
|