Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool rmv2_file::readLodData(string strFileName)
- {
- for (int lod = 0; lod < m_File.FileHeader.LodsCount; lod++)
- {
- for (int group = 0; group < m_File.PPLodHeaders[lod].GroupsCount; group++)
- {
- //uint32 uiMaterialId; // 4 Bytes[UInt32] - ? // Looks like and ID or a flag, it's always 65 for the moment.
- m_File.LodData[lod][group] = new _RMV2_Lod_Data;
- readBuffer(&m_File.LodData[lod][group]->Header, sizeof(_RMV2_Lod_Data_Header));
- //**** read supplementary bones
- for (int i = 0; i < m_File.LodData[lod][group]->Header.uiSupplementarBonesCount; i++)
- {
- m_File.LodData[lod][group]->PSupplementaryBone_Data[i] = new _RMV2_SupplementaryBone_Data;
- readBuffer(m_File.LodData[lod][group]->PSupplementaryBone_Data[i], sizeof(_RMV2_SupplementaryBone_Data));
- }
- // ***** read textures info
- for (int i = 0; i < m_File.LodData[lod][group]->Header.uiTextureCount; i++)
- {
- m_File.LodData[lod][group]->PTextureData[i] = new _RMV2_Texture_Data;
- readBuffer(m_File.LodData[lod][group]->PTextureData[i], sizeof(_RMV2_Texture_Data));
- }
- // jump over that "padding"
- seekBuffer(4, seek_direction::seek_forward);
- if (m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::tiled_dirtmap)
- seekBuffer(16, seek_direction::seek_forward); // file.seekg(16, ios_base::cur);
- else if (m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::decal
- || m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::weighted_decal
- || m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::weighted_skin_decal)
- seekBuffer(20, seek_direction::seek_forward); // file.seekg(20, ios_base::cur);
- else if (m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::dirtmap
- || m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::weighted_dirtmap
- || m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::weighted_skin_dirtmap)
- seekBuffer(32, seek_direction::seek_forward); // file.seekg(32, ios_base::cur);
- else if (m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::decal_dirtmap
- || m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::weighted_decal_dirtmap
- || m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::weighted_skin_decal_dirtmap)
- seekBuffer(52, seek_direction::seek_forward); // file.seekg(52, ios_base::cur);
- else if (m_File.LodData[lod][group]->Header.uiMaterialId == RigidMaterial::tree)
- seekBuffer(56, seek_direction::seek_forward); // file.seekg(56, ios_base::cur);
- seekBuffer(4, seek_direction::seek_forward); // "alpha mode"
- //jump over vertices
- //seekBuffer(vertex_size * m_File.LodData[lod][group]->Header.uiVerticesCount, seek_direction::seek_forward );
- dword vertex_size = 0;
- dword indice_size = 6;
- switch (m_File.LodData[lod][group]->Header.wVertexFormat)
- {
- case vertex_format::default_format: vertex_size = 32;
- break;
- case vertex_format::weighted_format: vertex_size = 28;
- break;
- case vertex_format::cinematic_format: vertex_size = 32;
- }
- for (size_t k = 0; k < m_File.LodData[lod][group]->Header.uiIndicesCount/3; ++k)
- seekBuffer(6, seek_direction::seek_forward);
- //for (size_t k = 0; k < m_File.LodData[lod][group]->Header.uiVerticesCount; ++k)
- seekBuffer(vertex_size * m_File.LodData[lod][group]->Header.uiVerticesCount, seek_direction::seek_forward);
- /*
- DWORD dwSeek = 0;
- switch (m_File.LodData[lod][group]->Header.uiMaterialId)
- {
- case 72:
- dwSeek = 60;
- break;
- default:
- dwSeek = 8;
- }
- seekBuffer(dwSeek, seek_direction::seek_forward);
- if (m_File.LodData[lod][group]->Header.wVertexFormat == 3)
- seekBuffer(32, seek_direction::seek_forward);*/
- }
- }
- //26044
- return true;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement