use crate::*;
#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
pub struct PhysicsConfig {
#[get(type(copy))]
pub(crate) gravity: Vector2D,
#[get(type(copy))]
pub(crate) linear_damping: f64,
#[get(type(copy))]
pub(crate) angular_damping: f64,
}
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct RigidBody2D {
#[get(type(copy))]
pub(crate) id: u64,
#[get(type(copy))]
#[get_mut(pub(crate))]
pub(crate) position: Vector2D,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[new(skip)]
pub(crate) velocity: Vector2D,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
#[new(skip)]
pub(crate) force_accumulator: Vector2D,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[new(skip)]
pub(crate) rotation: f64,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[new(skip)]
pub(crate) angular_velocity: f64,
#[get(type(copy))]
#[get_mut(pub(crate))]
pub(crate) mass: f64,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) inverse_mass: f64,
#[get(type(copy))]
pub(crate) restitution: f64,
#[get(type(copy))]
pub(crate) friction: f64,
#[get(type(copy))]
pub(crate) body_type: BodyType,
#[get(type(copy))]
#[new(skip)]
pub(crate) collider: Option<BodyCollider>,
}
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct PhysicsWorld2D {
#[get(pub(crate))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
#[new(skip)]
pub(crate) bodies: Vec<RigidBody2D>,
#[get(type(copy))]
pub(crate) config: PhysicsConfig,
}
#[derive(Clone, Copy, Data, Debug, New, PartialEq, PartialOrd)]
pub struct PhysicsConfig3D {
#[get(type(copy))]
pub(crate) gravity: Vector3D,
#[get(type(copy))]
pub(crate) linear_damping: f64,
#[get(type(copy))]
pub(crate) angular_damping: f64,
}
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct RigidBody3D {
#[get(type(copy))]
pub(crate) id: u64,
#[get(type(copy))]
#[get_mut(pub(crate))]
pub(crate) position: Vector3D,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[new(skip)]
pub(crate) velocity: Vector3D,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
#[new(skip)]
pub(crate) force_accumulator: Vector3D,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[new(skip)]
pub(crate) rotation: Quaternion,
#[get(type(copy))]
#[get_mut(pub(crate))]
#[new(skip)]
pub(crate) angular_velocity: Vector3D,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
#[new(skip)]
pub(crate) torque_accumulator: Vector3D,
#[get(type(copy))]
#[get_mut(pub(crate))]
pub(crate) mass: f64,
#[get(pub(crate), type(copy))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
pub(crate) inverse_mass: f64,
#[get(type(copy))]
pub(crate) restitution: f64,
#[get(type(copy))]
pub(crate) friction: f64,
#[get(type(copy))]
pub(crate) body_type: BodyType,
#[get(type(copy))]
#[new(skip)]
pub(crate) collider: Option<BodyCollider3D>,
}
#[derive(Clone, Data, Debug, New, PartialEq)]
pub struct PhysicsWorld3D {
#[get(pub(crate))]
#[get_mut(pub(crate))]
#[set(pub(crate))]
#[new(skip)]
pub(crate) bodies: Vec<RigidBody3D>,
#[get(type(copy))]
pub(crate) config: PhysicsConfig3D,
}