use enumflags2::bitflags;
#[cfg(feature = "derive_serdes")]
use serde::{Deserialize, Serialize};
use crate::{math, object};
pub trait Force {
fn impulse <O : object::Inertial> (&self,
object : &O, step : u64, duration : f64) -> math::Vector3 <f64>;
}
#[derive(Copy, Clone, Debug)]
#[bitflags]
#[repr(u8)]
pub enum Flag {
Gravity = 0b_0000_0001
}
#[cfg_attr(feature = "derive_serdes", derive(Deserialize, Serialize))]
#[derive(Clone, Debug, PartialEq)]
pub struct Gravity {
pub acceleration : math::Vector3 <f64>
}
impl Force for Gravity {
fn impulse <O : object::Inertial> (&self,
object : &O, _step : u64, duration : f64) -> math::Vector3 <f64>
{
duration * object.mass().mass() * self.acceleration
}
}