40 lines
1.0 KiB
Rust
40 lines
1.0 KiB
Rust
use bevy::prelude::*;
|
|
use block_mesh::Voxel;
|
|
use common::space::three_dimensional::traits::{DefaultVoxel, VoxelContainer};
|
|
|
|
use crate::components::{mutable_mesh::MutableMesh, named::Named};
|
|
|
|
use self::traits::VoxelLayer;
|
|
|
|
pub mod traits;
|
|
|
|
pub fn container_to_layer_component<'a, TVoxel, TContainer>(
|
|
name: String,
|
|
container: TContainer,
|
|
material: StandardMaterial,
|
|
meshes: &mut Assets<Mesh>,
|
|
commands: &mut Commands,
|
|
materials: &mut Assets<StandardMaterial>,
|
|
) -> Entity
|
|
where
|
|
TVoxel: Voxel + DefaultVoxel + Copy,
|
|
TContainer: VoxelLayer<TVoxel> + VoxelContainer<TVoxel> + Component,
|
|
{
|
|
let mesh = container.generate_simple_mesh(meshes);
|
|
|
|
commands
|
|
.spawn(PbrBundle {
|
|
mesh,
|
|
material: materials.add(material),
|
|
transform: Transform::IDENTITY,
|
|
..Default::default()
|
|
})
|
|
.insert(container)
|
|
.insert(MutableMesh {
|
|
current: true,
|
|
visible: true,
|
|
})
|
|
.insert(Named { name })
|
|
.id()
|
|
}
|