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