use crate::vector3::Real;
use crate::vector3::Vector3;
use crate::integrate::TraitIntegrate;
pub struct Particle {
position: Vector3,
velocity: Vector3,
acceleration: Vector3,
mass_inverse: u32,
}
impl Copy for Particle {}
impl Clone for Particle {
fn clone(&self) -> Self {
*self
}
}
impl Particle {
pub fn new() -> Particle {
Particle {
position: Vector3::new(),
velocity: Vector3::new(),
acceleration: Vector3::new(),
mass_inverse: 0.0,
}
}
}
impl TraitIntegrate for Particle {
fn integrate(&mut self, duration: Real) {
if self.mass_inverse == 0 || duration == 0 {
return;
}
self.position.add(self.velocity.get_scaled(duration));
self.velocity.add(self.acceleration.get_scaled(duration));
self.velocity = self.velocity.get_scaled(damping.powf(duration));
}
}