1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
use std::ops::{Deref, DerefMut}; use mat32; use num_traits::{One, Zero}; use specs::{Component, VecStorage}; #[derive(Debug)] pub struct GlobalTransform2D<T>(pub [T; 6]); impl<T> Component for GlobalTransform2D<T> where T: 'static + Sync + Send, { type Storage = VecStorage<Self>; } impl<T> From<[T; 6]> for GlobalTransform2D<T> { #[inline(always)] fn from(matrix: [T; 6]) -> Self { GlobalTransform2D(matrix) } } impl<T> Default for GlobalTransform2D<T> where T: One + Zero, { #[inline(always)] fn default() -> Self { Self::from(mat32::new_identity()) } } impl<T> GlobalTransform2D<T> where T: One + Zero, { #[inline(always)] pub fn new() -> Self { Self::default() } } impl<T> AsRef<[T; 6]> for GlobalTransform2D<T> { #[inline(always)] fn as_ref(&self) -> &[T; 6] { &self.0 } } impl<T> AsMut<[T; 6]> for GlobalTransform2D<T> { #[inline(always)] fn as_mut(&mut self) -> &mut [T; 6] { &mut self.0 } } impl<T> Deref for GlobalTransform2D<T> { type Target = [T; 6]; #[inline(always)] fn deref(&self) -> &Self::Target { self.as_ref() } } impl<T> DerefMut for GlobalTransform2D<T> { #[inline(always)] fn deref_mut(&mut self) -> &mut Self::Target { self.as_mut() } }