// 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); }
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); }
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; }
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; }
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(); }
//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(); }
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; }