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.
Source Distributions
Built Distribution
Hashes for panda3d_tmx2bam-0.0.26-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a8e54aa8edd18539bc7aee1ae39b2b092ce41a285c42630b58b7ce72913a1503 |
|
MD5 | dc5d89f3aab176eb9fba8cfa52422c5e |
|
BLAKE2b-256 | 9de9f5733dab7e83b02669f02c696cc6984c4e5f3d905140618ab9f1d435ce96 |