Skip to content
Snippets Groups Projects
user avatar
Alejandro Perea authored
* Partial commit

* Partial commit

* Partial commit

* Some suggested changes and fixed tests (except infinite)

* Replaced `tile` member in `LayerTileRef` with a function to get an
  `Option<&Tile>`.

* Replaced `Map::get_tile_by_gid` with `Map::get_tileset_for_gid`, which
  just returns the `Option<&Tileset>`. It also does a reverse search,
  which fixes the lookup in case an external tileset has grown since the
  map was last saved.

* Replaced `Tileset::get_tile_by_gid` with `Tileset::get_tile`, since
  subtracting of the `first_gid` already happens when creating the
  `LayerTileRef`. Also, we eventually should remove `first_gid` from
  `Tileset`, since it should be possible to share a single tileset
  instance betweeen several maps.

* Pre-allocate the tiles hash map for the expected number of tiles and
  use `or_default` instead of `or_insert_with(Default::default)`.

* [nonbuilding] Move ownership of tilesets
- Moves the ownership of tilesets from Map to an object implementing `TilesetCache`

* Clean up

* More cleanup

* Organize layers into modules

* Further modularization

* Add layer wrappers

* Implement `Clone + PartialEq + Debug` for wrappers

* Fix example

* Fix all tests except for test_infinite_tileset

* Move layer utils to its own module

* Better `Map::layers` documentation

* `TilesetCache` -> `cache::ResourceCache`

* Add `ResourcePath`, rename and add errors

* Interface changes
- Move embedded tilesets from cache to map
- Store `Option<LayerTileData>` instead of `LayerTileData`

* parser ->`&mut impl Iterator<Item=XmlEventResult>`

* Document that tilesets are ordered by first GID

* Fix the layer tiles using GIDs issue

* Run `cargo fix`

* Fix `test_infinite_tileset` tests

* Implement a way to access object tile data

* Rename `TiledWrapper` to `MapWrapper`

* More efficient `get_or_try_insert_tileset_with`

* Add `ResourcePathBuf`, use `Rc<Tileset>` in `Map`

* Remove `MapTileset::first_gid`

* Run `cargo fix`

* Remove unrelated `Tileset` changes

* Requested changes

* Avoid reference counting when accessing tiles

* Store tile data instead of (u32, u32)` in objects

* Remove unneeded functions from `ResourceCache`

* Address PR comments

* Misc improvements in `layers::tile`

* Improve example

* Convert `LayerTile` properties to fields

Co-authored-by: default avatarThorbjørn Lindeijer <bjorn@lindeijer.nl>
df98e9f3

rs-tiled

Rust Crates.io

Read maps from the Tiled Map Editor into rust for use in video games. It is game engine agnostic and pretty barebones at the moment. Documentation is available on docs.rs.

Code contributions are welcome as are bug reports, documentation, suggestions and criticism.

There is a package on crates.io, to use simply add:

tiled = "0.9.5"

to the dependencies section of your Cargo.toml.

The minimum supported TMX version is 0.13.

Example

use tiled::Map;

fn main() {
    let map = Map::parse_file("assets/tiled_base64_zlib.tmx").unwrap();
    println!("{:?}", map);
    println!("{:?}", map.tileset_by_gid(22));
}

Licences

assets/tilesheet.png by Buch (https://opengameart.org/content/sci-fi-interior-tiles)

Licenced under MIT