avian3d/collision/collider/collider_transform/
mod.rsmod plugin;
pub use plugin::ColliderTransformPlugin;
use crate::prelude::*;
use bevy::prelude::*;
#[derive(Reflect, Clone, Copy, Component, Debug, PartialEq)]
#[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serialize", reflect(Serialize, Deserialize))]
#[reflect(Debug, Component, PartialEq)]
pub struct ColliderTransform {
pub translation: Vector,
pub rotation: Rotation,
pub scale: Vector,
}
impl ColliderTransform {
pub fn transform_point(&self, mut point: Vector) -> Vector {
point *= self.scale;
point = self.rotation * point;
point += self.translation;
point
}
}
impl Default for ColliderTransform {
fn default() -> Self {
Self {
translation: Vector::ZERO,
rotation: Rotation::default(),
scale: Vector::ONE,
}
}
}
impl From<Transform> for ColliderTransform {
fn from(value: Transform) -> Self {
Self {
#[cfg(feature = "2d")]
translation: value.translation.truncate().adjust_precision(),
#[cfg(feature = "3d")]
translation: value.translation.adjust_precision(),
rotation: Rotation::from(value.rotation.adjust_precision()),
#[cfg(feature = "2d")]
scale: value.scale.truncate().adjust_precision(),
#[cfg(feature = "3d")]
scale: value.scale.adjust_precision(),
}
}
}