#scene #tiled #bevy #assets #tmx

bevy_tmx

Scene loader for .tmx files created by the Tiled map editor

2 unstable releases

0.2.0 Oct 25, 2021
0.1.0 Jun 5, 2021

#1741 in Game dev

45 downloads per month

MIT license

455KB
2.5K SLoC

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()
    });
}

Dependencies

~19–64MB
~407K SLoC