anput_physics/queries/
point.rs1use crate::{Scalar, components::BodyAccessInfo, density_fields::DensityField};
2use vek::Vec3;
3
4#[derive(Debug, Default, Clone, PartialEq)]
5pub struct PointOverlapQuery {
6 pub position: Vec3<Scalar>,
7 pub resolution: Vec3<Scalar>,
8 pub density_threshold: Scalar,
9}
10
11impl PointOverlapQuery {
12 pub fn query_field(
13 &self,
14 field: &dyn DensityField,
15 info: &BodyAccessInfo,
16 ) -> Option<PointOverlapResult> {
17 let density = field.density_at_point(self.position, info);
18 if density >= self.density_threshold {
19 let normal = field.normal_at_point(self.position, self.resolution, info);
20 Some(PointOverlapResult {
21 point: self.position,
22 density,
23 normal,
24 })
25 } else {
26 None
27 }
28 }
29}
30
31pub struct PointOverlapResult {
32 pub point: Vec3<Scalar>,
33 pub density: Scalar,
34 pub normal: Vec3<Scalar>,
35}