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}, sprite::Mesh2d};

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


pub trait ItemMesh2d: Sized {
    fn generate(&self, at: Coordinate, grid: &VectorGrid<Self>) -> Mesh2d;
}

pub trait ItemMesh3d: Sized {
    fn generate(&self, at: Coordinate, grid: &VectorGrid<Self>) -> Mesh;
}

impl<ItemType: ItemMesh3d> VectorGrid<ItemType> {
    pub fn generate_mesh3d(&self) -> Mesh {
        let mut result = Mesh::new(PrimitiveTopology::TriangleList, RenderAssetUsages::default());
        for (i, item) in self.items().iter().enumerate() {
            let coordinate = self.get_index_coordinate(i);
            let item_mesh = item.generate(coordinate.clone(), &self).translated_by(coordinate.into());
            match result.indices() {
                Some(_) => {
                    result.merge(item_mesh)
                },
                None => result = item_mesh,
            }
        }
        result
    }
}