we have drawing from an asset!

main
Elijah Voigt 2 days ago
parent 1536b43c51
commit 125f303ec4

@ -23,11 +23,15 @@ impl Plugin for BlocksPlugin {
#[derive(Asset, TypePath, Debug, Deserialize)]
struct ShapeAsset {
layout: Vec<Vec<u8>>,
#[serde(skip)]
mesh: Mesh2d,
#[serde(skip)]
material: MeshMaterial2d<ColorMaterial>,
}
impl ShapeAsset {
fn into_bundle(&self) -> impl Bundle {
()
(self.mesh.clone(), self.material.clone())
}
}
@ -50,12 +54,33 @@ impl AssetLoader for ShapeAssetLoader {
&self,
reader: &mut dyn Reader,
_settings: &(),
_load_context: &mut LoadContext<'_>,
load_context: &mut LoadContext<'_>,
) -> Result<Self::Asset, Self::Error> {
let mut bytes = Vec::new();
reader.read_to_end(&mut bytes).await?;
let shape_asset = toml::from_slice::<ShapeAsset>(bytes.as_slice())?;
Ok(shape_asset)
// TODO: Create sub-assets for mesh and material
let mesh = {
// https://docs.rs/bevy/latest/bevy/asset/struct.LoadContext.html#method.add_labeled_asset
let m: Mesh = Rectangle::new(100.0, 100.0).into();
let h: Handle<Mesh> = load_context.add_labeled_asset(format!("{}#mesh", load_context.asset_path()), m);
Mesh2d(h)
};
let material = {
let m = ColorMaterial {
color: PURPLE.into(),
..default()
};
let h: Handle<ColorMaterial> = load_context.add_labeled_asset(format!("{}#material", load_context.asset_path()), m);
MeshMaterial2d(h)
};
let parsed = toml::from_slice::<ShapeAsset>(bytes.as_slice())?;
Ok(
ShapeAsset {
mesh,
material,
..parsed
}
)
}
fn extensions(&self) -> &[&str] {
@ -99,7 +124,6 @@ fn add_shape(
mut commands: Commands,
shapes: Res<Assets<ShapeAsset>>,
) {
info!("Spawning asset component {:?}", event.event());
let asset_component = query.get(event.entity).unwrap();
let shape = shapes.get(asset_component.handle.id()).unwrap();
commands.entity(event.entity).insert(shape.into_bundle());

Loading…
Cancel
Save