fromsoftware_shared/dl_math/
vector.rs1use std::ops::{Add, Sub};
2
3#[repr(C, align(16))]
4#[derive(Debug, Clone, Copy, PartialEq)]
5pub struct F32Vector4(pub f32, pub f32, pub f32, pub f32);
6
7#[repr(C)]
8#[derive(Debug, Clone, Copy, PartialEq)]
9pub struct F32Vector3(pub f32, pub f32, pub f32);
10
11#[repr(C)]
12#[derive(Debug, Clone, Copy, PartialEq)]
13pub struct F32Vector2(pub f32, pub f32);
14
15macro_rules! impl_add_sub {
16 ($t:ident, $($i:tt),+ $(,)?) => {
17 impl Add<$t> for $t {
18 type Output = $t;
19 #[inline]
20 fn add(self, rhs: $t) -> Self::Output {
21 $t($(self.$i + rhs.$i),+)
22 }
23 }
24
25 impl Sub<$t> for $t {
26 type Output = $t;
27 #[inline]
28 fn sub(self, rhs: $t) -> Self::Output {
29 $t($(self.$i - rhs.$i),+)
30 }
31 }
32 };
33}
34
35impl_add_sub!(F32Vector4, 0, 1, 2, 3);
36impl_add_sub!(F32Vector3, 0, 1, 2);
37impl_add_sub!(F32Vector2, 0, 1);
38
39impl From<F32Vector4> for glam::Vec4 {
40 #[inline]
41 fn from(F32Vector4(x, y, z, w): F32Vector4) -> Self {
42 Self::new(x, y, z, w)
43 }
44}
45
46impl From<F32Vector3> for glam::Vec3 {
47 #[inline]
48 fn from(F32Vector3(x, y, z): F32Vector3) -> Self {
49 Self::new(x, y, z)
50 }
51}
52
53impl From<F32Vector3> for glam::Vec3A {
54 #[inline]
55 fn from(F32Vector3(x, y, z): F32Vector3) -> Self {
56 Self::new(x, y, z)
57 }
58}
59
60impl From<F32Vector2> for glam::Vec2 {
61 #[inline]
62 fn from(F32Vector2(x, y): F32Vector2) -> Self {
63 Self::new(x, y)
64 }
65}
66
67impl From<glam::Vec4> for F32Vector4 {
68 #[inline]
69 fn from(v: glam::Vec4) -> Self {
70 Self(v.x, v.y, v.z, v.w)
71 }
72}
73
74impl From<glam::Vec3> for F32Vector3 {
75 #[inline]
76 fn from(v: glam::Vec3) -> Self {
77 Self(v.x, v.y, v.z)
78 }
79}
80
81impl From<glam::Vec3A> for F32Vector3 {
82 #[inline]
83 fn from(v: glam::Vec3A) -> Self {
84 Self(v.x, v.y, v.z)
85 }
86}
87
88impl From<glam::Vec2> for F32Vector2 {
89 #[inline]
90 fn from(v: glam::Vec2) -> Self {
91 Self(v.x, v.y)
92 }
93}