use avian2d::{dynamics::{joints::EntityConstraint, solver::{joint_damping, schedule::SubstepSolverSystems, solver_body::{SolverBody, SolverBodyInertia}}}, math::RecipOrZero}; use crate::prelude::*; pub fn damping_plugin(app: &mut App) { let substeps = app.get_schedule_mut(SubstepSchedule).expect("Add SubstepSchedule first"); substeps.add_systems( module_joint_damping:: .after(joint_damping::) // DistanceJoint is the last damping in vanilla avian .in_set(SubstepSolverSystems::Damping) ); } #[derive(Component, Debug, Clone, Copy)] pub struct ModuleJointDamping { pub distance: f32, pub angular: f32, } fn module_joint_damping>( bodies: Query<(&mut SolverBody, &SolverBodyInertia, &Transform)>, joints: Query<(&T, &ModuleJointDamping)>, time: Res