from gamedata.objects.base import BaseObject class TilesetRenderer(BaseObject): def __init__(self,x,y,game,mapfoldername): super().__init__(x,y,game) self.tilew = 64 self.tileh = 64 self.level = game.levels_lib[mapfoldername] self.reinit(self.level) def draw(self): for layer in self.layers: self.game.window.blit(layer["surface"],(layer["offsets"][0]-self.game.globals["camerax"],layer["offsets"][1]-self.game.globals["cameray"])) def reinit(self,level): json = level["data"] name = level["name"] self.rects = [] 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() : # Je trouve les collisions solidlayer = layer 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: # Je crée les collisions if "gridCellWidth" in solidlayer.keys() and "gridCellHeight" in solidlayer.keys(): self.solidtilew = solidlayer["gridCellWidth"] self.solidtileh = solidlayer["gridCellHeight"] else: self.solidtilew,self.solidtileh = 32,32 self.game.log("Erreur",name,"Pas de taille de tiles précisée, défaut à 32x32") for entity in solidlayer["entities"]: try: x,y = entity["x"],entity["y"] w,h = entity["width"],entity["height"] self.rects.append(self.game.pygame.Rect(x,y,w,h)) except: self.game.log("Erreur",name,"Propriétés invalides") else: self.game.log("Erreur",name,"Il manque les collisions, Entity Layer nommé Solids") else: self.game.log("Erreur",name,"Pas de layers")