bevy_tmx

Crates.iobevy_tmx
lib.rsbevy_tmx
version0.2.0
sourcesrc
created_at2021-06-05 11:12:50.581081
updated_at2021-10-25 17:53:44.676461
descriptionScene loader for .tmx files created by the Tiled map editor
homepage
repositoryhttps://github.com/Kurble/bevy_tmx
max_upload_size
id406438
size546,830
Bram Buurlage (Kurble)

documentation

https://docs.rs/bevy_tmx

README

bevy_tmx

Documentation Crates.io License

bevy_tmx is a plugin for the bevy game engine that allows you to read .tmx files from the tiled map editor as scenes. The plugin can be configured so that you can add more of your own components to the entities of the scene.

Currently, the tile maps being rendered are fairly simple, they are loaded as simple sprite entities, one per layer and sprite sheet.

Features

  • All tile layout modes supported by tiled:
    • Orthogonal
    • Isometric staggered and non-staggered
    • Hexagonal staggered
  • Object layers with support for custom object processing
  • Image layers with support for custom image layer processing
  • Parallax rendering

Todo

  • Infinite map support
  • All render orders other than RightDown

Overview

Using bevy_tmx is supposed to be really simple, just add the TmxPlugin to your App and load a scene. If you need to add custom functionality to the entities loaded from the .tmx file, you can customize the TmxLoader to do so during load time.

Example

use bevy::prelude::*;
use bevy::window::WindowMode;

use bevy_tmx::TmxPlugin;

struct PlayerComponent;

fn main() {
    App::build()
        .insert_resource(WindowDescriptor {
            title: "Ortho".to_string(),
            width: 1024.,
            height: 720.,
            vsync: false,
            resizable: true,
            mode: WindowMode::Windowed,
            ..Default::default()
        })
        .add_plugins(DefaultPlugins)
        .add_plugin(TmxPlugin::default()
            // Note that in tiled, the y axis points down, but in bevy it points up. The default scale is (1.0, -1.0).
            .scale(Vec2::new(3.0, -3.0))
            // This is the place to add more functionality to your objects
            .visit_objects(|object, entity| {
                if object.ty == "player" {
                    entity.insert(PlayerComponent);
                }
            })
        )
        .add_startup_system(spawn_scene.system())
        .run()
}

fn spawn_scene(mut commands: Commands, asset_server: Res<AssetServer>) {
    commands.spawn_scene(asset_server.load("ortho-map.tmx"));
    commands.spawn().insert_bundle(OrthographicCameraBundle {
        transform: Transform::from_xyz(600.0, -600.0, 50.0),
        ..OrthographicCameraBundle::new_2d()
    });
}
Commit count: 11

cargo fmt