

#include "BulletCLIMath.h"

namespace BulletCLI {
    btVector3* XVectorToBTVector(Vector3^ vec)
    {
        float x=vec->X,y=vec->Y,z=vec->Z;
        return new btVector3(x,y,z);
    }
    void BTVectorToXVector(const btVector3& invec, Vector3 %vec)
    {
        vec.X=invec[0];
        vec.Y=invec[1];
        vec.Z=invec[2];
    }
    btTransform* XMatrixToBTTransform(Matrix^ mat)
    {
        //OpenGL                XNA
        //[0  4  8  12]     [11 21 31 41]
        //[1  5  9  13]     [12 22 32 42]
        //[2  6  10 14]     [13 23 33 43]
        //[3  7  11 15]     [14 24 34 44]
        btTransform* result=new btTransform();
        btScalar matGL[16];
        matGL[0]=mat->M11;
        matGL[1]=mat->M12;
        matGL[2]=mat->M13;
        matGL[3]=mat->M14;//
        matGL[4]=mat->M21;
        matGL[5]=mat->M22;
        matGL[6]=mat->M23;
        matGL[7]=mat->M24;//
        matGL[8]=mat->M31;
        matGL[9]=mat->M32;
        matGL[10]=mat->M33;
        matGL[11]=mat->M34;//
        matGL[12]=mat->M41;
        matGL[13]=mat->M42;
        matGL[14]=mat->M43;
        matGL[15]=mat->M44;//
        result->setFromOpenGLMatrix(matGL);
        return result;
    }
    void BTTransformToXMatrix(const btTransform& inmat, Matrix %mat)
    {
        btScalar matGL[16];
        inmat.getOpenGLMatrix(matGL);
        mat=Matrix::Identity;
        mat.M11=matGL[0];
        mat.M12=matGL[1];
        mat.M13=matGL[2];

        mat.M14=matGL[3];

        mat.M21=matGL[4];
        mat.M22=matGL[5];
        mat.M23=matGL[6];

        mat.M24=matGL[7];

        mat.M31=matGL[8];
        mat.M32=matGL[9];
        mat.M33=matGL[10];

        mat.M34=matGL[11];

        mat.M41=matGL[12];
        mat.M42=matGL[13];
        mat.M43=matGL[14];

        mat.M44=matGL[15];
    }
}
