bevy_ecs_ldtk
An ECS-friendly LDtk plugin for bevy. Uses bevyecstilemap as a base.
cargo run --example platformer --release
serde
types for LDtk based off LDtk's QuickType
loader, but with several QoL
improvementsThe goal of this plugin is to make it as easy as possible to use LDtk with bevy
for common use cases, while providing solutions to handle more difficult cases.
You only need a few things to get started:
1. Add the LdtkPlugin
to the App
2. Insert the LevelSelection
resource into the App
to pick your level
3. Spawn an LdtkWorldBundle
4. Optionally, use #[derive(LdtkEntity)]
and #[derive(LdtkIntCell)]
on
bundles and register them to the App
to automatically spawn those bundles
on Entity and IntGrid layers.
```rust use bevy::prelude::; use bevy_ecs_ldtk::prelude::;
fn main() {
App::new()
.addplugins(DefaultPlugins)
.addplugin(LdtkPlugin)
.addstartupsystem(setup)
.insertresource(LevelSelection::Index(0))
.registerldtk_entity::
fn setup(mut commands: Commands, asset_server: Res
commands.spawn(LdtkWorldBundle {
ldtk_handle: asset_server.load("my_project.ldtk"),
..Default::default()
});
}
pub struct MyBundle { a: ComponentA, b: ComponentB, #[spritesheetbundle] #[bundle] sprite_bundle: SpriteSheetBundle, } ```
There are other attributes available to #[derive(LdtkEntity)]
and #[derive(LdtkIntCell)]
, see the documentation for more details.
By default, LDtk Entities and IntGrid tiles get spawned with EntityInstance
and IntGridCell
components respectfully.
So, you can flesh out these entities in a system that queries for
Added<EntityInstance>
or Added<IntGridCell>
if you need more access to the
world, or if you just don't want to use the LdtkEntity
and LdtkIntCell
traits.
To load a new level, you can just update the LevelSelection
resource.
Be sure to check out the LdtkSettings
resource and the LevelSet
component
for additional level-loading options.
| bevy | bevyecstilemap | LDtk | bevyecsldtk | | --- | --- | --- | --- | | 0.10 | 0.10 | 1.1+ | 0.6 | | 0.9 | 0.9 | 1.1 | 0.5 | | 0.8 | 0.7 | 1.1 | 0.4 | | 0.7 | 0.6 | 1.1 | 0.3 | | 0.6 | 0.5 | 0.9 | 0.2 | | 0.6 | 0.5 | 0.9 | 0.1 |