Affichage des tiles

This commit is contained in:
theo@manjaro 2021-07-02 16:18:36 +02:00
parent 78f015a082
commit fe507b304a
2 changed files with 25 additions and 11 deletions

View File

@ -14,7 +14,7 @@
"gridCellHeight": 16, "gridCellHeight": 16,
"gridCellsX": 20, "gridCellsX": 20,
"gridCellsY": 15, "gridCellsY": 15,
"tileset": "Base", "tileset": "base.png",
"dataCoords2D": [ "dataCoords2D": [
[ [
[-1], [-1],
@ -368,4 +368,4 @@
] ]
} }
] ]
} }

View File

@ -10,27 +10,41 @@ class TilesetRenderer(BaseObject):
self.tileh = 64 self.tileh = 64
self.level = game.levels_lib[mapfoldername] self.level = game.levels_lib[mapfoldername]
self.reinit_rects(self.level) self.reinit(self.level)
def draw(self): def draw(self):
for i in self.rects: for layer in self.layers:
self.game.pygame.draw.rect(self.game.window,[255,0,0],(i[0:4])) self.game.window.blit(layer["surface"],(layer["offsets"]))
def reinit_rects(self,level): def reinit(self,level):
json = level["data"] json = level["data"]
name = level["name"] name = level["name"]
self.rects = [] self.rects = []
if "layers" in json.keys(): self.layers = []
if "layers" in json.keys() and type(json["layers"]).__name__=="list":
solidlayer = False solidlayer = False
for layer in json["layers"]: for layer in json["layers"]:
try: try:
if layer["name"] == "Solids" and "entities" in layer.keys() : if layer["name"] == "Solids" and "entities" in layer.keys() : # Je trouve les collisions
solidlayer = layer solidlayer = layer
break else: # J'ajoute un layer de tiles
tileset = level["tilesets"][layer["tileset"]]
tilew,tileh = layer["gridCellWidth"],layer["gridCellHeight"]
tileoffx,tileoffy = layer["offsetX"],layer["offsetY"]
nbtilesx,nbtilesy = layer["gridCellsX"],layer["gridCellsY"]
storedlayer = {"offsets":[tileoffx,tileoffy]}
surface = self.game.pygame.Surface((tilew*nbtilesx,tileh*nbtilesy),flags=self.game.pygame.SRCALPHA)
for y in range(len(layer["dataCoords2D"])):
for x in range(len(layer["dataCoords2D"][y])):
coords = layer["dataCoords2D"][y][x]
if len(coords)>1:
areatocopy = [coords[0]*tilew,coords[1]*tileh,tilew,tileh]
surface.blit(tileset,(x*tilew,y*tileh),area=areatocopy)
storedlayer["surface"] = surface
self.layers.append(storedlayer)
except: except:
self.game.log("Erreur",name,"Les layers sont invalides") self.game.log("Erreur",name,"Les layers sont invalides")
if solidlayer: if solidlayer: # Je crée les collisions
if "gridCellWidth" in solidlayer.keys() and "gridCellHeight" in solidlayer.keys(): if "gridCellWidth" in solidlayer.keys() and "gridCellHeight" in solidlayer.keys():
self.solidtilew = solidlayer["gridCellWidth"] self.solidtilew = solidlayer["gridCellWidth"]
self.solidtileh = solidlayer["gridCellHeight"] self.solidtileh = solidlayer["gridCellHeight"]