rocketsim 0.2.4

Simulate Rocket League games at maximum efficiency
Documentation
use glam::Vec3A;

use super::{triangle_callback::ProcessTriangle, triangle_shape::TriangleShape};

#[derive(Debug)]
pub struct TriangleMesh {
    triangles: Box<[TriangleShape]>,
}

impl TriangleMesh {
    pub fn new(verts: &[Vec3A], ids: &[usize]) -> Self {
        debug_assert_eq!(ids.len() % 3, 0);

        Self {
            triangles: ids
                .as_chunks::<3>()
                .0
                .iter()
                .map(|ids| TriangleShape::from_points_iter(ids.iter().map(|&j| verts[j])))
                .collect(),
        }
    }

    pub fn internal_process_all_triangles<T: ProcessTriangle>(&self, callback: &mut T) {
        for (i, triangle) in self.triangles.iter().enumerate() {
            callback.process_triangle(triangle, i);
        }
    }

    pub fn get_triangle(&self, idx: usize) -> &TriangleShape {
        &self.triangles[idx]
    }

    pub fn get_total_num_faces(&self) -> usize {
        self.triangles.len()
    }

    pub fn get_tris(&self) -> &[TriangleShape] {
        &self.triangles
    }
}