Skip to main content

CLI tool for converting Tiled TMX files to Panda3D BAM files.

Project description

CLI tool for converting Tiled TMX files to Panda3D BAM files.

Usage:

$ pip install panda3d-tmx2bam
$ tmx2bam path/to/tmx/file.tmx path/to/bam/file.bam -prefabs=path/to/prefabs.bam

or

from tmx2bam import Tmx2Bam
from direct.showbase.ShowBase import ShowBase

base = ShowBase()
tmx_map = Tmx2Bam("path/to/tmx/file.tmx", prefabs="path/to/prefabs.bam")
tmx_map.node.reparent_to(render)
base.run()

Prefabs are optional. Without them all tiles will be cards. Find important tiles and their properties like so:

tiles_with_my_property = tmx_map.node.find_all_matches('**/=my_property_name')
for tile in tiles_with_my_property:
  my_property_value = tile.get_tag("my_property_name")

You can read more about searching Panda3d's scene graph here: https://docs.panda3d.org/1.10/python/programming/scene-graph/searching-scene-graph

Currently supports:

  • TMX file with CSV data (default)
  • Custom properties as PandaNode tags
  • Multiple tilesheets
  • Multiple layers and Groups
  • Animated tiles
  • Object layer/Objects (point, poly, rectangle, text, image)
  • Background images
  • Merge animated sprites
  • Allow more shapes than just cards

Left to do:

  • Infinite maps (chunks)
  • Hexagonal and Isometric tiles
  • Tile render order
  • Tilesheet image collection
  • Embedded tilesheet in tmx
  • Embedding texture in bam
  • Tiled features I'm not aware of
  • Error handling
  • A better readme

Exporter specific custom layer properties:

  • "flatten" will flatten_strong() the layer
  • "store_data" will store the data in the layer with set_python_tag()
  • "z" set's the layer's z height.

Prefabs: To use prefabs, simply make a bam (with blender and blend2bam for example), where each root object is a nodepath named after a type in the spritesheet's tsx. Tmx2bam will then replace the tiles or objects that have this type assigned with this nodepath.

Mind:

  • The Y axis is inverted in panda3d.
  • Animated sprites can only have one steady frame-rate that you can set on the first frame in Tiled.
  • Currently the image resolutions have to be power of two.
  • Rendering tons of individual tiles is slow. Use the "flatten" property as much as possible.
  • The ellipse and point objects are not drawn at this time, they're empty nodepaths.
  • I'm not a programmer but I play one on TV. Your mileage may vary.

Fun snippets:

  • Adding a "repeat" property to a "cube" prefabed tile to make towers and large walls and things.
for layer in tmx2bam.node.find_all_matches("**/=repeat"):
    repetitions = layer.get_tag("repeat")
    repeats_node = NodePath(layer.name+"-repeat")
    for repetition in range(int(repetitions)):
        repeat = NodePath("repeat")
        layer.copy_to(repeat)
        repeat.set_z(layer.get_z()+repetition-1)
        repeat.reparent_to(repeats_node)
    repeats_node.flatten_strong()
    repeats_node.reparent_to(layer)

Licensed WTFPL.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Built Distribution

panda3d_tmx2bam-0.0.26-py3-none-any.whl (7.4 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page