nd_vector 0.1.0

[WIP] Lengthen! Shrink! Iterate! Scale! Twist and turn to your imagination along any dimension on a vector!
Documentation
use bevy::{prelude::*, render::{mesh::PrimitiveTopology, render_asset::RenderAssetUsages}};

use crate::{air::Air, usage_types::coordinates::Coordinate, VectorGrid};

use super::{item_mesh::ItemMesh3d, Transparent};




pub trait VoxelMesher: Air + Transparent {
    fn generate(&self, visible_sides: [bool; 6]) -> Mesh;
}

const SURROUNDING_OFFSETS: [[isize; 3]; 6] = [
    [-1, 0, 0],
    [1, 0, 0],
    [0, -1, 0],
    [0, 1, 0],
    [0, 0, -1],
    [0, 0, 1],
];

impl<T: VoxelMesher> ItemMesh3d for T {
    fn generate(&self, at: Coordinate, grid: &VectorGrid<Self>) -> Mesh {
        if self.is_air() {
            return Mesh::new(PrimitiveTopology::TriangleList, RenderAssetUsages::default());
        }
        let mut visible_sides: [bool; 6] = [false; 6];
        let at: Coordinate = at.into();
        for (i, offset) in SURROUNDING_OFFSETS.iter().enumerate() {
            visible_sides[i] = grid.get(&Coordinate::new(offset.to_vec()).plus(&at)).unwrap_or(&T::default()).is_transparent();
        }
        println!("Visible sides: {:?}", visible_sides);
        self.generate(visible_sides)
    }
}