Allow the removal of a collider.
This commit is contained in:
@@ -662,7 +662,7 @@ mod test {
|
||||
let rb = RigidBodyBuilder::new_dynamic().build();
|
||||
let co = ColliderBuilder::ball(0.5).build();
|
||||
let hrb = bodies.insert(rb);
|
||||
let hco = colliders.insert(co, hrb, &mut bodies);
|
||||
colliders.insert(co, hrb, &mut bodies);
|
||||
|
||||
broad_phase.update_aabbs(0.0, &bodies, &mut colliders);
|
||||
|
||||
@@ -681,7 +681,7 @@ mod test {
|
||||
let rb = RigidBodyBuilder::new_dynamic().build();
|
||||
let co = ColliderBuilder::ball(0.5).build();
|
||||
let hrb = bodies.insert(rb);
|
||||
let hco = colliders.insert(co, hrb, &mut bodies);
|
||||
colliders.insert(co, hrb, &mut bodies);
|
||||
|
||||
// Make sure the proxy handles is recycled properly.
|
||||
broad_phase.update_aabbs(0.0, &bodies, &mut colliders);
|
||||
|
||||
@@ -3,7 +3,7 @@ use crate::geometry::{
|
||||
Ball, Capsule, ColliderGraphIndex, Contact, Cuboid, HeightField, InteractionGraph, Polygon,
|
||||
Proximity, Triangle, Trimesh,
|
||||
};
|
||||
use crate::math::{Isometry, Point, Vector};
|
||||
use crate::math::{AngVector, Isometry, Point, Rotation, Vector};
|
||||
use na::Point3;
|
||||
use ncollide::bounding_volume::{HasBoundingVolume, AABB};
|
||||
use num::Zero;
|
||||
@@ -159,6 +159,11 @@ impl Collider {
|
||||
&self.position
|
||||
}
|
||||
|
||||
/// The position of this collider wrt the body it is attached to.
|
||||
pub fn position_wrt_parent(&self) -> &Isometry<f32> {
|
||||
&self.delta
|
||||
}
|
||||
|
||||
/// The density of this collider.
|
||||
pub fn density(&self) -> f32 {
|
||||
self.density
|
||||
@@ -347,7 +352,41 @@ impl ColliderBuilder {
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the initial translation of the collider to be created,
|
||||
/// relative to the rigid-body it is attached to.
|
||||
#[cfg(feature = "dim2")]
|
||||
pub fn translation(mut self, x: f32, y: f32) -> Self {
|
||||
self.delta.translation.x = x;
|
||||
self.delta.translation.y = y;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the initial translation of the collider to be created,
|
||||
/// relative to the rigid-body it is attached to.
|
||||
#[cfg(feature = "dim3")]
|
||||
pub fn translation(mut self, x: f32, y: f32, z: f32) -> Self {
|
||||
self.delta.translation.x = x;
|
||||
self.delta.translation.y = y;
|
||||
self.delta.translation.z = z;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the initial orientation of the collider to be created,
|
||||
/// relative to the rigid-body it is attached to.
|
||||
pub fn rotation(mut self, angle: AngVector<f32>) -> Self {
|
||||
self.delta.rotation = Rotation::new(angle);
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the initial position (translation and orientation) of the collider to be created,
|
||||
/// relative to the rigid-body it is attached to.
|
||||
pub fn position(mut self, pos: Isometry<f32>) -> Self {
|
||||
self.delta = pos;
|
||||
self
|
||||
}
|
||||
|
||||
/// Set the position of this collider in the local-space of the rigid-body it is attached to.
|
||||
#[deprecated(note = "Use `.position` instead.")]
|
||||
pub fn delta(mut self, delta: Isometry<f32>) -> Self {
|
||||
self.delta = delta;
|
||||
self
|
||||
|
||||
@@ -47,7 +47,6 @@ impl ColliderSet {
|
||||
parent_handle: RigidBodyHandle,
|
||||
bodies: &mut RigidBodySet,
|
||||
) -> ColliderHandle {
|
||||
let mass_properties = coll.mass_properties();
|
||||
coll.parent = parent_handle;
|
||||
let parent = bodies
|
||||
.get_mut_internal(parent_handle)
|
||||
@@ -55,9 +54,8 @@ impl ColliderSet {
|
||||
coll.position = parent.position * coll.delta;
|
||||
coll.predicted_position = parent.predicted_position * coll.delta;
|
||||
let handle = self.colliders.insert(coll);
|
||||
parent.colliders.push(handle);
|
||||
parent.mass_properties += mass_properties;
|
||||
parent.update_world_mass_properties();
|
||||
let coll = self.colliders.get(handle).unwrap();
|
||||
parent.add_collider_internal(handle, &coll);
|
||||
bodies.activate(parent_handle);
|
||||
handle
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user