From fe507b304a78b303308157cd378f47dc2bd10d66 Mon Sep 17 00:00:00 2001 From: "theo@manjaro" Date: Fri, 2 Jul 2021 16:18:36 +0200 Subject: [PATCH] Affichage des tiles --- gamedata/maps/TulipFields/map.json | 4 ++-- gamedata/objects/combat/tileset.py | 32 +++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/gamedata/maps/TulipFields/map.json b/gamedata/maps/TulipFields/map.json index b169220..de6e30c 100644 --- a/gamedata/maps/TulipFields/map.json +++ b/gamedata/maps/TulipFields/map.json @@ -14,7 +14,7 @@ "gridCellHeight": 16, "gridCellsX": 20, "gridCellsY": 15, - "tileset": "Base", + "tileset": "base.png", "dataCoords2D": [ [ [-1], @@ -368,4 +368,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/gamedata/objects/combat/tileset.py b/gamedata/objects/combat/tileset.py index e9ca229..8836156 100644 --- a/gamedata/objects/combat/tileset.py +++ b/gamedata/objects/combat/tileset.py @@ -10,27 +10,41 @@ class TilesetRenderer(BaseObject): self.tileh = 64 self.level = game.levels_lib[mapfoldername] - self.reinit_rects(self.level) - + self.reinit(self.level) def draw(self): - for i in self.rects: - self.game.pygame.draw.rect(self.game.window,[255,0,0],(i[0:4])) + for layer in self.layers: + self.game.window.blit(layer["surface"],(layer["offsets"])) - def reinit_rects(self,level): + def reinit(self,level): json = level["data"] name = level["name"] self.rects = [] - if "layers" in json.keys(): + self.layers = [] + if "layers" in json.keys() and type(json["layers"]).__name__=="list": solidlayer = False for layer in json["layers"]: 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 - 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: 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(): self.solidtilew = solidlayer["gridCellWidth"] self.solidtileh = solidlayer["gridCellHeight"]