mod base;
pub mod set;
pub mod aabb;
use crate::{
object::{kinematic_body::KinematicBody, static_body::StaticBody, trigger_area::TriggerArea},
Shared,
};
use parry::math::Real;
use set::Set;
#[derive(Default)]
pub struct World<T = (), B = ()> {
kinematic_set: Set<KinematicBody<B>>,
static_set: Set<StaticBody<B>>,
trigger_set: Set<TriggerArea<T, B>>,
epsilon: Real,
}
impl<B, T> World<T, B> {
pub fn new(epsilon: Real) -> Self {
Self {
kinematic_set: Set::default(),
static_set: Set::default(),
trigger_set: Set::default(),
epsilon,
}
}
pub fn with_capacity(
epsilon: Real,
cap_kinematic: usize,
cap_static: usize,
cap_trigger: usize,
) -> Self {
Self {
kinematic_set: Set::with_capacity(cap_kinematic),
static_set: Set::with_capacity(cap_static),
trigger_set: Set::with_capacity(cap_trigger),
epsilon,
}
}
}
impl<B, T> World<T, B> {
#[inline]
pub fn add_kinematic(&mut self, body: Shared<KinematicBody<B>>) {
self.kinematic_set.store(body); }
#[inline]
pub fn add_static(&mut self, body: Shared<StaticBody<B>>) {
self.static_set.add(body);
}
#[inline]
pub fn add_trigger(&mut self, area: Shared<TriggerArea<T, B>>) {
self.trigger_set.add(area);
}
}
impl<B, T> World<T, B> {
#[inline]
pub fn remove_kinematic(&mut self, body: &Shared<KinematicBody<B>>) {
self.kinematic_set.quick_remove(body);
}
#[inline]
pub fn remove_static(&mut self, body: &Shared<StaticBody<B>>) {
self.static_set.clean_remove(body);
}
#[inline]
pub fn remove_trigger(&mut self, area: &Shared<TriggerArea<T, B>>) {
self.trigger_set.clean_remove(area);
}
}
impl<B, T> World<T, B> {
pub fn kinematics(&self) -> &Set<KinematicBody<B>> {
&self.kinematic_set
}
pub fn statics(&self) -> &Set<StaticBody<B>> {
&self.static_set
}
pub fn triggers(&self) -> &Set<TriggerArea<T, B>> {
&self.trigger_set
}
}
impl<B, T> World<T, B> {
pub fn kinematics_mut(&mut self) -> &mut Set<KinematicBody<B>> {
&mut self.kinematic_set
}
pub fn statics_mut(&mut self) -> &mut Set<StaticBody<B>> {
&mut self.static_set
}
pub fn triggers_mut(&mut self) -> &mut Set<TriggerArea<T, B>> {
&mut self.trigger_set
}
}