voxel-zone/app/src/voxels/layers/mod.rs

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()
}