|
|
|
|
@ -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());
|
|
|
|
|
|