Crates.io | ron_asset_derive |
lib.rs | ron_asset_derive |
version | |
source | src |
created_at | 2024-11-09 10:50:39.800303 |
updated_at | 2024-12-07 12:46:34.349747 |
description | a proc macro to help with asset dependencies |
homepage | |
repository | https://github.com/Lommix/ron_asset_manager.git |
max_upload_size | |
id | 1441975 |
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` |
size | 0 |
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!
bevy | ron asset manager |
---|---|
0.15 | 0.5 |
0.14 | 0.4 |
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
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"
)
)