use bevy_math::{Quat as BevyQuat, Vec3 as BevyVec3};
use bevy_transform::components::Transform as BevyTransform;
#[inline]
pub fn to_boxddd_vec3(value: BevyVec3) -> boxddd::Vec3 {
boxddd::Vec3::new(value.x, value.y, value.z)
}
#[inline]
pub fn to_boxddd_pos(value: BevyVec3) -> boxddd::Pos {
boxddd::Pos::new(value.x.into(), value.y.into(), value.z.into())
}
#[inline]
pub fn to_boxddd_quat(value: BevyQuat) -> boxddd::Quat {
boxddd::Quat::new(boxddd::Vec3::new(value.x, value.y, value.z), value.w)
}
#[inline]
pub fn try_to_boxddd_quat(value: BevyQuat) -> boxddd::Result<boxddd::Quat> {
to_boxddd_quat(value).validate()
}
#[inline]
pub fn to_boxddd_local_transform(value: BevyTransform) -> boxddd::Transform {
boxddd::Transform::new(
to_boxddd_vec3(value.translation),
to_boxddd_quat(value.rotation),
)
}
#[inline]
pub fn to_boxddd_world_transform(value: BevyTransform) -> boxddd::WorldTransform {
boxddd::WorldTransform::new(
to_boxddd_pos(value.translation),
to_boxddd_quat(value.rotation),
)
}
#[inline]
pub fn to_bevy_vec3(value: boxddd::Vec3) -> BevyVec3 {
BevyVec3::new(value.x, value.y, value.z)
}
#[inline]
pub fn to_bevy_pos(value: boxddd::Pos) -> BevyVec3 {
BevyVec3::new(value.x as f32, value.y as f32, value.z as f32)
}
#[inline]
pub fn to_bevy_quat(value: boxddd::Quat) -> BevyQuat {
BevyQuat::from_xyzw(value.v.x, value.v.y, value.v.z, value.s)
}
#[inline]
pub fn to_bevy_local_transform(value: boxddd::Transform) -> BevyTransform {
BevyTransform::from_translation(to_bevy_vec3(value.p)).with_rotation(to_bevy_quat(value.q))
}
#[inline]
pub fn to_bevy_transform(value: boxddd::WorldTransform) -> BevyTransform {
BevyTransform::from_translation(to_bevy_pos(value.p)).with_rotation(to_bevy_quat(value.q))
}
#[inline]
pub fn apply_boxddd_transform(target: &mut BevyTransform, value: boxddd::WorldTransform) {
target.translation = to_bevy_pos(value.p);
target.rotation = to_bevy_quat(value.q);
}
pub trait BevyVec3BoxdddExt {
fn to_boxddd_vec3(self) -> boxddd::Vec3;
fn to_boxddd_pos(self) -> boxddd::Pos;
}
impl BevyVec3BoxdddExt for BevyVec3 {
#[inline]
fn to_boxddd_vec3(self) -> boxddd::Vec3 {
to_boxddd_vec3(self)
}
#[inline]
fn to_boxddd_pos(self) -> boxddd::Pos {
to_boxddd_pos(self)
}
}
pub trait BevyQuatBoxdddExt {
fn to_boxddd_quat(self) -> boxddd::Quat;
fn try_to_boxddd_quat(self) -> boxddd::Result<boxddd::Quat>;
}
impl BevyQuatBoxdddExt for BevyQuat {
#[inline]
fn to_boxddd_quat(self) -> boxddd::Quat {
to_boxddd_quat(self)
}
#[inline]
fn try_to_boxddd_quat(self) -> boxddd::Result<boxddd::Quat> {
try_to_boxddd_quat(self)
}
}
pub trait BevyTransformBoxdddExt {
fn to_boxddd_local_transform(self) -> boxddd::Transform;
fn to_boxddd_world_transform(self) -> boxddd::WorldTransform;
}
impl BevyTransformBoxdddExt for BevyTransform {
#[inline]
fn to_boxddd_local_transform(self) -> boxddd::Transform {
to_boxddd_local_transform(self)
}
#[inline]
fn to_boxddd_world_transform(self) -> boxddd::WorldTransform {
to_boxddd_world_transform(self)
}
}
pub trait BoxdddVec3BevyExt {
fn to_bevy_vec3(self) -> BevyVec3;
}
impl BoxdddVec3BevyExt for boxddd::Vec3 {
#[inline]
fn to_bevy_vec3(self) -> BevyVec3 {
to_bevy_vec3(self)
}
}
impl BoxdddVec3BevyExt for boxddd::Pos {
#[inline]
fn to_bevy_vec3(self) -> BevyVec3 {
to_bevy_pos(self)
}
}
pub trait BoxdddQuatBevyExt {
fn to_bevy_quat(self) -> BevyQuat;
}
impl BoxdddQuatBevyExt for boxddd::Quat {
#[inline]
fn to_bevy_quat(self) -> BevyQuat {
to_bevy_quat(self)
}
}
pub trait BoxdddTransformBevyExt {
fn to_bevy_transform(self) -> BevyTransform;
fn apply_to_bevy_transform(self, target: &mut BevyTransform);
}
impl BoxdddTransformBevyExt for boxddd::Transform {
#[inline]
fn to_bevy_transform(self) -> BevyTransform {
to_bevy_local_transform(self)
}
#[inline]
fn apply_to_bevy_transform(self, target: &mut BevyTransform) {
target.translation = to_bevy_vec3(self.p);
target.rotation = to_bevy_quat(self.q);
}
}
impl BoxdddTransformBevyExt for boxddd::WorldTransform {
#[inline]
fn to_bevy_transform(self) -> BevyTransform {
to_bevy_transform(self)
}
#[inline]
fn apply_to_bevy_transform(self, target: &mut BevyTransform) {
apply_boxddd_transform(target, self);
}
}