Skip to main content

oxiphysics_softbody/constraint/
collisionconstraint_traits.rs

1//! # CollisionConstraint - Trait Implementations
2//!
3//! This module contains trait implementations for `CollisionConstraint`.
4//!
5//! ## Implemented Traits
6//!
7//! - `SoftConstraint`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use crate::particle::SoftParticle;
12use oxiphysics_core::math::Real;
13
14use super::functions::SoftConstraint;
15use super::types::CollisionConstraint;
16
17impl SoftConstraint for CollisionConstraint {
18    fn project(&mut self, particles: &mut [SoftParticle], _dt_sub: Real) {
19        let p = &mut particles[self.particle_index];
20        if p.is_static() {
21            return;
22        }
23        let d = self.normal.dot(&(p.position - self.point_on_plane));
24        if d < 0.0 {
25            p.position -= self.normal * d;
26        }
27    }
28}