pub use collision::algorithm::minkowski::GJK3;
pub use collision::primitive::{ConvexPolyhedron, Cuboid, Particle3, Sphere};
pub use core::{CollisionMode, CollisionStrategy};
pub use core::collide3d::*;
use cgmath::{BaseFloat, Point3, Transform};
use collision::Aabb3;
use collision::dbvt::{DynamicBoundingVolumeTree, TreeValueWrapped};
use collision::primitive::Primitive3;
use specs::{Component, Entity, World};
use collide::{BasicCollisionSystem, SpatialCollisionSystem, SpatialSortingSystem};
use core::{Collider, ContactEvent};
use resources::WithRhusics;
pub type ContactEvent3<S> = ContactEvent<Entity, Point3<S>>;
pub type BasicCollisionSystem3<S, T, Y = ()> =
BasicCollisionSystem<Primitive3<S>, T, TreeValueWrapped<Entity, Aabb3<S>>, Aabb3<S>, Y>;
pub type SpatialSortingSystem3<S, T, Y = ()> =
SpatialSortingSystem<Primitive3<S>, T, TreeValueWrapped<Entity, Aabb3<S>>, Aabb3<S>, Y>;
pub type SpatialCollisionSystem3<S, T, Y = ()> = SpatialCollisionSystem<
Primitive3<S>,
T,
(usize, TreeValueWrapped<Entity, Aabb3<S>>),
Aabb3<S>,
Y,
>;
pub type DynamicBoundingVolumeTree3<S> =
DynamicBoundingVolumeTree<TreeValueWrapped<Entity, Aabb3<S>>>;
pub fn register_collision<S, T, Y>(world: &mut World)
where
S: BaseFloat + Send + Sync + 'static,
T: Transform<Point3<S>> + Component + Send + Sync + 'static,
Y: Collider + Send + Sync + 'static,
{
world.register_collision::<Primitive3<S>, Aabb3<S>, T, TreeValueWrapped<Entity, Aabb3<S>>, Y>();
}