use super::Hittable; use super::Ray; use super::HitRecord; pub struct HittableList { objects: Vec>, } impl HittableList { pub fn new()-> Self { HittableList { objects: Vec::>::new() } } pub fn clear(&mut self) { self.objects.clear(); } pub fn add(&mut self, obj: Box) { self.objects.push(obj); } pub fn hit(&self, r: &Ray, t_min: f64, t_max: f64, rec: &mut HitRecord) -> bool { let mut hit_anything = false; let mut closest_so_far = t_max; for obj in &self.objects { let mut temp_rec = HitRecord::empty(); if obj.hit(&r, t_min, closest_so_far, &mut temp_rec) { hit_anything = true; closest_so_far = temp_rec.t; *rec = temp_rec; } } return hit_anything; } }