rotex-types 0.1.1

Types used by rotexengine tools
Documentation
use crate::internal::math::identity4;
use crate::resource::ids::{MaterialId, MeshId};

#[derive(Debug, Clone, Copy)]
pub struct CameraDescriptor {
    pub view: [[f32; 4]; 4],
    pub projection: [[f32; 4]; 4],
}

impl Default for CameraDescriptor {
    fn default() -> Self {
        Self {
            view: identity4(),
            projection: identity4(),
        }
    }
}

#[derive(Debug, Clone, Copy)]
pub struct MeshInstanceDescriptor {
    pub mesh: MeshId,
    pub material: MaterialId,
    pub transform: [[f32; 4]; 4],
}

impl MeshInstanceDescriptor {
    pub fn new(mesh: MeshId, material: MaterialId) -> Self {
        Self {
            mesh,
            material,
            transform: identity4(),
        }
    }

    pub fn with_transform(mut self, transform: [[f32; 4]; 4]) -> Self {
        self.transform = transform;
        self
    }
}

#[derive(Debug, Clone)]
pub struct SceneDescriptor {
    pub camera: CameraDescriptor,
    pub instances: Vec<MeshInstanceDescriptor>,
}

impl SceneDescriptor {
    pub fn new(instances: Vec<MeshInstanceDescriptor>) -> Self {
        Self {
            camera: CameraDescriptor::default(),
            instances,
        }
    }

    pub fn with_camera(mut self, camera: CameraDescriptor) -> Self {
        self.camera = camera;
        self
    }
}