Пример #1
0
// read from file
VECTOR3D clsTranslator::readVector(FILE* file) {
    float x, y, z;
    _ftscanf_s(file, _T("%f"), &x);
    _ftscanf_s(file, _T("%f"), &y);
    _ftscanf_s(file, _T("%f"), &z);
    return VECTOR3D(x, y, z);
}
Пример #2
0
void clsTranslator::readRotation(VECTOR3D& fwd, VECTOR3D& uwd, VECTOR3D& rwd, FILE* file) {
    TCHAR buffer[256];
    fwd = readVector(file);
    _ftscanf_s(file, _T("%s"), buffer, 256);

    uwd = readVector(file);
    _ftscanf_s(file, _T("%s"), buffer, 256);

    rwd = readVector(file);
}
Пример #3
0
MESH_ID clsTranslator::readMeshID(FILE* file) {
    TCHAR name[256];
    errno_t bErrorFlag = _ftscanf_s(file, _T("%s"), name, 256);

    if ( !_tcscmp(name, _T("MICROPHONE")) )
        return MSH_MIC;
    if ( !_tcscmp(name, _T("JAGDPANTHER")) )
        return MSH_TANK;
    if ( !_tcscmp(name, _T("PYRAMID")) )
        return MSH_PYRAMID;
    if ( !_tcscmp(name, _T("CONE")) )
        return MSH_CONE;
    if ( !_tcscmp(name, _T("EXCONE")) )
        return MSH_EXCONE;
    if ( !_tcscmp(name, _T("HOLE")) )
        return MSH_HOLE;

    return MSH_TANK;
}
Пример #4
0
bool clsTranslator::loadSceneScript(LPSCENE3D Scene, TCHAR *fileName) {
    FILE* file;
    errno_t bErrorFlag = _tfopen_s(&file, fileName, _T("r"));
    if (bErrorFlag)
        return false;

    TCHAR buffer[256];
    buffer[19] = '\0';
    bErrorFlag = _ftscanf_s(file, _T("%19c"), buffer);
    if ( wcscmp(buffer, _T("3DEditor scene file")) )
        return false;

    // loading cameras
    bErrorFlag = _ftscanf_s(file, _T("%94c\0"), buffer);
    UINT objCount;
    bErrorFlag = _ftscanf_s(file, _T("%d"), &objCount);
    for (UINT i = 0; i < objCount; i++) {
        LPCAMERA3D camera = new CAMERA3D;

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        camera->setName(buffer, 256);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        readPosition(camera, file);

        bErrorFlag = _ftscanf_s(file, _T("%24c"), buffer);
        VECTOR3D fwd, rwd, uwd;
        readRotation(fwd, uwd, rwd, file);
        camera->setForwardLookDirection(fwd);
        camera->setUpLookDirection(uwd);
        camera->setRightLookDirection(rwd);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        float tmp;
        bErrorFlag = _ftscanf_s(file, _T("%f"), &tmp);
        camera->setHFov(tmp);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag =_ftscanf_s(file, _T("%f"), &tmp);
        camera->setVFov(tmp);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag = _ftscanf_s(file, _T("%f"), &tmp);
        camera->setNearCP(tmp);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag = _ftscanf_s(file, _T("%f"), &tmp);
        camera->setFarCP(tmp);

        bErrorFlag = _ftscanf_s(file, _T("%77c"), buffer, 256);
        Scene->AddObject(camera);
        camera->Transform();
    }

    // loading lighters
    bErrorFlag = _ftscanf_s(file, _T("%94c\0"), buffer);
    bErrorFlag = _ftscanf_s(file, _T("%d"), &objCount);
    for (UINT i = 0; i < objCount; i++) {
        LPDIFLIGHT3D light = new DIFLIGHT3D;

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        light->setName(buffer, 256);

        bErrorFlag = _ftscanf_s(file, _T("%24c"), buffer);
        VECTOR3D fwd, rwd, uwd;
        readRotation(fwd, uwd, rwd, file);
        light->setForwardLookDirection(fwd);
        light->setUpLookDirection(uwd);
        light->setRightLookDirection(rwd);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        float tmp;
        bErrorFlag = _ftscanf_s(file, _T("%f"), &tmp);
        light->setPower(tmp);

        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        int r, g, k;
        bErrorFlag = _ftscanf_s(file, _T("%d %d %d"), &r, &g, &k);
        light->setColor(r, g, k);

        bErrorFlag = _ftscanf_s(file, _T("%77c"), buffer, 256);
        Scene->AddObject(light);
    }

    // loading meshes
    bErrorFlag = _ftscanf_s(file, _T("%94c"), buffer);
    bErrorFlag = _ftscanf_s(file, _T("%d"), &objCount);
    for (UINT i = 0; i < objCount; i++) {
        bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
        //	LPMESH3D mesh = new MESH3D(readMeshID(file));
        switch ( readMeshID(file) ) {
        /*case MSH_PYRAMID:
        	readPyramid((LPPYRAMID3D)mesh, file, Scene);
        	break;
        case MSH_CONE:
        	readCone((LPCONE3D)mesh, file, Scene);
        	break;
        case MSH_EXCONE:
        	readExCone((LPEXCONE3D)mesh, file, Scene);
        	break;
        case MSH_HOLE:
        	readHole((LPHOLE3D)mesh, file, Scene);
        	break;*/
        case MSH_MIC:
            bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
            readMic(file, Scene);
            break;
        case MSH_TANK:
            bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
            readTank(file, Scene);
            break;
        }
    }

    //return ( bErrorFlag != 0 );
    return true;
}
Пример #5
0
void clsTranslator::readTank(FILE* file, LPSCENE3D Scene) {
    LPJAGDPANTHER3D obj;
    TCHAR buffer[256], name[256];
    errno_t bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), name, 256);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    VECTOR3D pos = readVector(file);

    bErrorFlag = _ftscanf_s(file, _T("%24c"), buffer);
    VECTOR3D fwd, rwd, uwd;
    readRotation(fwd, uwd, rwd, file);

    float bL;
    float bW;
    float bH;
    float fta;
    float fba;
    float bta;
    float bba;
    float ta;
    float sa;
    float clen;

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bL);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bW);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bH);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &fta);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &fba);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bta);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bba);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &ta);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &sa);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &clen);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    int r, g, b;
    bErrorFlag = _ftscanf_s(file, _T("%d %d %d"), &r, &g, &b);

    obj = new JAGDPANTHER3D(bL, bW, bH, fba, fta, bba, bta, ta, sa, clen, r, g, b);
    obj->setName(name, 256);
    obj->Translate(pos);
    obj->setForwardLookDirection(fwd);
    obj->setUpLookDirection(uwd);
    obj->setRightLookDirection(rwd);

    Scene->AddObject(obj);
    obj->Transform();
}
Пример #6
0
//void clsTranslator::readPyramid(LPPYRAMID3D obj, FILE* file, LPSCENE3D Scene) {
//	VECTOR3D pos = readVector(file);
//	file.erase(0, 27);
//	VECTOR3D fwd, rwd, uwd;
//	readRotation(fwd, uwd, rwd, file);
//	file.erase(0, 10);
//	obj->Translate(pos);
//	obj->setForwardLookDirection(&fwd);
//	obj->setUpLookDirection(&uwd);
//	obj->setRightLookDirection(&rwd);
//
//	float h = readFloat(file);
//	file.erase(0, 14);
//	float bl = readFloat(file);
//	file.erase(0, 13);
//	float bw = readFloat(file);
//	file.erase(0, 13);
//	float tl = readFloat(file);
//	file.erase(0, 12);
//	float tw = readFloat(file);
//	file.erase(0, 14);
//	pos = readVector(file);
//	obj->setColor((UCHAR)pos.x, (UCHAR)pos.y, (UCHAR)pos.z);
//
//	obj = new PYRAMID3D(h, bl, bw, tl, tw);
//	Scene->AddObject(obj);
//}
//void clsTranslator::readCone(LPCONE3D obj, FILE* file, LPSCENE3D Scene) {
//	VECTOR3D pos = readVector(file);
//	file.erase(0, 27);
//	VECTOR3D fwd, rwd, uwd;
//	readRotation(fwd, uwd, rwd, file);
//	file.erase(0, 10);
//	obj->Translate(pos);
//	obj->setForwardLookDirection(&fwd);
//	obj->setUpLookDirection(&uwd);
//	obj->setRightLookDirection(&rwd);
//
//	float h = readFloat(file);
//	file.erase(0, 14);
//	float br = readFloat(file);
//	file.erase(0, 13);
//	float tr = readFloat(file);
//	file.erase(0, 13);
//	float prec = readFloat(file);
//	file.erase(0, 14);
//	pos = readVector(file);
//	obj->setColor((UCHAR)pos.x, (UCHAR)pos.y, (UCHAR)pos.z);
//
//	obj = new CONE3D(h, br, tr, (UINT)prec);
//	Scene->AddObject(obj);
//}
//void clsTranslator::readExCone(LPEXCONE3D obj, FILE* file, LPSCENE3D Scene) {
//	VECTOR3D pos = readVector(file);
//	file.erase(0, 27);
//	VECTOR3D fwd, rwd, uwd;
//	readRotation(fwd, uwd, rwd, file);
//	file.erase(0, 10);
//	obj->Translate(pos);
//	obj->setForwardLookDirection(&fwd);
//	obj->setUpLookDirection(&uwd);
//	obj->setRightLookDirection(&rwd);
//
//	float h = readFloat(file);
//	file.erase(0, 14);
//	float br = readFloat(file);
//	file.erase(0, 13);
//	float tr = readFloat(file);
//	file.erase(0, 9);
//	float sec = readFloat(file);
//	file.erase(0, 13);
//	float prec = readFloat(file);
//	file.erase(0, 14);
//	pos = readVector(file);
//	obj->setColor((UCHAR)pos.x, (UCHAR)pos.y, (UCHAR)pos.z);
//
//	obj = new EXCONE3D(h, br, tr, sec, (UINT)prec);
//	Scene->AddObject(obj);
//}
//void clsTranslator::readHole(LPHOLE3D obj, FILE* file, LPSCENE3D Scene) {
//	VECTOR3D pos = readVector(file);
//	file.erase(0, 27);
//	VECTOR3D fwd, rwd, uwd;
//	readRotation(fwd, uwd, rwd, file);
//	file.erase(0, 10);
//	obj->Translate(pos);
//	obj->setForwardLookDirection(&fwd);
//	obj->setUpLookDirection(&uwd);
//	obj->setRightLookDirection(&rwd);
//
//	float h = readFloat(file);
//	file.erase(0, 14);
//	float br = readFloat(file);
//	file.erase(0, 19);
//	float bh = readFloat(file);
//	file.erase(0, 13);
//	float tr = readFloat(file);
//	file.erase(0, 18);
//	float th = readFloat(file);
//	file.erase(0, 13);
//	float prec = readFloat(file);
//	file.erase(0, 14);
//	pos = readVector(file);
//	obj->setColor((UCHAR)pos.x, (UCHAR)pos.y, (UCHAR)pos.z);
//
//	obj = new HOLE3D(h, br, bh, tr, th, (UINT)prec);
//	Scene->AddObject(obj);
//}
void clsTranslator::readMic(FILE* file, LPSCENE3D Scene) {
    LPMICROPHONE3D obj;
    TCHAR buffer[256], name[256];
    errno_t bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), name, 256);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    VECTOR3D pos = readVector(file);

    bErrorFlag = _ftscanf_s(file, _T("%24c"), buffer);
    VECTOR3D fwd, rwd, uwd;
    readRotation(fwd, uwd, rwd, file);

    float		tH,			// total height
                bR,			// base radius
                bH,			// base height
                bW,			// button width
                uR,			// upright radius
                uH,			// upright height
                uG,			// upright gap
                hI,			// handle indent
                hR,			// head radius
                hD,			// head depth
                cR;			// core radius
    int			precision;
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &tH);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bR);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bH);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &bW);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &uR);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &uH);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &uG);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &hI);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &hR);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &hD);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &cR);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    bErrorFlag = _ftscanf_s(file, _T("%f"), &precision);

    bErrorFlag = _ftscanf_s(file, _T("%s"), buffer, 256);
    int r, g, b;
    bErrorFlag = _ftscanf_s(file, _T("%d %d %d"), &r, &g, &b);

    obj = new MICROPHONE3D(r, g, b, bR, bH, bW, uR, uH, uG, hI, hR, hD, cR);
    obj->setName(name, 256);
    obj->Translate(pos);
    obj->setForwardLookDirection(fwd);
    obj->setUpLookDirection(uwd);
    obj->setRightLookDirection(rwd);

    Scene->AddObject(obj);
    obj->Transform();
}
Пример #7
0
extern int load_debug(int *argc_p, TCHAR ***argv_p)
{
    int ret = 0;
    int argc = 0;
    TCHAR **argv = NULL;

    // Allocate string buffer.
    TCHAR *ini_file = new TCHAR[FILE_PATH_MAX];
    TCHAR *tmp_buff = new TCHAR[INI_STRING_MAX];
    if (!ini_file || !tmp_buff)
        return 0;
    memset(ini_file, 0, sizeof(TCHAR) * FILE_PATH_MAX);
    memset(tmp_buff, 0, sizeof(TCHAR) * INI_STRING_MAX);

    // Get the file path of ini file.
    if (GetPrivateProfilePath(ini_file))
        goto EXIT;
    // Open ini file.
    FILE *fp = NULL;
    if (_tfopen_s(&fp, ini_file, _T("r")) || !fp)
        goto EXIT;

    // Parse ini file.
    int debug = 0;
    while (1) {
        if (_ftscanf_s(fp, _T("%s"), tmp_buff, INI_STRING_MAX) == EOF)
            goto EXIT;
        if (debug == 0) {
            // Search debug section.
            if (_tcsicmp(tmp_buff, _T("[Debug]")) == 0)
                debug = 1;
            continue;
        }
        if (argc == 0) {
            // Check nums of debug settings.
            if (_stscanf_s(tmp_buff, _T("argc=%d"), &argc) == 1)
                break;
        }
    }

    // Allocate buffers of debug strings.
    argv = new TCHAR *[argc];
    if (!argv)
        goto EXIT;
    memset(argv, 0, sizeof(TCHAR *) * argc);
    for (int i = 1; i < argc; i++) {
        argv[i] = new TCHAR[INI_STRING_MAX];
        if (!(argv[i]))
            goto EXIT;
        memset(argv[i], 0, sizeof(TCHAR) * INI_STRING_MAX);
    }
    // Load debug settings.
    int tmp_index = 0;
    for (int i = 1; i < argc; i++) {
        if (_ftscanf_s(fp, _T("%s"), tmp_buff, INI_STRING_MAX) == EOF)
            goto EXIT;
        if (_stscanf_s(tmp_buff, _T("argv%d=%s"), &tmp_index, argv[i], INI_STRING_MAX) != 2)
            goto EXIT;
    }

    argv[0] = (*argv_p)[0];     // Copy pointer of process path.
    *argv_p = argv;
    *argc_p = argc;
    ret = 1;

EXIT:
    if (ret == 0) {
        for (int i = 1; i < argc; i++)
            SAFE_DELETE_ARRAY(argv[i]);
        SAFE_DELETE_ARRAY(argv);
    }

    fclose(fp);
    SAFE_DELETE_ARRAY(ini_file);
    SAFE_DELETE_ARRAY(tmp_buff);

    return ret;
}