bevy_tileset

crates.io docs.rs

Simple, configurable tilesets in Bevy using RON.

Smart tile placement

All GIFs generated with the bevy_tileset_map crate

📋 Features

📲 Installation

Add one of the following lines to your Cargo.toml.

toml [dependencies] bevy_tileset_tiles = "0.8" # For the base tile definitions bevy_tileset = "0.8" # For general tileset usage (includes above)

✨ Usage

Simply define your tiles and tilesets in config files:

rust // assets/tiles/my_tile.ron ( name: "My Tile", tile: Standard("textures/my_tile.png") )

rust // assets/my_tileset.ron ( name: Some("My Awesome Tileset"), id: 0, tiles: { 0: "../tiles/my_tile.ron", // ... } )

And load it in via a system:

```rust use bevy::prelude::; use bevy_tileset::prelude::;

fn loadtiles(assetserver: Res) { let handle: Handle = assetserver.load("mytileset.ron"); // Store handle... } ```

Then access the generated tileset from anywhere:

```rust fn mysystem(tilesets: Tilesets, /* other system params */) { let tileset = tilesets.getbyname("My Awesome Tileset").unwrap(); let tileindex = tileset.gettileindex("My Tile").unwrap();

match tile_index {
    TileIndex::Standard(texture_index) => { /* Do something */ }
    TileIndex::Animated(start, end, speed) => { /* Do something */ }
}

} ```

Tile Types

Currently there are four main tile types:

🖼 Standard

Defines a basic tile.

```rust // assets/tiles/my-tile.ron

( name: "My Tile", tile: Standard("textures/my_tile.png") ) ```

🎞️ Animated

Defines an animated tile that can be generated with the GPUAnimated component from bevy_ecs_tilemap.

```rust // assets/tiles/my-animated-tile.ron

( name: "My Animated Tile", tile: Animated(( speed: 2.25, frames: [ "textures/animated-001.png", "textures/animated-002.png", "textures/animated-003.png", ] )) ) ```

🎲 Variant

With the variants feature enabled

Defines a tile that has a set of possible variants. A variant is chosen at random when placed. These variants can either be Standard or Animated.

```rust // assets/tiles/my-variant-tile.ron

( name: "My Crazy Random Tile", tile: Variant([ ( weight: 1.0, tile: Standard("textures/variant-standard-001.png") ), ( // Default weight: 1.0 tile: Standard("textures/variant-standard-002.png") ), ( weight: 0.0001, // Wow that's rare! tile: Animated(( // Default speed: 1.0 frames: [ "textures/variant-animated-001.png", "textures/variant-animated-002.png", "textures/variant-animated-003.png", ] )) ) ]) ) ```

🧠 Auto

With the auto-tile feature enabled

Defines a tile that automatically chooses its active tile based on its neighbors. This behavior can be controlled with rules. These sub-tiles are themselves Variant tiles.

```rust // assets/tiles/my-auto-tile.ron

![enable(implicit_some)]

( name: "My Auto Tile", tile: Auto([ ( rule: ( north: true, east: false, west: true, ), variants: [ ( tile: Standard("textures/nw-e-001.png") ), ( weight: 2.0, tile: Standard("textures/nw-e-002.png") ) ] ), ( rule: ( // Also supports short notation n: false, s: false, // And ordinal directions southwest: true, nw: false ), variants: [ ( tile: Standard("textures/sw-ns_nw.png") ) ] ), ]) ) ```

Auto tiling

🎓 Examples

Also, be sure to check out the assets folder for how to define a tile or tileset.

🌱 Areas of Growth

There are some things this crate could do better in. Here's a list of potential areas to grow:

As well as just an overall improved and cleaner API.

🎵 Important Note

These tiles are defined with the bevy_ecs_tilemap crate in mind. Therefore, it's meant to work with an index-based tile system (where a tile's texture is defined as an index into a texture atlas). Other solutions may need to be adapted in order to work with this crate.

🕊 Bevy Compatibility

| bevy | bevy_tileset | |------|--------------| | 0.11 | 0.8 | | 0.10 | 0.7 | | 0.9 | 0.6 | | 0.8 | 0.5 | | 0.7 | 0.4 | | 0.6 | 0.3 | | 0.5 | 0.2 |