def build_tile(self, tsx, id): tile = None # Cross-reference with self.prefabs in case there's a shape # corresponding with a tile's type use_prefab = False for tile in tsx.findall("tile"): if int(tile.get("id")) == id: type = tile.get("type") if type in self.prefabs: geometry_node = NodePath(str(id)) self.prefabs[type].copy_to(geometry_node) use_prefab = True break # Else we generate a card if not use_prefab: geometry = self.cardmaker.generate() geometry_node = NodePath(geometry) geometry_node.set_texture(tsx.get("texture"), 1) geometry_node.set_p(-90) geometry_node.set_transparency(True) # scale and offset UVs for single sprite columns = int(tsx.get("columns")) rows = int(tsx.get("rows")) w, h = 1 / columns, 1 / rows tile_x, tile_y = int(id % columns), int(id / (columns)) u, v = (tile_x * w), 1 - ((tile_y * h) + h) for stage in geometry_node.find_all_texture_stages(): geometry_node.set_texture(stage, tsx.get("texture"), 1) geometry_node.set_tex_scale(stage, w, h) geometry_node.set_tex_offset(stage, (u, v)) self.attributes_to_tags(geometry_node, tile) return geometry_node