voxel-zone/app/src/components/fn_layer.rs

18 lines
487 B
Rust

use std::sync::Arc;
use bevy::prelude::Component;
use common::space::three_dimensional::{traits::VoxelContainer, vec3generic::Vec3Generic};
use crate::voxels::bool_voxel::BoolVoxel;
#[derive(Component)]
pub struct VoxelFnLayer {
pub is_solid: Arc<dyn Fn(Vec3Generic<i32>) -> bool + Send + Sync>,
}
impl VoxelContainer<BoolVoxel> for VoxelFnLayer {
fn get_voxel_at_pos(&self, pos: Vec3Generic<i32>) -> Option<BoolVoxel> {
Some(BoolVoxel((self.is_solid)(pos)))
}
}