syrillian_render 0.7.1

Renderer of the Syrillian Game Engine
Documentation
use parking_lot::RwLock;

static DEBUG_RENDERER: RwLock<DebugRenderer> = RwLock::new(DebugRenderer::default_const());

#[derive(Default, Debug, Clone)]
pub struct DebugRenderer {
    pub mesh_edges: bool,
    pub vertex_normals: bool,
    pub rays: bool,
    pub colliders_edges: bool,
    pub text_geometry: bool,
    pub light: bool,
}

impl DebugRenderer {
    const fn default_const() -> Self {
        DebugRenderer {
            mesh_edges: false,
            colliders_edges: false,
            vertex_normals: false,
            rays: false,
            text_geometry: false,
            light: false,
        }
    }

    pub fn next_mode() -> u32 {
        let mut inner = DEBUG_RENDERER.write();
        let mode = inner._mode();
        inner._set_mode(mode + 1)
    }

    pub fn mesh_edges() -> bool {
        let inner = DEBUG_RENDERER.read();
        inner.mesh_edges
    }

    pub fn collider_mesh() -> bool {
        let inner = DEBUG_RENDERER.read();
        inner.colliders_edges
    }

    pub fn mesh_vertex_normals() -> bool {
        let inner = DEBUG_RENDERER.read();
        inner.vertex_normals
    }

    pub fn physics_rays() -> bool {
        let inner = DEBUG_RENDERER.read();
        inner.rays
    }

    pub fn text_geometry() -> bool {
        let inner = DEBUG_RENDERER.read();
        inner.text_geometry
    }

    pub fn light() -> bool {
        let inner = DEBUG_RENDERER.read();
        inner.light
    }

    pub fn off() {
        let mut inner = DEBUG_RENDERER.write();
        inner._off();
    }

    pub fn mode() -> u32 {
        let inner = DEBUG_RENDERER.write();
        inner._mode()
    }

    fn _mode(&self) -> u32 {
        if self.mesh_edges {
            1
        } else if self.vertex_normals {
            2
        } else if self.rays {
            3
        } else if self.colliders_edges {
            4
        } else if self.text_geometry {
            5
        } else if self.light {
            6
        } else {
            0
        }
    }

    pub fn set_mode(mode: u32) {
        let mut inner = DEBUG_RENDERER.write();
        inner._set_mode(mode);
    }

    fn _set_mode(&mut self, mode: u32) -> u32 {
        self._off();
        match mode {
            1 => self.mesh_edges = true,
            2 => self.vertex_normals = true,
            3 => self.rays = true,
            4 => self.colliders_edges = true,
            5 => self.text_geometry = true,
            6 => self.light = true,
            _ => return 0,
        }
        mode
    }

    fn _off(&mut self) {
        self.mesh_edges = false;
        self.colliders_edges = false;
        self.vertex_normals = false;
        self.rays = false;
        self.text_geometry = false;
        self.light = false;
    }
}