From 125f303ec45f7813c493c06ce847ce81b4de16ba Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Fri, 12 Dec 2025 23:37:32 -0800 Subject: [PATCH] we have drawing from an asset! --- tetris/src/blocks.rs | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/tetris/src/blocks.rs b/tetris/src/blocks.rs index 15ff553..27a5f99 100644 --- a/tetris/src/blocks.rs +++ b/tetris/src/blocks.rs @@ -23,11 +23,15 @@ impl Plugin for BlocksPlugin { #[derive(Asset, TypePath, Debug, Deserialize)] struct ShapeAsset { layout: Vec>, + #[serde(skip)] + mesh: Mesh2d, + #[serde(skip)] + material: MeshMaterial2d, } 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 { let mut bytes = Vec::new(); reader.read_to_end(&mut bytes).await?; - let shape_asset = toml::from_slice::(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 = 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 = load_context.add_labeled_asset(format!("{}#material", load_context.asset_path()), m); + MeshMaterial2d(h) + }; + let parsed = toml::from_slice::(bytes.as_slice())?; + Ok( + ShapeAsset { + mesh, + material, + ..parsed + } + ) } fn extensions(&self) -> &[&str] { @@ -99,7 +124,6 @@ fn add_shape( mut commands: Commands, shapes: Res>, ) { - 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());