unrust_inbuilt/
transform.rs

1use bevy::prelude::*;
2use genco::prelude::*;
3use unrust_proc_macro::unity_authoring;
4
5#[unity_authoring]
6pub struct UnityTransform {
7    pub mat: [f32; 16],
8}
9
10#[allow(non_snake_case)]
11pub fn UnityTransform_ingest_component(
12    entity: &mut bevy::ecs::world::EntityMut,
13    val: &UnityTransform,
14) {
15    let bundle =
16        TransformBundle::from_transform(Transform::from_matrix(Mat4::from_cols_array(&val.mat)));
17    entity.insert(bundle);
18}
19
20impl From<UnityTransform> for Transform {
21    fn from(value: UnityTransform) -> Self {
22        Transform::from_matrix(Mat4::from_cols_array(&value.mat))
23    }
24}
25
26impl From<Transform> for UnityTransform {
27    fn from(value: Transform) -> Self {
28        UnityTransform {
29            mat: value.compute_matrix().to_cols_array(),
30        }
31    }
32}
33
34impl From<&Transform> for UnityTransform {
35    fn from(value: &Transform) -> Self {
36        UnityTransform {
37            mat: value.compute_matrix().to_cols_array(),
38        }
39    }
40}
41
42impl From<&GlobalTransform> for UnityTransform {
43    fn from(value: &GlobalTransform) -> Self {
44        UnityTransform {
45            mat: value.compute_matrix().to_cols_array(),
46        }
47    }
48}
49
50#[allow(non_snake_case)]
51pub fn UnityTransform_CSHARP_TOKEN() -> csharp::Tokens {
52    quote! {
53        [StructLayout(LayoutKind.Sequential)]
54        public unsafe struct UnityTransform
55        {
56            public fixed float matrix[16];
57
58            public static implicit operator Unity.Transforms.LocalTransform(UnityTransform val) => Unity.Transforms.LocalTransform.FromMatrix(new Unity.Mathematics.float4x4(
59                val.matrix[0], val.matrix[4], val.matrix[8], val.matrix[12],
60                val.matrix[1], val.matrix[5], val.matrix[9], val.matrix[13],
61                val.matrix[2], val.matrix[6], val.matrix[10], val.matrix[14],
62                val.matrix[3], val.matrix[7], val.matrix[11], val.matrix[15]
63            ));
64
65            public static implicit operator Unity.Transforms.LocalToWorld(UnityTransform val) => new Unity.Transforms.LocalToWorld
66            {
67                Value = new Unity.Mathematics.float4x4(
68                    val.matrix[0], val.matrix[4], val.matrix[8], val.matrix[12],
69                    val.matrix[1], val.matrix[5], val.matrix[9], val.matrix[13],
70                    val.matrix[2], val.matrix[6], val.matrix[10], val.matrix[14],
71                    val.matrix[3], val.matrix[7], val.matrix[11], val.matrix[15]
72                )
73            };
74
75
76            public static implicit operator UnityTransform(Unity.Transforms.LocalTransform output)
77            {
78                var transform = new UnityTransform();
79                var val = output.ToMatrix();
80                transform.matrix[0] = val.c0[0];
81                transform.matrix[1] = val.c0[1];
82                transform.matrix[2] = val.c0[2];
83                transform.matrix[3] = val.c0[3];
84                transform.matrix[4] = val.c1[0];
85                transform.matrix[5] = val.c1[1];
86                transform.matrix[6] = val.c1[2];
87                transform.matrix[7] = val.c1[3];
88                transform.matrix[8] = val.c2[0];
89                transform.matrix[9] = val.c2[1];
90                transform.matrix[10] = val.c2[2];
91                transform.matrix[11] = val.c2[3];
92                transform.matrix[12] = val.c3[0];
93                transform.matrix[13] = val.c3[1];
94                transform.matrix[14] = val.c3[2];
95                transform.matrix[15] = val.c3[3];
96
97                return transform;
98            }
99        }
100    }
101}