use super::*;
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct Light {
#[get(type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub kind: LightType,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub position: Vector3D,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub direction: Vector3D,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) color: Vector3D,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub intensity: f64,
#[get(type(copy))]
pub falloff: f64,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub spot_cos: f64,
}
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct Material {
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) kind: MaterialKind,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) albedo: Vector3D,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) specular: f64,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) shininess: f64,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) emissive: Vector3D,
}
#[derive(Clone, Copy, Debug, Getter)]
pub(crate) struct LightSample {
#[get(pub(crate), type(copy))]
pub(crate) color: Vector3D,
#[get(pub(crate), type(copy))]
pub(crate) intensity: f64,
#[get(pub(crate), type(copy))]
pub(crate) direction: Vector3D,
}
#[derive(Clone, Copy, Debug, Getter)]
pub(crate) struct ShadowSegment {
#[get(pub(crate), type(copy))]
pub(crate) origin: Vector3D,
#[get(pub(crate), type(copy))]
pub(crate) direction: Vector3D,
#[get(pub(crate), type(copy))]
pub(crate) distance: f64,
}
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct LightingUniforms {
#[get(pub(crate))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) lights: Vec<Light>,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
pub ambient: Vector3D,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) eye: Vector3D,
}