示例#1
0
 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