#file-format #assets #bevy #yaml #json-file #gamedev #loader

bevy_common_assets

Bevy plugin adding support for loading your own asset types from common file formats such as json and yaml

15 releases (breaking)

0.12.0-rc.1 Oct 24, 2024
0.11.0 Jul 4, 2024
0.11.0-rc.4 Jun 28, 2024
0.10.0 Feb 17, 2024
0.3.0 Jul 30, 2022

#204 in Game dev

Download history 1308/week @ 2024-07-29 878/week @ 2024-08-05 948/week @ 2024-08-12 673/week @ 2024-08-19 772/week @ 2024-08-26 1057/week @ 2024-09-02 1041/week @ 2024-09-09 912/week @ 2024-09-16 1041/week @ 2024-09-23 988/week @ 2024-09-30 383/week @ 2024-10-07 815/week @ 2024-10-14 823/week @ 2024-10-21 822/week @ 2024-10-28 741/week @ 2024-11-04 366/week @ 2024-11-11

2,801 downloads per month
Used in 30 crates (16 directly)

MIT/Apache

47KB
635 lines

Bevy common assets

crates.io docs license crates.io

Collection of Bevy plugins offering generic asset loaders for common file formats.

Supported formats:

format feature example
json json json.rs
msgpack msgpack msgpack.rs
postcard postcard postcard.rs
ron ron ron.rs
toml toml toml.rs
xml xml xml.rs
yaml yaml yaml.rs
csv csv csv.rs

Usage

Enable the feature(s) for the format(s) that you want to use.

Define the types that you would like to load from files and derive serde::Deserialize, bevy::reflect::TypePath, and bevy::asset::Asset for them.

#[derive(serde::Deserialize, bevy::asset::Asset, bevy::reflect::TypePath)]
struct Level {
    positions: Vec<[f32;3]>,
}

With the types ready, you can start adding asset plugins. Every plugin gets the asset type that it is supposed to load as a generic parameter. You can also configure custom file endings for each plugin:

use bevy::prelude::*;
use bevy_common_assets::json::JsonAssetPlugin;
use bevy_common_assets::msgpack::MsgPackAssetPlugin;
use bevy_common_assets::postcard::PostcardAssetPlugin;
use bevy_common_assets::ron::RonAssetPlugin;
use bevy_common_assets::toml::TomlAssetPlugin;
use bevy_common_assets::xml::XmlAssetPlugin;
use bevy_common_assets::yaml::YamlAssetPlugin;

fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            JsonAssetPlugin::<Level>::new(&["level.json", "custom.json"]),
            RonAssetPlugin::<Level>::new(&["level.ron"]),
            MsgPackAssetPlugin::<Level>::new(&["level.msgpack"]),
            PostcardAssetPlugin::<Level>::new(&["level.postcard"]),
            TomlAssetPlugin::<Level>::new(&["level.toml"]),
            XmlAssetPlugin::<Level>::new(&["level.xml"]),
            YamlAssetPlugin::<Level>::new(&["level.yaml"])
        ))
        // ...
        .run();
}

#[derive(serde::Deserialize, bevy::asset::Asset, bevy::reflect::TypePath)]
struct Level {
    positions: Vec<[f32; 3]>,
}

The example above will load Level structs from json files ending on .level.json or .custom.json, from ron files ending on .level.ron and so on...

See the examples for working Bevy apps using the different formats.

Compatible Bevy versions

The main branch is compatible with the latest Bevy release.

Compatibility of bevy_common_assets versions:

bevy_common_assets bevy
0.11 0.14
0.10 0.13
0.8 - 0.9 0.12
0.7 0.11
0.5 - 0.6 0.10
0.4 0.9
0.3 0.8
0.1 - 0.2 0.7
main 0.13
bevy_main main

License

Dual-licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~26–39MB
~658K SLoC