#![deny(future_incompatible, nonstandard_style)]
#![warn(missing_docs, rust_2018_idioms, clippy::pedantic)]
use bevy_ecs::Entity;
use bevy_math::Vec3;
pub use gravity::Gravity;
pub use velocity::{AxisAngle, Velocity};
mod gravity;
pub mod utils;
mod velocity;
#[derive(Debug, Clone)]
pub enum Body {
Sphere {
radius: f32,
},
Capsule {
half_segment: f32,
radius: f32,
},
Cuboid {
half_extends: Vec3,
},
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum BodyType {
Dynamic,
Static,
Sensor,
}
impl Default for BodyType {
fn default() -> Self {
Self::Dynamic
}
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum CollisionEvent {
Started(Entity, Entity),
Stopped(Entity, Entity),
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct Restitution(f32);
impl Restitution {
pub const PERFECTLY_INELASTIC: Restitution = Restitution(0.0);
pub const PERFECTLY_ELASTIC: Restitution = Restitution(1.0);
#[must_use]
pub fn new(coefficient: f32) -> Self {
Self(coefficient)
}
}
impl Default for Restitution {
fn default() -> Self {
Self::PERFECTLY_INELASTIC
}
}
impl From<f32> for Restitution {
fn from(value: f32) -> Self {
Self(value)
}
}
impl From<Restitution> for f32 {
fn from(Restitution(value): Restitution) -> Self {
value
}
}