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

#724 in Game dev

Download history 6/week @ 2024-02-23 4/week @ 2024-03-01 1/week @ 2024-03-15 106/week @ 2024-03-29

107 downloads per month

Unlicense

60KB
1K SLoC

tego

Documentation Crates.io License

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.2–1.6MB
~34K SLoC