Update the testbed to use PhysicsHooks.
This commit is contained in:
@@ -18,6 +18,7 @@ mod debug_box_ball2;
|
|||||||
mod heightfield2;
|
mod heightfield2;
|
||||||
mod joints2;
|
mod joints2;
|
||||||
mod locked_rotations2;
|
mod locked_rotations2;
|
||||||
|
mod one_way_platforms2;
|
||||||
mod platform2;
|
mod platform2;
|
||||||
mod polyline2;
|
mod polyline2;
|
||||||
mod pyramid2;
|
mod pyramid2;
|
||||||
@@ -65,6 +66,7 @@ pub fn main() {
|
|||||||
("Heightfield", heightfield2::init_world),
|
("Heightfield", heightfield2::init_world),
|
||||||
("Joints", joints2::init_world),
|
("Joints", joints2::init_world),
|
||||||
("Locked rotations", locked_rotations2::init_world),
|
("Locked rotations", locked_rotations2::init_world),
|
||||||
|
("One-way platforms", one_way_platforms2::init_world),
|
||||||
("Platform", platform2::init_world),
|
("Platform", platform2::init_world),
|
||||||
("Polyline", polyline2::init_world),
|
("Polyline", polyline2::init_world),
|
||||||
("Pyramid", pyramid2::init_world),
|
("Pyramid", pyramid2::init_world),
|
||||||
|
|||||||
@@ -40,6 +40,6 @@ pub fn init_world(testbed: &mut Testbed) {
|
|||||||
/*
|
/*
|
||||||
* Set up the testbed.
|
* Set up the testbed.
|
||||||
*/
|
*/
|
||||||
testbed.set_world_with_gravity(bodies, colliders, joints, Vector2::zeros());
|
testbed.set_world_with_params(bodies, colliders, joints, Vector2::zeros(), ());
|
||||||
testbed.look_at(Point2::new(3.0, 2.0), 50.0);
|
testbed.look_at(Point2::new(3.0, 2.0), 50.0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ mod heightfield3;
|
|||||||
mod joints3;
|
mod joints3;
|
||||||
mod keva3;
|
mod keva3;
|
||||||
mod locked_rotations3;
|
mod locked_rotations3;
|
||||||
|
mod one_way_platforms3;
|
||||||
mod platform3;
|
mod platform3;
|
||||||
mod primitives3;
|
mod primitives3;
|
||||||
mod restitution3;
|
mod restitution3;
|
||||||
@@ -83,6 +84,7 @@ pub fn main() {
|
|||||||
("Heightfield", heightfield3::init_world),
|
("Heightfield", heightfield3::init_world),
|
||||||
("Joints", joints3::init_world),
|
("Joints", joints3::init_world),
|
||||||
("Locked rotations", locked_rotations3::init_world),
|
("Locked rotations", locked_rotations3::init_world),
|
||||||
|
("One-way platforms", one_way_platforms3::init_world),
|
||||||
("Platform", platform3::init_world),
|
("Platform", platform3::init_world),
|
||||||
("Restitution", restitution3::init_world),
|
("Restitution", restitution3::init_world),
|
||||||
("Sensor", sensor3::init_world),
|
("Sensor", sensor3::init_world),
|
||||||
|
|||||||
@@ -40,6 +40,6 @@ pub fn init_world(testbed: &mut Testbed) {
|
|||||||
/*
|
/*
|
||||||
* Set up the testbed.
|
* Set up the testbed.
|
||||||
*/
|
*/
|
||||||
testbed.set_world_with_gravity(bodies, colliders, joints, Vector3::zeros());
|
testbed.set_world_with_params(bodies, colliders, joints, Vector3::zeros(), ());
|
||||||
testbed.look_at(Point3::new(2.0, 2.5, 20.0), Point3::new(2.0, 2.5, 0.0));
|
testbed.look_at(Point3::new(2.0, 2.5, 20.0), Point3::new(2.0, 2.5, 0.0));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::dynamics::{CoefficientCombineRule, MassProperties, RigidBodyHandle};
|
use crate::dynamics::{CoefficientCombineRule, MassProperties, RigidBodyHandle};
|
||||||
use crate::geometry::{InteractionGroups, SharedShape};
|
use crate::geometry::{InteractionGroups, SharedShape, SolverFlags};
|
||||||
use crate::math::{AngVector, Isometry, Point, Real, Rotation, Vector, DIM};
|
use crate::math::{AngVector, Isometry, Point, Real, Rotation, Vector, DIM};
|
||||||
use crate::parry::transformation::vhacd::VHACDParameters;
|
use crate::parry::transformation::vhacd::VHACDParameters;
|
||||||
use parry::bounding_volume::AABB;
|
use parry::bounding_volume::AABB;
|
||||||
@@ -50,6 +50,7 @@ pub struct Collider {
|
|||||||
shape: SharedShape,
|
shape: SharedShape,
|
||||||
density: Real,
|
density: Real,
|
||||||
pub(crate) flags: ColliderFlags,
|
pub(crate) flags: ColliderFlags,
|
||||||
|
pub(crate) solver_flags: SolverFlags,
|
||||||
pub(crate) parent: RigidBodyHandle,
|
pub(crate) parent: RigidBodyHandle,
|
||||||
pub(crate) delta: Isometry<Real>,
|
pub(crate) delta: Isometry<Real>,
|
||||||
pub(crate) position: Isometry<Real>,
|
pub(crate) position: Isometry<Real>,
|
||||||
@@ -159,6 +160,9 @@ pub struct ColliderBuilder {
|
|||||||
pub delta: Isometry<Real>,
|
pub delta: Isometry<Real>,
|
||||||
/// Is this collider a sensor?
|
/// Is this collider a sensor?
|
||||||
pub is_sensor: bool,
|
pub is_sensor: bool,
|
||||||
|
/// Do we have to always call the contact modifier
|
||||||
|
/// on this collider?
|
||||||
|
pub modify_contacts: bool,
|
||||||
/// The user-data of the collider being built.
|
/// The user-data of the collider being built.
|
||||||
pub user_data: u128,
|
pub user_data: u128,
|
||||||
/// The collision groups for the collider being built.
|
/// The collision groups for the collider being built.
|
||||||
@@ -182,6 +186,7 @@ impl ColliderBuilder {
|
|||||||
solver_groups: InteractionGroups::all(),
|
solver_groups: InteractionGroups::all(),
|
||||||
friction_combine_rule: CoefficientCombineRule::Average,
|
friction_combine_rule: CoefficientCombineRule::Average,
|
||||||
restitution_combine_rule: CoefficientCombineRule::Average,
|
restitution_combine_rule: CoefficientCombineRule::Average,
|
||||||
|
modify_contacts: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -456,6 +461,13 @@ impl ColliderBuilder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// If set to `true` then the physics hooks will always run to modify
|
||||||
|
/// contacts involving this collider.
|
||||||
|
pub fn modify_contacts(mut self, modify_contacts: bool) -> Self {
|
||||||
|
self.modify_contacts = modify_contacts;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Sets the friction coefficient of the collider this builder will build.
|
/// Sets the friction coefficient of the collider this builder will build.
|
||||||
pub fn friction(mut self, friction: Real) -> Self {
|
pub fn friction(mut self, friction: Real) -> Self {
|
||||||
self.friction = friction;
|
self.friction = friction;
|
||||||
@@ -534,6 +546,8 @@ impl ColliderBuilder {
|
|||||||
flags = flags
|
flags = flags
|
||||||
.with_friction_combine_rule(self.friction_combine_rule)
|
.with_friction_combine_rule(self.friction_combine_rule)
|
||||||
.with_restitution_combine_rule(self.restitution_combine_rule);
|
.with_restitution_combine_rule(self.restitution_combine_rule);
|
||||||
|
let mut solver_flags = SolverFlags::default();
|
||||||
|
solver_flags.set(SolverFlags::MODIFY_SOLVER_CONTACTS, self.modify_contacts);
|
||||||
|
|
||||||
Collider {
|
Collider {
|
||||||
shape: self.shape.clone(),
|
shape: self.shape.clone(),
|
||||||
@@ -542,6 +556,7 @@ impl ColliderBuilder {
|
|||||||
restitution: self.restitution,
|
restitution: self.restitution,
|
||||||
delta: self.delta,
|
delta: self.delta,
|
||||||
flags,
|
flags,
|
||||||
|
solver_flags,
|
||||||
parent: RigidBodyHandle::invalid(),
|
parent: RigidBodyHandle::invalid(),
|
||||||
position: Isometry::identity(),
|
position: Isometry::identity(),
|
||||||
predicted_position: Isometry::identity(),
|
predicted_position: Isometry::identity(),
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ bitflags::bitflags! {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for SolverFlags {
|
||||||
|
fn default() -> Self {
|
||||||
|
SolverFlags::COMPUTE_IMPULSES
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug)]
|
||||||
#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
|
#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
|
||||||
/// A single contact between two collider.
|
/// A single contact between two collider.
|
||||||
@@ -126,10 +132,11 @@ pub struct SolverContact {
|
|||||||
pub friction: Real,
|
pub friction: Real,
|
||||||
/// The effective restitution coefficient at this contact point.
|
/// The effective restitution coefficient at this contact point.
|
||||||
pub restitution: Real,
|
pub restitution: Real,
|
||||||
/// The artificially add relative velocity at the contact point.
|
/// The desired tangent relative velocity at the contact point.
|
||||||
|
///
|
||||||
/// This is set to zero by default. Set to a non-zero value to
|
/// This is set to zero by default. Set to a non-zero value to
|
||||||
/// simulate, e.g., conveyor belts.
|
/// simulate, e.g., conveyor belts.
|
||||||
pub surface_velocity: Vector<Real>,
|
pub tangent_velocity: Vector<Real>,
|
||||||
/// Associated contact data used to warm-start the constraints
|
/// Associated contact data used to warm-start the constraints
|
||||||
/// solver.
|
/// solver.
|
||||||
pub data: ContactData,
|
pub data: ContactData,
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ pub use self::interaction_graph::{
|
|||||||
};
|
};
|
||||||
pub use self::interaction_groups::InteractionGroups;
|
pub use self::interaction_groups::InteractionGroups;
|
||||||
pub use self::narrow_phase::NarrowPhase;
|
pub use self::narrow_phase::NarrowPhase;
|
||||||
pub use self::pair_filter::{PairFilterContext, PhysicsHooks};
|
|
||||||
|
|
||||||
pub use parry::query::TrackedContact;
|
pub use parry::query::TrackedContact;
|
||||||
|
|
||||||
@@ -109,4 +108,3 @@ mod contact_pair;
|
|||||||
mod interaction_graph;
|
mod interaction_graph;
|
||||||
mod interaction_groups;
|
mod interaction_groups;
|
||||||
mod narrow_phase;
|
mod narrow_phase;
|
||||||
mod pair_filter;
|
|
||||||
|
|||||||
@@ -4,15 +4,15 @@ use rayon::prelude::*;
|
|||||||
use crate::data::pubsub::Subscription;
|
use crate::data::pubsub::Subscription;
|
||||||
use crate::data::Coarena;
|
use crate::data::Coarena;
|
||||||
use crate::dynamics::{BodyPair, CoefficientCombineRule, RigidBodySet};
|
use crate::dynamics::{BodyPair, CoefficientCombineRule, RigidBodySet};
|
||||||
use crate::geometry::pair_filter::{ContactModificationContext, PhysicsHooksFlags};
|
|
||||||
use crate::geometry::{
|
use crate::geometry::{
|
||||||
BroadPhasePairEvent, ColliderGraphIndex, ColliderHandle, ContactData, ContactEvent,
|
BroadPhasePairEvent, ColliderGraphIndex, ColliderHandle, ColliderSet, ContactData,
|
||||||
ContactManifoldData, IntersectionEvent, PairFilterContext, PhysicsHooks, RemovedCollider,
|
ContactEvent, ContactManifold, ContactManifoldData, ContactPair, InteractionGraph,
|
||||||
SolverContact, SolverFlags,
|
IntersectionEvent, RemovedCollider, SolverContact, SolverFlags,
|
||||||
};
|
};
|
||||||
use crate::geometry::{ColliderSet, ContactManifold, ContactPair, InteractionGraph};
|
|
||||||
use crate::math::{Real, Vector};
|
use crate::math::{Real, Vector};
|
||||||
use crate::pipeline::EventHandler;
|
use crate::pipeline::{
|
||||||
|
ContactModificationContext, EventHandler, PairFilterContext, PhysicsHooks, PhysicsHooksFlags,
|
||||||
|
};
|
||||||
use parry::query::{DefaultQueryDispatcher, PersistentQueryDispatcher};
|
use parry::query::{DefaultQueryDispatcher, PersistentQueryDispatcher};
|
||||||
use parry::utils::IsometryOpt;
|
use parry::utils::IsometryOpt;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
@@ -518,7 +518,7 @@ impl NarrowPhase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SolverFlags::COMPUTE_IMPULSES
|
co1.solver_flags | co2.solver_flags
|
||||||
};
|
};
|
||||||
|
|
||||||
if !co1.solver_groups.test(co2.solver_groups) {
|
if !co1.solver_groups.test(co2.solver_groups) {
|
||||||
@@ -573,7 +573,7 @@ impl NarrowPhase {
|
|||||||
dist: contact.dist,
|
dist: contact.dist,
|
||||||
friction,
|
friction,
|
||||||
restitution,
|
restitution,
|
||||||
surface_velocity: Vector::zeros(),
|
tangent_velocity: Vector::zeros(),
|
||||||
data: contact.data,
|
data: contact.data,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
//! Physics pipeline structures.
|
//! Physics pipeline structures.
|
||||||
|
|
||||||
use crate::dynamics::{JointSet, RigidBodySet};
|
use crate::dynamics::{JointSet, RigidBodySet};
|
||||||
use crate::geometry::{
|
use crate::geometry::{BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, NarrowPhase};
|
||||||
BroadPhase, BroadPhasePairEvent, ColliderPair, ColliderSet, NarrowPhase, PhysicsHooks,
|
|
||||||
};
|
|
||||||
use crate::math::Real;
|
use crate::math::Real;
|
||||||
use crate::pipeline::EventHandler;
|
use crate::pipeline::{EventHandler, PhysicsHooks};
|
||||||
|
|
||||||
/// The collision pipeline, responsible for performing collision detection between colliders.
|
/// The collision pipeline, responsible for performing collision detection between colliders.
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -2,10 +2,14 @@
|
|||||||
|
|
||||||
pub use collision_pipeline::CollisionPipeline;
|
pub use collision_pipeline::CollisionPipeline;
|
||||||
pub use event_handler::{ChannelEventCollector, EventHandler};
|
pub use event_handler::{ChannelEventCollector, EventHandler};
|
||||||
|
pub use physics_hooks::{
|
||||||
|
ContactModificationContext, PairFilterContext, PhysicsHooks, PhysicsHooksFlags,
|
||||||
|
};
|
||||||
pub use physics_pipeline::PhysicsPipeline;
|
pub use physics_pipeline::PhysicsPipeline;
|
||||||
pub use query_pipeline::QueryPipeline;
|
pub use query_pipeline::QueryPipeline;
|
||||||
|
|
||||||
mod collision_pipeline;
|
mod collision_pipeline;
|
||||||
mod event_handler;
|
mod event_handler;
|
||||||
|
mod physics_hooks;
|
||||||
mod physics_pipeline;
|
mod physics_pipeline;
|
||||||
mod query_pipeline;
|
mod query_pipeline;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use plugin::HarnessPlugin;
|
|||||||
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
|
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
|
||||||
use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase};
|
use rapier::geometry::{BroadPhase, ColliderSet, NarrowPhase};
|
||||||
use rapier::math::Vector;
|
use rapier::math::Vector;
|
||||||
use rapier::pipeline::{ChannelEventCollector, PhysicsPipeline, QueryPipeline};
|
use rapier::pipeline::{ChannelEventCollector, PhysicsHooks, PhysicsPipeline, QueryPipeline};
|
||||||
|
|
||||||
pub mod plugin;
|
pub mod plugin;
|
||||||
|
|
||||||
@@ -111,15 +111,16 @@ impl Harness {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) {
|
pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) {
|
||||||
self.set_world_with_gravity(bodies, colliders, joints, Vector::y() * -9.81)
|
self.set_world_with_params(bodies, colliders, joints, Vector::y() * -9.81, ())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_world_with_gravity(
|
pub fn set_world_with_params(
|
||||||
&mut self,
|
&mut self,
|
||||||
bodies: RigidBodySet,
|
bodies: RigidBodySet,
|
||||||
colliders: ColliderSet,
|
colliders: ColliderSet,
|
||||||
joints: JointSet,
|
joints: JointSet,
|
||||||
gravity: Vector<f32>,
|
gravity: Vector<f32>,
|
||||||
|
hooks: impl PhysicsHooks + 'static,
|
||||||
) {
|
) {
|
||||||
// println!("Num bodies: {}", bodies.len());
|
// println!("Num bodies: {}", bodies.len());
|
||||||
// println!("Num joints: {}", joints.len());
|
// println!("Num joints: {}", joints.len());
|
||||||
@@ -127,6 +128,8 @@ impl Harness {
|
|||||||
self.physics.bodies = bodies;
|
self.physics.bodies = bodies;
|
||||||
self.physics.colliders = colliders;
|
self.physics.colliders = colliders;
|
||||||
self.physics.joints = joints;
|
self.physics.joints = joints;
|
||||||
|
self.physics.hooks = Box::new(hooks);
|
||||||
|
|
||||||
self.physics.broad_phase = BroadPhase::new();
|
self.physics.broad_phase = BroadPhase::new();
|
||||||
self.physics.narrow_phase = NarrowPhase::new();
|
self.physics.narrow_phase = NarrowPhase::new();
|
||||||
self.state.timestep_id = 0;
|
self.state.timestep_id = 0;
|
||||||
@@ -176,8 +179,7 @@ impl Harness {
|
|||||||
&mut physics.bodies,
|
&mut physics.bodies,
|
||||||
&mut physics.colliders,
|
&mut physics.colliders,
|
||||||
&mut physics.joints,
|
&mut physics.joints,
|
||||||
None,
|
&*physics.hooks,
|
||||||
None,
|
|
||||||
event_handler,
|
event_handler,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -192,7 +194,7 @@ impl Harness {
|
|||||||
&mut self.physics.bodies,
|
&mut self.physics.bodies,
|
||||||
&mut self.physics.colliders,
|
&mut self.physics.colliders,
|
||||||
&mut self.physics.joints,
|
&mut self.physics.joints,
|
||||||
&(),
|
&*self.physics.hooks,
|
||||||
&self.event_handler,
|
&self.event_handler,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ use crossbeam::channel::Receiver;
|
|||||||
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
|
use rapier::dynamics::{IntegrationParameters, JointSet, RigidBodySet};
|
||||||
use rapier::geometry::{BroadPhase, ColliderSet, ContactEvent, IntersectionEvent, NarrowPhase};
|
use rapier::geometry::{BroadPhase, ColliderSet, ContactEvent, IntersectionEvent, NarrowPhase};
|
||||||
use rapier::math::Vector;
|
use rapier::math::Vector;
|
||||||
use rapier::pipeline::{PhysicsPipeline, QueryPipeline};
|
use rapier::pipeline::{PhysicsHooks, PhysicsPipeline, QueryPipeline};
|
||||||
|
|
||||||
pub struct PhysicsSnapshot {
|
pub struct PhysicsSnapshot {
|
||||||
timestep_id: usize,
|
timestep_id: usize,
|
||||||
@@ -77,6 +77,7 @@ pub struct PhysicsState {
|
|||||||
pub query_pipeline: QueryPipeline,
|
pub query_pipeline: QueryPipeline,
|
||||||
pub integration_parameters: IntegrationParameters,
|
pub integration_parameters: IntegrationParameters,
|
||||||
pub gravity: Vector<f32>,
|
pub gravity: Vector<f32>,
|
||||||
|
pub hooks: Box<dyn PhysicsHooks>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PhysicsState {
|
impl PhysicsState {
|
||||||
@@ -91,6 +92,7 @@ impl PhysicsState {
|
|||||||
query_pipeline: QueryPipeline::new(),
|
query_pipeline: QueryPipeline::new(),
|
||||||
integration_parameters: IntegrationParameters::default(),
|
integration_parameters: IntegrationParameters::default(),
|
||||||
gravity: Vector::y() * -9.81,
|
gravity: Vector::y() * -9.81,
|
||||||
|
hooks: Box::new(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ use rapier::geometry::{ColliderHandle, ColliderSet, NarrowPhase};
|
|||||||
#[cfg(feature = "dim3")]
|
#[cfg(feature = "dim3")]
|
||||||
use rapier::geometry::{InteractionGroups, Ray};
|
use rapier::geometry::{InteractionGroups, Ray};
|
||||||
use rapier::math::{Isometry, Vector};
|
use rapier::math::{Isometry, Vector};
|
||||||
|
use rapier::pipeline::PhysicsHooks;
|
||||||
|
|
||||||
#[cfg(all(feature = "dim2", feature = "other-backends"))]
|
#[cfg(all(feature = "dim2", feature = "other-backends"))]
|
||||||
use crate::box2d_backend::Box2dWorld;
|
use crate::box2d_backend::Box2dWorld;
|
||||||
@@ -245,20 +246,19 @@ impl Testbed {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) {
|
pub fn set_world(&mut self, bodies: RigidBodySet, colliders: ColliderSet, joints: JointSet) {
|
||||||
self.set_world_with_gravity(bodies, colliders, joints, Vector::y() * -9.81)
|
self.set_world_with_params(bodies, colliders, joints, Vector::y() * -9.81, ())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_world_with_gravity(
|
pub fn set_world_with_params(
|
||||||
&mut self,
|
&mut self,
|
||||||
bodies: RigidBodySet,
|
bodies: RigidBodySet,
|
||||||
colliders: ColliderSet,
|
colliders: ColliderSet,
|
||||||
joints: JointSet,
|
joints: JointSet,
|
||||||
gravity: Vector<f32>,
|
gravity: Vector<f32>,
|
||||||
|
hooks: impl PhysicsHooks + 'static,
|
||||||
) {
|
) {
|
||||||
println!("Num bodies: {}", bodies.len());
|
|
||||||
println!("Num joints: {}", joints.len());
|
|
||||||
self.harness
|
self.harness
|
||||||
.set_world_with_gravity(bodies, colliders, joints, gravity);
|
.set_world_with_params(bodies, colliders, joints, gravity, hooks);
|
||||||
|
|
||||||
self.state
|
self.state
|
||||||
.action_flags
|
.action_flags
|
||||||
|
|||||||
Reference in New Issue
Block a user