diff --git a/fyrox-impl/Cargo.toml b/fyrox-impl/Cargo.toml index b000f3fa2..5bbb76ccc 100644 --- a/fyrox-impl/Cargo.toml +++ b/fyrox-impl/Cargo.toml @@ -27,8 +27,8 @@ fyrox-graphics-gl = { path = "../fyrox-graphics-gl", version = "1.0.0" } fyrox-texture = { path = "../fyrox-texture", version = "1.0.0" } fyrox-autotile = { path = "../fyrox-autotile", version = "1.0.0" } fyrox-material = { path = "../fyrox-material", version = "1.0.0" } -rapier2d = { version = "0.30", features = ["debug-render"] } -rapier3d = { version = "0.30", features = ["debug-render"] } +rapier2d = { version = "0.31", features = ["debug-render"] } +rapier3d = { version = "0.31", features = ["debug-render"] } image = { version = "0.25.1", default-features = false, features = ["gif", "jpeg", "png", "tga", "tiff", "bmp"] } inflate = "0.4.5" serde = { version = "1", features = ["derive"] } diff --git a/fyrox-impl/src/scene/dim2/physics.rs b/fyrox-impl/src/scene/dim2/physics.rs index e9379ba58..a5b424475 100644 --- a/fyrox-impl/src/scene/dim2/physics.rs +++ b/fyrox-impl/src/scene/dim2/physics.rs @@ -655,10 +655,7 @@ impl PhysicsWorld { let integration_parameters = rapier2d::dynamics::IntegrationParameters { dt, min_ccd_dt: self.integration_parameters.min_ccd_dt, - contact_damping_ratio: self.integration_parameters.contact_damping_ratio, - contact_natural_frequency: self.integration_parameters.contact_natural_frequency, - joint_natural_frequency: self.integration_parameters.joint_natural_frequency, - joint_damping_ratio: self.integration_parameters.joint_damping_ratio, + contact_softness: rapier2d::dynamics::SpringCoefficients::contact_defaults(), warmstart_coefficient: self.integration_parameters.warmstart_coefficient, length_unit: self.integration_parameters.length_unit, normalized_allowed_linear_error: self.integration_parameters.allowed_linear_error, @@ -771,6 +768,7 @@ impl PhysicsWorld { rapier2d::pipeline::QueryFilter::new().groups(InteractionGroups::new( u32_to_group(opts.groups.memberships.0), u32_to_group(opts.groups.filter.0), + Default::default(), )), ); @@ -852,7 +850,11 @@ impl PhysicsWorld { let filter = rapier2d::pipeline::QueryFilter { flags: rapier2d::pipeline::QueryFilterFlags::from_bits(filter.flags.bits()).unwrap(), groups: filter.groups.map(|g| { - InteractionGroups::new(u32_to_group(g.memberships.0), u32_to_group(g.filter.0)) + InteractionGroups::new( + u32_to_group(g.memberships.0), + u32_to_group(g.filter.0), + Default::default(), + ) }), exclude_collider: filter .exclude_collider @@ -1133,12 +1135,14 @@ impl PhysicsWorld { native.set_collision_groups(InteractionGroups::new( u32_to_group(v.memberships.0), u32_to_group(v.filter.0), + Default::default(), )) }); collider_node.solver_groups.try_sync_model(|v| { native.set_solver_groups(InteractionGroups::new( u32_to_group(v.memberships.0), u32_to_group(v.filter.0), + Default::default(), )) }); collider_node @@ -1200,12 +1204,14 @@ impl PhysicsWorld { .collision_groups(InteractionGroups::new( u32_to_group(collider_node.collision_groups().memberships.0), u32_to_group(collider_node.collision_groups().filter.0), + Default::default(), )) .friction_combine_rule(collider_node.friction_combine_rule().into()) .restitution_combine_rule(collider_node.restitution_combine_rule().into()) .solver_groups(InteractionGroups::new( u32_to_group(collider_node.solver_groups().memberships.0), u32_to_group(collider_node.solver_groups().filter.0), + Default::default(), )) .sensor(collider_node.is_sensor()); diff --git a/fyrox-impl/src/scene/graph/physics.rs b/fyrox-impl/src/scene/graph/physics.rs index b810ca8d8..d46335481 100644 --- a/fyrox-impl/src/scene/graph/physics.rs +++ b/fyrox-impl/src/scene/graph/physics.rs @@ -138,6 +138,8 @@ pub enum CoefficientCombineRule { Multiply, /// The greatest coefficient is chosen. Max, + /// The clamped sum of the two coefficients. + ClampedSum = 4, } uuid_provider!(CoefficientCombineRule = "775d5598-c283-4b44-9cc0-2e23dc8936f4"); @@ -151,6 +153,9 @@ impl From for CoefficientCombineRule CoefficientCombineRule::Multiply } rapier3d::dynamics::CoefficientCombineRule::Max => CoefficientCombineRule::Max, + rapier3d::dynamics::CoefficientCombineRule::ClampedSum => { + CoefficientCombineRule::ClampedSum + } } } } @@ -164,6 +169,9 @@ impl Into for CoefficientCombineRule rapier3d::dynamics::CoefficientCombineRule::Multiply } CoefficientCombineRule::Max => rapier3d::dynamics::CoefficientCombineRule::Max, + CoefficientCombineRule::ClampedSum => { + rapier3d::dynamics::CoefficientCombineRule::ClampedSum + } } } } @@ -177,6 +185,9 @@ impl Into for CoefficientCombineRule rapier2d::dynamics::CoefficientCombineRule::Multiply } CoefficientCombineRule::Max => rapier2d::dynamics::CoefficientCombineRule::Max, + CoefficientCombineRule::ClampedSum => { + rapier2d::dynamics::CoefficientCombineRule::ClampedSum + } } } } @@ -835,31 +846,6 @@ pub struct IntegrationParameters { #[reflect(min_value = 0.0)] pub min_ccd_dt: f32, - /// The damping ratio used by the springs for contact constraint stabilization. - /// Larger values make the constraints more compliant (allowing more visible penetrations - /// before stabilization). Default `5.0`. - #[reflect(min_value = 0.0)] - pub contact_damping_ratio: f32, - - /// The natural frequency used by the springs for contact constraint regularization. - /// Increasing this value will make it so that penetrations get fixed more quickly at the - /// expense of potential jitter effects due to overshooting. In order to make the simulation - /// look stiffer, it is recommended to increase the `contact_damping_ratio` instead of this - /// value. Default: `30.0` - #[reflect(min_value = 0.0)] - pub contact_natural_frequency: f32, - - /// The natural frequency used by the springs for joint constraint regularization. - /// Increasing this value will make it so that penetrations get fixed more quickly. - /// Default: `1.0e6` - #[reflect(min_value = 0.0)] - pub joint_natural_frequency: f32, - - /// The fraction of critical damping applied to the joint for constraints regularization. - /// (default `0.8`). - #[reflect(min_value = 0.0)] - pub joint_damping_ratio: f32, - /// Amount of penetration the engine wont attempt to correct (default: `0.002m`). #[reflect(min_value = 0.0)] pub allowed_linear_error: f32, @@ -910,10 +896,6 @@ impl Default for IntegrationParameters { Self { dt: None, min_ccd_dt: 1.0 / 60.0 / 100.0, - contact_damping_ratio: 5.0, - contact_natural_frequency: 30.0, - joint_natural_frequency: 1.0e6, - joint_damping_ratio: 1.0, warmstart_coefficient: 1.0, allowed_linear_error: 0.002, normalized_max_corrective_velocity: 10.0, @@ -1132,10 +1114,7 @@ impl PhysicsWorld { let integration_parameters = rapier3d::dynamics::IntegrationParameters { dt, min_ccd_dt: self.integration_parameters.min_ccd_dt, - contact_damping_ratio: self.integration_parameters.contact_damping_ratio, - contact_natural_frequency: self.integration_parameters.contact_natural_frequency, - joint_natural_frequency: self.integration_parameters.joint_natural_frequency, - joint_damping_ratio: self.integration_parameters.joint_damping_ratio, + contact_softness: rapier3d::dynamics::SpringCoefficients::contact_defaults(), warmstart_coefficient: self.integration_parameters.warmstart_coefficient, length_unit: self.integration_parameters.length_unit, normalized_allowed_linear_error: self.integration_parameters.allowed_linear_error, @@ -1249,6 +1228,7 @@ impl PhysicsWorld { rapier3d::pipeline::QueryFilter::new().groups(InteractionGroups::new( u32_to_group(opts.groups.memberships.0), u32_to_group(opts.groups.filter.0), + Default::default(), )), ); @@ -1330,7 +1310,11 @@ impl PhysicsWorld { let filter = rapier3d::pipeline::QueryFilter { flags: rapier3d::pipeline::QueryFilterFlags::from_bits(filter.flags.bits()).unwrap(), groups: filter.groups.map(|g| { - InteractionGroups::new(u32_to_group(g.memberships.0), u32_to_group(g.filter.0)) + InteractionGroups::new( + u32_to_group(g.memberships.0), + u32_to_group(g.filter.0), + Default::default(), + ) }), exclude_collider: filter .exclude_collider @@ -1682,12 +1666,14 @@ impl PhysicsWorld { native.set_collision_groups(InteractionGroups::new( u32_to_group(v.memberships.0), u32_to_group(v.filter.0), + Default::default(), )) }); collider_node.solver_groups.try_sync_model(|v| { native.set_solver_groups(InteractionGroups::new( u32_to_group(v.memberships.0), u32_to_group(v.filter.0), + Default::default(), )) }); collider_node @@ -1751,12 +1737,14 @@ impl PhysicsWorld { .collision_groups(InteractionGroups::new( u32_to_group(collider_node.collision_groups().memberships.0), u32_to_group(collider_node.collision_groups().filter.0), + Default::default(), )) .friction_combine_rule(collider_node.friction_combine_rule().into()) .restitution_combine_rule(collider_node.restitution_combine_rule().into()) .solver_groups(InteractionGroups::new( u32_to_group(collider_node.solver_groups().memberships.0), u32_to_group(collider_node.solver_groups().filter.0), + Default::default(), )) .sensor(collider_node.is_sensor());