use bevy::prelude::*; use super::{Vector3, VectorComponent}; #[derive(PartialEq, Eq, Hash, Clone, Copy, Debug, Reflect)] pub struct Basis { pub x: Vector3, pub y: Vector3, pub z: Vector3, } impl Default for Basis { fn default() -> Self { Self { x: Vector3::x(), y: Vector3::y(), z: Vector3::z(), } } } impl Basis { pub fn identity() -> Self { Self::default() } pub fn inverse(&self) -> Self { Self { x: self.x * -T::one(), y: self.y * -T::one(), z: self.z * -T::one(), } } pub fn transform(&self, point: Vector3) -> Vector3 { self.x * point.x + self.y * point.y + self.z * point.z } pub fn inverse_transform(&self, point: Vector3) -> Vector3 { self.inverse().transform(point) } }