//This is simple template of 3D-Coat's script. Script language is very close to c++ and based on angelscript.
//You will usually see it if you used Scripts->Create new script
//Read general syntax description at http://angelcode.com/angelscript/sdk/docs/manual/doc_script.html and
//http://angelcode.com/angelscript/sdk/docs/manual/doc_understanding_as.html
//But if you know c/c++ it will be easy to write scripts. For beginning you may just use mostly one command 
//cmd("Some UI command");
//With this command you may execute any item in UI. It is easy to get UI item command - hover required comamnd in UI and press MMB and RMB simultaneously. 
//Corresponding command will be copied to clipboard. You may read about other commands in scripting manual.

void main() {

    Vec3 scaling( 2, 5, 6 );
    Vec3 translation( -200, -50, 600 );
    Mat4 a( scaling, translation );
    ModalDialog(
        "| " + a.get( 0, 0 ) + "  " + a.get( 0, 1 ) + "  " + a.get( 0, 2 ) + "  " + a.get( 0, 3 ) + " |\n"
        "| " + a.get( 1, 0 ) + "  " + a.get( 1, 1 ) + "  " + a.get( 1, 2 ) + "  " + a.get( 1, 3 ) + " |\n"
        "| " + a.get( 2, 0 ) + "  " + a.get( 2, 1 ) + "  " + a.get( 2, 2 ) + "  " + a.get( 2, 3 ) + " |\n"
        "| " + a.get( 3, 0 ) + "  " + a.get( 3, 1 ) + "  " + a.get( 3, 2 ) + "  " + a.get( 3, 3 ) + " |\n",
        "a" );

    Mat4 b(
        2, 0, 0,  1,
        0, 3, 0,  2,
        0, 0, 1, -1,
        0, 0, 0,  1 );
    ModalDialog(
        "| " + b.get( 0, 0 ) + "  " + b.get( 0, 1 ) + "  " + b.get( 0, 2 ) + "  " + b.get( 0, 3 ) + " |\n"
        "| " + b.get( 1, 0 ) + "  " + b.get( 1, 1 ) + "  " + b.get( 1, 2 ) + "  " + b.get( 1, 3 ) + " |\n"
        "| " + b.get( 2, 0 ) + "  " + b.get( 2, 1 ) + "  " + b.get( 2, 2 ) + "  " + b.get( 2, 3 ) + " |\n"
        "| " + b.get( 3, 0 ) + "  " + b.get( 3, 1 ) + "  " + b.get( 3, 2 ) + "  " + b.get( 3, 3 ) + " |\n",
        "b" );
    // @todo Don't work: showMat4( b, "b" );
    
    ModalDialog( "" + b.determinant(), "b.determinant()" );

    ModalDialog( "" + b.trace(), "b.trace()" );

    b.invert();
    ModalDialog(
        "| " + b.get( 0, 0 ) + "  " + b.get( 0, 1 ) + "  " + b.get( 0, 2 ) + "  " + b.get( 0, 3 ) + " |\n"
        "| " + b.get( 1, 0 ) + "  " + b.get( 1, 1 ) + "  " + b.get( 1, 2 ) + "  " + b.get( 1, 3 ) + " |\n"
        "| " + b.get( 2, 0 ) + "  " + b.get( 2, 1 ) + "  " + b.get( 2, 2 ) + "  " + b.get( 2, 3 ) + " |\n"
        "| " + b.get( 3, 0 ) + "  " + b.get( 3, 1 ) + "  " + b.get( 3, 2 ) + "  " + b.get( 3, 3 ) + " |\n",
        "b.invert()" );

    b.transpose();
    ModalDialog(
        "| " + b.get( 0, 0 ) + "  " + b.get( 0, 1 ) + "  " + b.get( 0, 2 ) + "  " + b.get( 0, 3 ) + " |\n"
        "| " + b.get( 1, 0 ) + "  " + b.get( 1, 1 ) + "  " + b.get( 1, 2 ) + "  " + b.get( 1, 3 ) + " |\n"
        "| " + b.get( 2, 0 ) + "  " + b.get( 2, 1 ) + "  " + b.get( 2, 2 ) + "  " + b.get( 2, 3 ) + " |\n"
        "| " + b.get( 3, 0 ) + "  " + b.get( 3, 1 ) + "  " + b.get( 3, 2 ) + "  " + b.get( 3, 3 ) + " |\n",
        "b.transpose()" );
    
    //ModalDialog( b.isZero() ? "true" : "false", "b.isZero()" );
    Mat4 zero(
        0, 0, 0, 0,
        0, 0, 0, 0,
        0, 0, 0, 0,
        0, 0, 0, 0 );
    //ModalDialog( zero.isZero() ? "true" : "false", "zero.isZero()" );

    //ModalDialog( b.isIdentity() ? "true" : "false", "b.isIdentity()" );
    Mat4 identity(
        1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1 );
    //ModalDialog( identity.isIdentity() ? "true" : "false", "identity.isIdentity()" );
        
    Vec3 s = b.scaling();
    ModalDialog( s.x + " " + s.y + " " + s.z, "b.scaling()" );
    
    Vec3 t = b.translation();
    ModalDialog( t.x + " " + t.y + " " + t.z, "b.translation()" );
}




void showMat4( Mat4 m, string title ) {
    ModalDialog(
        "| " + m.get( 0, 0 ) + "  " + m.get( 0, 1 ) + "  " + m.get( 0, 2 ) + "  " + m.get( 0, 3 ) + " |\n"
        "| " + m.get( 1, 0 ) + "  " + m.get( 1, 1 ) + "  " + m.get( 1, 2 ) + "  " + m.get( 1, 3 ) + " |\n"
        "| " + m.get( 2, 0 ) + "  " + m.get( 2, 1 ) + "  " + m.get( 2, 2 ) + "  " + m.get( 2, 3 ) + " |\n"
        "| " + m.get( 3, 0 ) + "  " + m.get( 3, 1 ) + "  " + m.get( 3, 2 ) + "  " + m.get( 3, 3 ) + " |\n",
        title );
}
