bool Mz::load( const std::string& fileName ) { // destroy(); mzFileName_ = fileName; std::string mziFileName(fileName + "i"); mziFileName = FileSystem::standardFilePath(mziFileName); loadMzI(mziFileName); // std::ifstream f(fileName.c_str(), std::ios::binary); if (!f.good()) { return NULL; } // [Tag Size Data] int t; int s; while(f.good()) { t = 0; s = 0; f.read((char*)&t, sizeof(int)); f.read((char*)&s, sizeof(int)); if (s <= 0) { continue; } char c[5]; c[0] = *((char*)&t + 3); c[1] = *((char*)&t + 2); c[2] = *((char*)&t + 1); c[3] = *((char*)&t + 0); c[4] = 0; switch (t) { case 'MVER': { decodeVersion(f, s); } break; case 'MSUB': { decodeSubMesh(f, s); } break; case 'MVTX': { decodeVertices(f, s); } break; case 'MFAC': { decodeFaces(f, s); } break; case 'MMTX': // 模型的材质 { decodeMaterial(f, s); } break; case 'MANM': { decodeAnimation(f, s); } break; case 'MWRD': { //废弃 u32 numBones; f.read((char*)&numBones,sizeof(numBones)); struct tranMatrix { float m_mat[4][3]; }; for(int i = 0;i < numBones;i++) { tranMatrix tm; f.read((char*)&tm,sizeof(tm)); } } break; case 'MBON': // 模型骨骼信息 { decodeBone(f, s); } break; default: { f.ignore(s); //Error("遇到无法识别的数据块"); } break; } } f.close(); // if (!mParticleEmitter.empty()) { tstring n = FileSystem::removeParent(mzFileName_); n = FileSystem::removeFileExtension(n); tstring fn = FileSystem::getDataDirectory(); std::ostringstream ss; for (size_t i = 0; i != mParticleEmitter.size(); ++i) { ss.str(""); ss.clear(); ss<<fn<<"\\particle\\"<<n<<"_"<<i<<".particle"; mParticleEmitter[i].save(ss.str()); } } return true; }
void CCDataReaderHelper::addDataFromJsonCache(const char *fileContent) { cs::CSJsonDictionary json; json.initWithDescription(fileContent); // Decode armatures int length = json.getArrayItemCount(ARMATURE_DATA); for (int i = 0; i < length; i++) { cs::CSJsonDictionary *armatureDic = json.getSubItemFromArray(ARMATURE_DATA, i); CCArmatureData *armatureData = decodeArmature(*armatureDic); CCArmatureDataManager::sharedArmatureDataManager()->addArmatureData(armatureData->name.c_str(), armatureData); delete armatureDic; } // Decode animations length = json.getArrayItemCount(ANIMATION_DATA); for (int i = 0; i < length; i++) { cs::CSJsonDictionary *animationDic = json.getSubItemFromArray(ANIMATION_DATA, i); CCAnimationData *animationData = decodeAnimation(*animationDic); CCArmatureDataManager::sharedArmatureDataManager()->addAnimationData(animationData->name.c_str(), animationData); delete animationDic; } // Decode textures length = json.getArrayItemCount(TEXTURE_DATA); for (int i = 0; i < length; i++) { cs::CSJsonDictionary *textureDic = json.getSubItemFromArray(TEXTURE_DATA, i); CCTextureData *textureData = decodeTexture(*textureDic); CCArmatureDataManager::sharedArmatureDataManager()->addTextureData(textureData->name.c_str(), textureData); delete textureDic; } // Auto load sprite file if (CCArmatureDataManager::sharedArmatureDataManager()->isAutoLoadSpriteFile()) { length = json.getArrayItemCount(CONFIG_FILE_PATH); for (int i = 0; i < length; i++) { const char *path = json.getStringValueFromArray(CONFIG_FILE_PATH, i); if (path == NULL) { CCLOG("load CONFIG_FILE_PATH error."); return; } std::string filePath = path; std::string plistPath = filePath; std::string pngPath = filePath.erase(filePath.find_last_of(".")) + ".png"; size_t pos = s_filePath.find_last_of("/"); if (pos != std::string::npos) { filePath = s_filePath.substr(0, pos+1); } CCArmatureDataManager::sharedArmatureDataManager()->addSpriteFrameFromFile((filePath + plistPath).c_str(), (filePath + pngPath).c_str()); } } }