heron_rapier 5.0.2

Physics behavior for Heron, using rapier
Documentation
use bevy::prelude::*;

use heron_core::Damping;

use crate::rapier::dynamics::{RigidBodyDamping, RigidBodySet};
use crate::RigidBodyHandle;

pub(crate) fn update_rapier_damping(
    mut bodies: ResMut<'_, RigidBodySet>,
    dampings: Query<'_, '_, (&RigidBodyHandle, &Damping), Changed<Damping>>,
) {
    for (handle, damping) in dampings.iter() {
        if let Some(body) = bodies.get_mut(handle.0) {
            body.set_linear_damping(damping.linear);
            body.set_angular_damping(damping.angular);
        }
    }
}

pub(crate) fn reset_rapier_damping(
    mut bodies: ResMut<'_, RigidBodySet>,
    handles: Query<'_, '_, &RigidBodyHandle>,
    removed: RemovedComponents<'_, Damping>,
) {
    removed
        .iter()
        .filter_map(|entity| handles.get(entity).ok())
        .for_each(|handle| {
            if let Some(body) = bodies.get_mut(handle.0) {
                body.set_linear_damping(RigidBodyDamping::default().linear_damping);
                body.set_angular_damping(RigidBodyDamping::default().angular_damping);
            }
        });
}