ron_asset_derive

Crates.ioron_asset_derive
lib.rsron_asset_derive
version
sourcesrc
created_at2024-11-09 10:50:39.800303
updated_at2024-12-07 12:46:34.349747
descriptiona proc macro to help with asset dependencies
homepage
repositoryhttps://github.com/Lommix/ron_asset_manager.git
max_upload_size
id1441975
Cargo.toml error:TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Lorenz (Lommix)

documentation

README

ron asset manager

License: MIT or Apache 2.0 Crate

A dead simple crate to manage Ron based assets which depend on other assets.

Assets can hot reload into a running game state. Use it to your advantage!

Any asset, that can be loaded from an asset path is supported!

bevy ron asset manager
0.15 0.5
0.14 0.4

Harness the power of external configuration.

Shandle<T> is a thin wrapper around Handle<T> that can be serialized by behaving like a asset path in serialized form.

This crates provides the RonAsset derive macro, RonAssetPlugin and the Shandle. The idea is to mark asset dependencies via attribute.

Any field, implementing the RonAsset trait can be nested and will automatic load. There are defaults for Vec and HashMap. You can also implement your own, if you need to.

cargo run --example simple

Example

Checkout the simple example. It loads a multi-sprite car with multiple tires each holding unique information and assets.

#[derive(Asset, TypePath, RonAsset, Deserialize)]
pub struct Wizard{
    pub name: String,
    pub health: f32,
    #[asset]
    pub sprite: Shandle<Image>,
    #[asset]
    pub sounds: HashMap<String, Shandle<AudioSource>>,
    #[asset]
    pub spells: Vec<Shandle<Spells>>,
    #[asset]
    pub staff: Weapon,
}

#[derive(RonAsset, Deserialize)]
pub struct Weapon{
    pub damage: f32,
    pub cooldown: f32,
    #[asset]
    pub sprite: Shandle<Image>,
}

// add the provided plugin for your asset struct.
// this steps also initializes the asset for bevy.
fn build(&self, app: &mut App) {
    app.add_plugins(RonAssetPlugin::<Wizard>::default());
}

// that's all, time to use it
fn spawn_wizard(mut cmd: Commands, server: Res<AssetServer>){
    let wizard_handle: Handle<Wizard> = server.load("enemies/gandalf.ron")

    cmd.spawn((
        WizardSpawner(wizard_handle),
        SpawnCount(3),
        Transfrom::default(),
    ));
}

gandalf.ron:

(
    name: "Gandalf",
    health: 42069,
    sprite: "sprite/gandalf.png",
    sounds: {
        "death" : "audio/gandalf_rebirth.ogg",
        "hit"   : "audio/gandalf_hurt.ogg",
        "angry" : "audio/gandalf_calm.ogg",
    },
    spells: [
        "spells/light.ron",
        "spells/cloth_swap.ron",
    ],
    staff : (
        damage: 99,
        cooldown: 1,
        sprite: "staff.png"
    )
)
Commit count: 25

cargo fmt