aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md5
-rw-r--r--benchmarks2d/balls2.rs6
-rw-r--r--benchmarks2d/joint_ball2.rs6
-rw-r--r--benchmarks2d/joint_fixed2.rs6
-rw-r--r--benchmarks3d/balls3.rs6
-rw-r--r--benchmarks3d/joint_ball3.rs6
-rw-r--r--benchmarks3d/joint_fixed3.rs6
-rw-r--r--build/rapier2d-f64/Cargo.toml3
-rw-r--r--build/rapier2d/Cargo.toml3
-rw-r--r--build/rapier3d-f64/Cargo.toml3
-rw-r--r--build/rapier3d/Cargo.toml3
-rw-r--r--examples2d/add_remove2.rs9
-rw-r--r--examples2d/joints2.rs6
-rw-r--r--examples2d/one_way_platforms2.rs33
-rw-r--r--examples3d/debug_add_remove_collider3.rs7
-rw-r--r--examples3d/debug_dynamic_collider_add3.rs4
-rw-r--r--examples3d/fountain3.rs9
-rw-r--r--examples3d/joints3.rs20
-rw-r--r--examples3d/one_way_platforms3.rs43
-rw-r--r--examples3d/platform3.rs56
-rw-r--r--src/data/arena.rs87
-rw-r--r--src/data/coarena.rs30
-rw-r--r--src/data/component_set.rs106
-rw-r--r--src/data/mod.rs3
-rw-r--r--src/dynamics/ccd/ccd_solver.rs444
-rw-r--r--src/dynamics/ccd/toi_entry.rs112
-rw-r--r--src/dynamics/coefficient_combine_rule.rs14
-rw-r--r--src/dynamics/island_manager.rs344
-rw-r--r--src/dynamics/joint/joint_set.rs116
-rw-r--r--src/dynamics/mod.rs17
-rw-r--r--src/dynamics/rigid_body.rs728
-rw-r--r--src/dynamics/rigid_body_components.rs659
-rw-r--r--src/dynamics/rigid_body_set.rs658
-rw-r--r--src/dynamics/solver/categorization.rs13
-rw-r--r--src/dynamics/solver/interaction_groups.rs96
-rw-r--r--src/dynamics/solver/island_solver.rs92
-rw-r--r--src/dynamics/solver/joint_constraint/ball_position_constraint.rs56
-rw-r--r--src/dynamics/solver/joint_constraint/ball_position_constraint_wide.rs83
-rw-r--r--src/dynamics/solver/joint_constraint/ball_velocity_constraint.rs114
-rw-r--r--src/dynamics/solver/joint_constraint/ball_velocity_constraint_wide.rs190
-rw-r--r--src/dynamics/solver/joint_constraint/fixed_position_constraint.rs48
-rw-r--r--src/dynamics/solver/joint_constraint/fixed_position_constraint_wide.rs34
-rw-r--r--src/dynamics/solver/joint_constraint/fixed_velocity_constraint.rs86
-rw-r--r--src/dynamics/solver/joint_constraint/fixed_velocity_constraint_wide.rs196
-rw-r--r--src/dynamics/solver/joint_constraint/generic_position_constraint.rs2
-rw-r--r--src/dynamics/solver/joint_constraint/generic_position_constraint_wide.rs13
-rw-r--r--src/dynamics/solver/joint_constraint/generic_velocity_constraint.rs16
-rw-r--r--src/dynamics/solver/joint_constraint/generic_velocity_constraint_wide.rs154
-rw-r--r--src/dynamics/solver/joint_constraint/joint_constraint.rs139
-rw-r--r--src/dynamics/solver/joint_constraint/joint_position_constraint.rs99
-rw-r--r--src/dynamics/solver/joint_constraint/prismatic_position_constraint.rs42
-rw-r--r--src/dynamics/solver/joint_constraint/prismatic_position_constraint_wide.rs34
-rw-r--r--src/dynamics/solver/joint_constraint/prismatic_velocity_constraint.rs138
-rw-r--r--src/dynamics/solver/joint_constraint/prismatic_velocity_constraint_wide.rs296
-rw-r--r--src/dynamics/solver/joint_constraint/revolute_position_constraint.rs60
-rw-r--r--src/dynamics/solver/joint_constraint/revolute_position_constraint_wide.rs34
-rw-r--r--src/dynamics/solver/joint_constraint/revolute_velocity_constraint.rs140
-rw-r--r--src/dynamics/solver/joint_constraint/revolute_velocity_constraint_wide.rs258
-rw-r--r--src/dynamics/solver/parallel_island_solver.rs39
-rw-r--r--src/dynamics/solver/parallel_solver_constraints.rs26
-rw-r--r--src/dynamics/solver/position_constraint.rs44
-rw-r--r--src/dynamics/solver/position_constraint_wide.rs69
-rw-r--r--src/dynamics/solver/position_ground_constraint.rs33
-rw-r--r--src/dynamics/solver/position_ground_constraint_wide.rs54
-rw-r--r--src/dynamics/solver/position_solver.rs31
-rw-r--r--src/dynamics/solver/solver_constraints.rs152
-rw-r--r--src/dynamics/solver/velocity_constraint.rs60
-rw-r--r--src/dynamics/solver/velocity_constraint_wide.rs144
-rw-r--r--src/dynamics/solver/velocity_ground_constraint.rs56
-rw-r--r--src/dynamics/solver/velocity_ground_constraint_wide.rs123
-rw-r--r--src/dynamics/solver/velocity_solver.rs51
-rw-r--r--src/geometry/broad_phase_multi_sap/broad_phase.rs220
-rw-r--r--src/geometry/broad_phase_multi_sap/sap_layer.rs5
-rw-r--r--src/geometry/collider.rs305
-rw-r--r--src/geometry/collider_components.rs220
-rw-r--r--src/geometry/collider_set.rs277
-rw-r--r--src/geometry/contact_pair.rs22
-rw-r--r--src/geometry/mod.rs17
-rw-r--r--src/geometry/narrow_phase.rs593
-rw-r--r--src/lib.rs8
-rw-r--r--src/pipeline/collision_pipeline.rs67
-rw-r--r--src/pipeline/mod.rs1
-rw-r--r--src/pipeline/physics_hooks.rs83
-rw-r--r--src/pipeline/physics_pipeline.rs360
-rw-r--r--src/pipeline/query_pipeline.rs424
-rw-r--r--src/pipeline/user_changes.rs156
-rw-r--r--src_testbed/box2d_backend.rs4
-rw-r--r--src_testbed/harness/mod.rs14
-rw-r--r--src_testbed/physics/mod.rs6
-rw-r--r--src_testbed/physx_backend.rs6
-rw-r--r--src_testbed/testbed.rs15
91 files changed, 5996 insertions, 3680 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 61bce74..2d3dcf9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## v0.9.0
+
+### Modified
+- Renamed `BodyStatus` to `RigidBodyType`.
+
## v0.8.0
### Modified
- Switch to nalgebra 0.26.
diff --git a/benchmarks2d/balls2.rs b/benchmarks2d/balls2.rs
index 6791505..9a28195 100644
--- a/benchmarks2d/balls2.rs
+++ b/benchmarks2d/balls2.rs
@@ -1,5 +1,5 @@
use na::Point2;
-use rapier2d::dynamics::{BodyStatus, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier2d::dynamics::{JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier2d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed2d::Testbed;
@@ -42,9 +42,9 @@ pub fn init_world(testbed: &mut Testbed) {
let y = j as f32 * shifty + centery;
let status = if j == 0 {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
// Build the rigid body.
diff --git a/benchmarks2d/joint_ball2.rs b/benchmarks2d/joint_ball2.rs
index ecfdc47..35423e7 100644
--- a/benchmarks2d/joint_ball2.rs
+++ b/benchmarks2d/joint_ball2.rs
@@ -1,5 +1,5 @@
use na::Point2;
-use rapier2d::dynamics::{BallJoint, BodyStatus, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier2d::dynamics::{BallJoint, JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier2d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed2d::Testbed;
@@ -28,9 +28,9 @@ pub fn init_world(testbed: &mut Testbed) {
let fi = i as f32;
let status = if k >= numk / 2 - 3 && k <= numk / 2 + 3 && i == 0 {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
let rigid_body = RigidBodyBuilder::new(status)
diff --git a/benchmarks2d/joint_fixed2.rs b/benchmarks2d/joint_fixed2.rs
index 32a219e..861912c 100644
--- a/benchmarks2d/joint_fixed2.rs
+++ b/benchmarks2d/joint_fixed2.rs
@@ -1,5 +1,5 @@
use na::{Isometry2, Point2};
-use rapier2d::dynamics::{BodyStatus, FixedJoint, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier2d::dynamics::{FixedJoint, JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier2d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed2d::Testbed;
@@ -33,9 +33,9 @@ pub fn init_world(testbed: &mut Testbed) {
let fi = i as f32;
let status = if k == 0 {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
let rigid_body = RigidBodyBuilder::new(status)
diff --git a/benchmarks3d/balls3.rs b/benchmarks3d/balls3.rs
index bdbe75e..1f0f1df 100644
--- a/benchmarks3d/balls3.rs
+++ b/benchmarks3d/balls3.rs
@@ -1,5 +1,5 @@
use na::Point3;
-use rapier3d::dynamics::{BodyStatus, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier3d::dynamics::{JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier3d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed3d::Testbed;
@@ -30,9 +30,9 @@ pub fn init_world(testbed: &mut Testbed) {
let z = k as f32 * shift - centerz;
let status = if j == 0 {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
let density = 0.477;
diff --git a/benchmarks3d/joint_ball3.rs b/benchmarks3d/joint_ball3.rs
index fee32a2..12b62a9 100644
--- a/benchmarks3d/joint_ball3.rs
+++ b/benchmarks3d/joint_ball3.rs
@@ -1,5 +1,5 @@
use na::Point3;
-use rapier3d::dynamics::{BallJoint, BodyStatus, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier3d::dynamics::{BallJoint, JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier3d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed3d::Testbed;
@@ -23,9 +23,9 @@ pub fn init_world(testbed: &mut Testbed) {
let fi = i as f32;
let status = if i == 0 && (k % 4 == 0 || k == num - 1) {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
let rigid_body = RigidBodyBuilder::new(status)
diff --git a/benchmarks3d/joint_fixed3.rs b/benchmarks3d/joint_fixed3.rs
index c8912e7..9839e38 100644
--- a/benchmarks3d/joint_fixed3.rs
+++ b/benchmarks3d/joint_fixed3.rs
@@ -1,5 +1,5 @@
use na::{Isometry3, Point3};
-use rapier3d::dynamics::{BodyStatus, FixedJoint, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier3d::dynamics::{FixedJoint, JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier3d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed3d::Testbed;
@@ -36,9 +36,9 @@ pub fn init_world(testbed: &mut Testbed) {
// a joint between these.
let status = if i == 0 && (k % 4 == 0 && k != num - 2 || k == num - 1) {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
let rigid_body = RigidBodyBuilder::new(status)
diff --git a/build/rapier2d-f64/Cargo.toml b/build/rapier2d-f64/Cargo.toml
index 3314825..d244d9b 100644
--- a/build/rapier2d-f64/Cargo.toml
+++ b/build/rapier2d-f64/Cargo.toml
@@ -16,9 +16,10 @@ edition = "2018"
maintenance = { status = "actively-developed" }
[features]
-default = [ "dim2", "f64" ]
+default = [ "dim2", "f64", "default-sets" ]
dim2 = [ ]
f64 = [ ]
+default-sets = [ ]
parallel = [ "rayon" ]
simd-stable = [ "simba/wide", "simd-is-enabled" ]
simd-nightly = [ "simba/packed_simd", "simd-is-enabled" ]
diff --git a/build/rapier2d/Cargo.toml b/build/rapier2d/Cargo.toml
index 790bb94..a149bd9 100644
--- a/build/rapier2d/Cargo.toml
+++ b/build/rapier2d/Cargo.toml
@@ -16,9 +16,10 @@ edition = "2018"
maintenance = { status = "actively-developed" }
[features]
-default = [ "dim2", "f32" ]
+default = [ "dim2", "f32", "default-sets" ]
dim2 = [ ]
f32 = [ ]
+default-sets = [ ]
parallel = [ "rayon" ]
simd-stable = [ "simba/wide", "simd-is-enabled" ]
simd-nightly = [ "simba/packed_simd", "simd-is-enabled" ]
diff --git a/build/rapier3d-f64/Cargo.toml b/build/rapier3d-f64/Cargo.toml
index cb4f03c..4b6519c 100644
--- a/build/rapier3d-f64/Cargo.toml
+++ b/build/rapier3d-f64/Cargo.toml
@@ -16,9 +16,10 @@ edition = "2018"
maintenance = { status = "actively-developed" }
[features]
-default = [ "dim3", "f64" ]
+default = [ "dim3", "f64", "default-sets" ]
dim3 = [ ]
f64 = [ ]
+default-sets = [ ]
parallel = [ "rayon" ]
simd-stable = [ "parry3d-f64/simd-stable", "simba/wide", "simd-is-enabled" ]
simd-nightly = [ "parry3d-f64/simd-nightly", "simba/packed_simd", "simd-is-enabled" ]
diff --git a/build/rapier3d/Cargo.toml b/build/rapier3d/Cargo.toml
index e797ea5..8a3877b 100644
--- a/build/rapier3d/Cargo.toml
+++ b/build/rapier3d/Cargo.toml
@@ -16,9 +16,10 @@ edition = "2018"
maintenance = { status = "actively-developed" }
[features]
-default = [ "dim3", "f32" ]
+default = [ "dim3", "f32", "default-sets" ]
dim3 = [ ]
f32 = [ ]
+default-sets = [ ]
parallel = [ "rayon" ]
simd-stable = [ "parry3d/simd-stable", "simba/wide", "simd-is-enabled" ]
simd-nightly = [ "parry3d/simd-nightly", "simba/packed_simd", "simd-is-enabled" ]
diff --git a/examples2d/add_remove2.rs b/examples2d/add_remove2.rs
index 0aeffbe..826d5c9 100644
--- a/examples2d/add_remove2.rs
+++ b/examples2d/add_remove2.rs
@@ -31,9 +31,12 @@ pub fn init_world(testbed: &mut Testbed) {
.map(|e| e.0)
.collect();
for handle in to_remove {
- physics
- .bodies
- .remove(handle, &mut physics.colliders, &mut physics.joints);
+ physics.bodies.remove(
+ handle,
+ &mut physics.islands,
+ &mut physics.colliders,
+ &mut physics.joints,
+ );
if let (Some(graphics), Some(window)) = (&mut graphics, &mut window) {
graphics.remove_body_nodes(*window, handle);
diff --git a/examples2d/joints2.rs b/examples2d/joints2.rs
index d1a1942..4d7d060 100644
--- a/examples2d/joints2.rs
+++ b/examples2d/joints2.rs
@@ -1,5 +1,5 @@
use na::Point2;
-use rapier2d::dynamics::{BallJoint, BodyStatus, JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier2d::dynamics::{BallJoint, JointSet, RigidBodyBuilder, RigidBodySet, RigidBodyType};
use rapier2d::geometry::{ColliderBuilder, ColliderSet};
use rapier_testbed2d::Testbed;
@@ -31,9 +31,9 @@ pub fn init_world(testbed: &mut Testbed) {
let fi = i as f32;
let status = if i == 0 && k == 0 {
- BodyStatus::Static
+ RigidBodyType::Static
} else {
- BodyStatus::Dynamic
+ RigidBodyType::Dynamic
};
let rigid_body = RigidBodyBuilder::new(status)
diff --git a/examples2d/one_way_platforms2.rs b/examples2d/one_way_platforms2.rs
index fc3acb1..90607f7 100644
--- a/examples2d/one_way_platforms2.rs
+++ b/examples2d/one_way_platforms2.rs
@@ -9,12 +9,15 @@ struct OneWayPlatformHook {
platform2: ColliderHandle,
}
-impl PhysicsHooks for OneWayPlatformHook {
+impl PhysicsHooks<RigidBodySet, ColliderSet> for OneWayPlatformHook {
fn active_hooks(&self) -> PhysicsHooksFlags {
PhysicsHooksFlags::MODIFY_SOLVER_CONTACTS
}
- fn modify_solver_contacts(&self, context: &mut ContactModificationContext) {
+ fn modify_solver_contacts(
+ &self,
+ context: &mut ContactModificationContext<RigidBodySet, ColliderSet>,
+ ) {
// The allowed normal for the first platform is its local +y axis, and the
// allowed normal for the second platform is its local -y axis.
//
@@ -29,16 +32,16 @@ impl PhysicsHooks for OneWayPlatformHook {
// - If context.collider_handle2 == self.platform2 then the allowed normal -y needs to be flipped to +y.
let mut allowed_local_n1 = Vector2::zeros();
- if context.collider_handle1 == self.platform1 {
+ if context.collider1 == self.platform1 {
allowed_local_n1 = Vector2::y();
- } else if context.collider_handle2 == self.platform1 {
+ } else if context.collider2 == self.pla