1 module re.util.newtonphys;
2 
3 version (physics) {
4     import newton = bindbc.newton.types;
5     import re.math;
6 
7     struct newton_vector {
8     align(4):
9         newton.dFloat x = 0;
10         newton.dFloat y = 0;
11         newton.dFloat z = 0;
12         newton.dFloat w = 0;
13     }
14 
15     struct newton_matrix {
16     align(4):
17         newton_vector front;
18         newton_vector up;
19         newton_vector right;
20         newton_vector posit;
21     }
22 
23     pragma(inline, true) {
24         // static newton_vector convert_vec3(const(Vector3) vec) {
25         //     return newton_vector(vec.x, vec.y, vec.z, 1.0);
26         // }
27 
28         // static Vector3 convert_vec3(const(newton_vector) vec) {
29         //     return Vector3(vec.x, vec.y, vec.z);
30         // }
31 
32         static Vector4 convert_vec3(const(Vector3) vec) {
33             return Vector4(vec.x, vec.y, vec.z, 1.0);
34         }
35 
36         static Vector3 convert_vec3(const(Vector4) vec) {
37             return Vector3(vec.x, vec.y, vec.z);
38         }
39 
40         static Quaternion convert_quat(const(Quaternion) quat) {
41             return quat;
42         }
43 
44         // static Quaternion convert_quat(const(dl_quat.Quaternionf) quat) {
45         //     auto vec = quat.vectorof[];
46         //     return Quaternion(vec[0], vec[1], vec[2], vec[3]);
47         // }
48 
49         // static dl_quat.Quaternionf convert_quat(const(Quaternion) quat) {
50         //     return dl_quat.Quaternionf(quat.x, quat.y, quat.z, quat.w);
51         // }
52 
53         // static dl_mat.Matrix4x4f convert_mat(const(Matrix) mat) {
54         //     return dl_mat.Matrix4x4f([
55         //             mat.m0, mat.m4, mat.m8, mat.m12, mat.m1, mat.m5, mat.m9,
56         //             mat.m13, mat.m2, mat.m6, mat.m10, mat.m14, mat.m3, mat.m7,
57         //             mat.m11, mat.m15
58         //             ]);
59         // }
60     }
61 }