venuss 0.0.1

Venus celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Face {
    PosX,
    NegX,
    PosY,
    NegY,
    PosZ,
    NegZ,
}

pub struct QuadTreeNode {
    pub face: Face,
    pub level: u32,
    pub x: u32,
    pub y: u32,
}

pub struct LodConfig {
    pub max_level: u32,
}

impl Default for LodConfig {
    fn default() -> Self {
        Self { max_level: 12 }
    }
}

pub struct LodTerrain {
    pub roots: Vec<QuadTreeNode>,
    pub config: LodConfig,
}

impl LodTerrain {
    pub fn new(config: LodConfig) -> Self {
        let roots = vec![
            QuadTreeNode {
                face: Face::PosX,
                level: 0,
                x: 0,
                y: 0,
            },
            QuadTreeNode {
                face: Face::NegX,
                level: 0,
                x: 0,
                y: 0,
            },
            QuadTreeNode {
                face: Face::PosY,
                level: 0,
                x: 0,
                y: 0,
            },
            QuadTreeNode {
                face: Face::NegY,
                level: 0,
                x: 0,
                y: 0,
            },
            QuadTreeNode {
                face: Face::PosZ,
                level: 0,
                x: 0,
                y: 0,
            },
            QuadTreeNode {
                face: Face::NegZ,
                level: 0,
                x: 0,
                y: 0,
            },
        ];
        Self { roots, config }
    }

    pub fn update(&mut self, camera: (f64, f64, f64)) {
        if !(camera.0.is_finite() && camera.1.is_finite() && camera.2.is_finite()) {
            self.roots.clear();
        }
    }
    pub fn leaf_count(&self) -> usize {
        self.roots.len()
    }
}