diff --git a/src/bin/flat/tube/mod.rs b/src/bin/flat/tube/mod.rs index 7b5ae03..c079bf0 100644 --- a/src/bin/flat/tube/mod.rs +++ b/src/bin/flat/tube/mod.rs @@ -165,7 +165,27 @@ impl Space { impl Traceable for Space { fn trace(&self, camera: Location, ray: Ray) -> Vec { - self.trace_dbg(camera, ray).0 + let ray = self.camera_ray_to_abs(camera, ray); + let mut hits = vec![]; + std::iter::successors(Some(ray), |ray: &Ray| { + self.trace_iter(*ray) + .skip(1) + .find_map(|ray| { + let hitter = match self.which_subspace(ray.pos) { + Inner => Self::trace_inner, + Outer => Self::trace_outer, + Boundary => return None, + }; + let ret = hitter(self, ray); + hits.extend(ret.objects); // TODO fix distance + Some(ret.end) + }) + .expect("Space::trace_iter does not terminate") + }) + .nth(100) + .is_some() + .then(|| panic!("tracing didn't terminate")); + hits } }