use amethyst_core::ecs::Entity;
use amethyst_core::math::Isometry3;
use crate::{objects::*, PtReal};
pub trait AreaPhysicsServerTrait<N: PtReal> {
fn create(&self, area_desc: &AreaDesc) -> PhysicsHandle<PhysicsAreaTag>;
fn set_entity(&self, area_tag: PhysicsAreaTag, index: Option<Entity>);
fn entity(&self, area_tag: PhysicsAreaTag) -> Option<Entity>;
fn set_shape(&self, area_tag: PhysicsAreaTag, shape_tag: Option<PhysicsShapeTag>);
fn shape(&self, area_tag: PhysicsAreaTag) -> Option<PhysicsShapeTag>;
fn set_transform(&self, area_tag: PhysicsAreaTag, transf: &Isometry3<N>);
fn transform(&self, area_tag: PhysicsAreaTag) -> Isometry3<N>;
fn set_belong_to(&self, area_tag: PhysicsAreaTag, groups: Vec<CollisionGroup>);
fn belong_to(&self, area_tag: PhysicsAreaTag) -> Vec<CollisionGroup>;
fn set_collide_with(&self, area_tag: PhysicsAreaTag, groups: Vec<CollisionGroup>);
fn collide_with(&self, area_tag: PhysicsAreaTag) -> Vec<CollisionGroup>;
fn overlap_events(&self, area_tag: PhysicsAreaTag) -> Vec<OverlapEvent>;
}
#[derive(Debug)]
pub struct AreaDesc {
pub belong_to: Vec<CollisionGroup>,
pub collide_with: Vec<CollisionGroup>,
}
impl Default for AreaDesc {
fn default() -> Self {
AreaDesc {
belong_to: vec![CollisionGroup::default()],
collide_with: vec![CollisionGroup::default()],
}
}
}
#[derive(Copy, Clone, PartialEq, Debug)]
pub enum OverlapEvent {
Enter(PhysicsRigidBodyTag, Option<Entity>),
Exit(PhysicsRigidBodyTag, Option<Entity>),
}