You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.0 KiB
39 lines
1.0 KiB
use bevy::prelude::*; |
|
use common::prelude::*; |
|
|
|
pub fn plugin(app: &mut App) { |
|
app.add_observer(insert_block_visuals); |
|
app.load_resource::<BlockAssets>(); |
|
} |
|
|
|
#[derive(Resource, Asset, Reflect, Clone)] |
|
#[reflect(Resource)] |
|
pub struct BlockAssets { |
|
#[dependency] |
|
mesh: Handle<Mesh>, |
|
#[dependency] |
|
material: Handle<StandardMaterial>, |
|
} |
|
|
|
impl FromWorld for BlockAssets { |
|
fn from_world(world: &mut World) -> Self { |
|
let assets = world.resource::<AssetServer>(); |
|
Self { |
|
mesh: assets.add(Cuboid::new(1.0, 1.0, 1.0).into()), |
|
material: assets.add(Color::srgb_u8(124, 144, 255).into()), |
|
} |
|
} |
|
} |
|
|
|
/// Observer which automatically inserts block visuals (mesh and |
|
/// material) when an entity has the `Block` component added to it. |
|
fn insert_block_visuals( |
|
add: On<Add, Block>, |
|
mut commands: Commands, |
|
block_assets: Res<BlockAssets>, |
|
) { |
|
commands.entity(add.entity).insert(( |
|
Mesh3d(block_assets.mesh.clone()), |
|
MeshMaterial3d(block_assets.material.clone()), |
|
)); |
|
}
|
|
|