module re.util.dlib;

version (physics) {
    import dl_vec = dlib.math.vector;
    import dl_quat = dlib.math.quaternion;
    import dl_mat = dlib.math.matrix;
    import re.math;

    pragma(inline, true) {
        static dl_vec.Vector3f convert_vec3(const(Vector3) vec) {
            return dl_vec.Vector3f(vec.x, vec.y, vec.z);
        }

        static Vector3 convert_vec3(const(dl_vec.Vector3f) vec) {
            return Vector3(vec.x, vec.y, vec.z);
        }

        static Quaternion convert_quat(const(dl_quat.Quaternionf) quat) {
            auto vec = quat.vectorof[];
            return Quaternion(vec[0], vec[1], vec[2], vec[3]);
        }

        static dl_quat.Quaternionf convert_quat(const(Quaternion) quat) {
            return dl_quat.Quaternionf(quat.x, quat.y, quat.z, quat.w);
        }

        static dl_mat.Matrix4x4f convert_mat(const(Matrix) mat) {
            return dl_mat.Matrix4x4f([
                    mat.m0, mat.m4, mat.m8, mat.m12, mat.m1, mat.m5, mat.m9,
                    mat.m13, mat.m2, mat.m6, mat.m10, mat.m14, mat.m3, mat.m7,
                    mat.m11, mat.m15
                    ]);
        }
    }
}