MFLUtil::MFLError MFLUtil::ReadV21(AssetLibInfo &lib, Stream *in) { // init randomizer int rand_val = in->ReadInt32() + EncryptionRandSeed; // number of clib parts size_t mf_count = ReadEncInt32(in, rand_val); lib.LibFileNames.resize(mf_count); // filenames for all clib parts char fn_buf[MaxDataFileLen > MaxAssetFileLen ? MaxDataFileLen : MaxAssetFileLen]; for (size_t i = 0; i < mf_count; ++i) { ReadEncString(fn_buf, MaxDataFileLen, in, rand_val); lib.LibFileNames[i] = fn_buf; } // number of files in clib size_t asset_count = ReadEncInt32(in, rand_val); // read information on clib contents lib.AssetInfos.resize(asset_count); for (size_t i = 0; i < asset_count; ++i) { ReadEncString(fn_buf, MaxAssetFileLen, in, rand_val); lib.AssetInfos[i].FileName = fn_buf; } for (size_t i = 0; i < asset_count; ++i) lib.AssetInfos[i].Offset = ReadEncInt32(in, rand_val); for (size_t i = 0; i < asset_count; ++i) lib.AssetInfos[i].Size = ReadEncInt32(in, rand_val); for (size_t i = 0; i < asset_count; ++i) lib.AssetInfos[i].LibUid = ReadEncInt8(in, rand_val); return kMFLNoError; }
AssetError AssetManager::ReadAssetLibV21(MultiFileLib * mfl, Stream *ci_s, int libver) { // init randomizer int randSeed = ci_s->ReadInt32(); _InitPseudoRand(randSeed + _encryptionRandSeed); // number of clib parts mfl->num_data_files = ReadEncInt32(ci_s); // filenames for all clib parts for (int i = 0; i < mfl->num_data_files; i++) { ReadEncString(mfl->data_filenames[i], 50, ci_s); } // number of files in clib mfl->num_files = ReadEncInt32(ci_s); if (mfl->num_files > MAX_FILES) { return kAssetErrLibAssetCount; // too many files in clib, return error code } // read information on clib contents for (int i = 0; i < mfl->num_files; i++) { ReadEncString(mfl->filenames[i], 100, ci_s); } for (int i = 0; i < mfl->num_files; i++) { mfl->offset[i] = ReadEncInt32(ci_s); } for (int i = 0; i < mfl->num_files; i++) { mfl->length[i] = ReadEncInt32(ci_s); } ReadEncArray(&mfl->file_datafile[0], 1, mfl->num_files, ci_s); return kAssetNoError; }