use super::{Material, Vector3};
#[cfg(doc)]
use crate::ray_tracing::CustomRayTracer;
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct Hit {
pub distance: f32,
pub triangle_index: Option<u32>,
pub object_index: Option<u32>,
pub material_index: Option<u32>,
pub normal: Vector3,
pub material: Option<Material>,
}
impl From<audionimbus_sys::IPLHit> for Hit {
fn from(hit: audionimbus_sys::IPLHit) -> Self {
Self {
distance: hit.distance,
triangle_index: if hit.triangleIndex == -1 {
None
} else {
Some(hit.triangleIndex as u32)
},
object_index: if hit.objectIndex == -1 {
None
} else {
Some(hit.objectIndex as u32)
},
material_index: if hit.materialIndex == -1 {
None
} else {
Some(hit.materialIndex as u32)
},
normal: hit.normal.into(),
material: unsafe { hit.material.as_ref().map(|material| material.into()) },
}
}
}