9 releases (4 breaking)
0.5.0 | Nov 27, 2021 |
---|---|
0.4.1 | Nov 17, 2021 |
0.3.1 | Nov 4, 2021 |
0.2.0 | Oct 25, 2021 |
0.1.3 | Oct 20, 2021 |
#793 in Game dev
27 downloads per month
60KB
1K
SLoC
tego
tego is a library for parsing and loading Tiled maps.
Goals
The main goal of tego is to provide a foundation for loading tmx maps, independent of game engine or storage medium. It should not matter if the map is stored as a file on disk, or loaded on the fly from an asset bundle.
Furthermore common operations should be made easy with sane defaults, but not at the expense of flexibility.
Example
Load a map and pretty print the layers included in it:
use std::path::Path;
extern crate tego;
fn main() -> tego::Result<()> {
// Load a tmx file.
// Map::from_file() is the easiest, but least flexible method for loading a map.
// Images referenced by the map are not loaded, instead only the path is returned as string.
let map = tego::Map::from_file(Path::new("example-maps/default/groups.tmx"))?;
// Keep track how much we need to indent for some nice pretty printing
let mut indent = 0;
for (layer, groups_left) in map.iter_layers() {
// Reduce indentation by the amount of groups left
indent -= groups_left;
// print indentation to highlight hierarchy
print!("{}", " ".repeat(indent));
use tego::Layer::*;
match layer {
Tile(layer) => {
println!("Layer '{}' with {}x{} tiles", layer.name, layer.size.x, layer.size.y);
},
Group(layer) => {
println!("Group layer '{}' with {} sub-layers", layer.name, layer.content.len());
// increase indentation for all layers part of this group
indent += 1;
},
Object(layer) => {
println!("Layer '{}' containing {} objects", layer.name, layer.content.len());
},
}
}
Ok(())
}
You can run this example with
cargo run -q --example layer_printer
.
Feature support
The following TMX features are implemented β , partially supported π§ or missing β in tego. This is not an exhaustive list.
-
π§ Loading of maps with metadata:
- β Orthogonal & Isometric maps
- β Hexagonal & staggered maps
- β Editor related metadata
- β Color information
-
π§ Tile Sets
- β Metadata
- β Sprite Sheet lookup with spacing/margin
- β
External tile set files (
*.tsx
) - β Image collection Tile Sets
- β Object Alignment information
-
π§ Tile layers
- β uncompressed/zlib/gzip base64 data
- β csv loading
- β
<tile>
loading - β Tile flipping
-
β Infinite maps
-
π§ Object layers
- β Basic Rect/Ellipse/Point object
- β Polygons & Polylines
- π§ Text (Some metadata is still not supported, e.g. haling/valign)
- β Object Templates
-
β Image layers
-
β Properties
Dependencies
~1.1β1.6MB
~33K SLoC