mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 07:56:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			216 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "extra.hpp"
 | |
| 
 | |
| namespace Nif
 | |
| {
 | |
| 
 | |
|     void NiExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         nif->readVector(mData, mRecordSize);
 | |
|     }
 | |
| 
 | |
|     void NiStringsExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         nif->getSizedStrings(mData, nif->get<uint32_t>());
 | |
|     }
 | |
| 
 | |
|     void NiTextKeyExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         uint32_t numKeys;
 | |
|         nif->read(numKeys);
 | |
|         mList.resize(numKeys);
 | |
|         for (TextKey& key : mList)
 | |
|         {
 | |
|             nif->read(key.mTime);
 | |
|             nif->read(key.mText);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void NiVertWeightsExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         nif->skip(nif->get<uint16_t>() * sizeof(float)); // vertex weights I guess
 | |
|     }
 | |
| 
 | |
|     void BSBound::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         nif->read(mCenter);
 | |
|         nif->read(mExtents);
 | |
|     }
 | |
| 
 | |
|     void BSFurnitureMarker::LegacyFurniturePosition::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->read(mOffset);
 | |
|         nif->read(mOrientation);
 | |
|         nif->read(mPositionRef);
 | |
|         nif->skip(1); // Position ref 2
 | |
|     }
 | |
| 
 | |
|     void BSFurnitureMarker::FurniturePosition::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->read(mOffset);
 | |
|         nif->read(mHeading);
 | |
|         nif->read(mType);
 | |
|         nif->read(mEntryPoint);
 | |
|     }
 | |
| 
 | |
|     void BSFurnitureMarker::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         uint32_t num;
 | |
|         nif->read(num);
 | |
|         if (nif->getBethVersion() <= NIFFile::BethVersion::BETHVER_FO3)
 | |
|         {
 | |
|             mLegacyMarkers.resize(num);
 | |
|             for (auto& marker : mLegacyMarkers)
 | |
|                 marker.read(nif);
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             mMarkers.resize(num);
 | |
|             for (auto& marker : mMarkers)
 | |
|                 marker.read(nif);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     void BSInvMarker::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         float rotX = nif->get<uint16_t>() / 1000.f;
 | |
|         float rotY = nif->get<uint16_t>() / 1000.f;
 | |
|         float rotZ = nif->get<uint16_t>() / 1000.f;
 | |
|         mRotation = osg::Quat(rotX, osg::X_AXIS, rotY, osg::Y_AXIS, rotZ, osg::Z_AXIS);
 | |
|         nif->read(mScale);
 | |
|     }
 | |
| 
 | |
|     void BSBehaviorGraphExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         nif->read(mFile);
 | |
|         nif->read(mControlsBaseSkeleton);
 | |
|     }
 | |
| 
 | |
|     void BSBoneLODExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         Extra::read(nif);
 | |
| 
 | |
|         mData.resize(nif->get<uint32_t>());
 | |
|         for (BoneLOD& lod : mData)
 | |
|             lod.read(nif);
 | |
|     }
 | |
| 
 | |
|     void BSBoneLODExtraData::BoneLOD::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->read(mDistance);
 | |
|         nif->read(mBone);
 | |
|     }
 | |
| 
 | |
|     void BSDecalPlacementVectorExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         NiFloatExtraData::read(nif);
 | |
| 
 | |
|         mBlocks.resize(nif->get<uint16_t>());
 | |
|         for (Block& block : mBlocks)
 | |
|             block.read(nif);
 | |
|     }
 | |
| 
 | |
|     void BSDecalPlacementVectorExtraData::Block::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->readVector(mPoints, nif->get<uint16_t>());
 | |
|         nif->readVector(mNormals, mPoints.size());
 | |
|     }
 | |
| 
 | |
|     void BSClothExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->readVector(mData, nif->get<uint32_t>());
 | |
|     }
 | |
| 
 | |
|     void BSCollisionQueryProxyExtraData::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->readVector(mData, nif->get<uint32_t>());
 | |
|     }
 | |
| 
 | |
|     void BSConnectPoint::Point::read(NIFStream* nif)
 | |
|     {
 | |
|         mParent = nif->getSizedString();
 | |
|         mName = nif->getSizedString();
 | |
|         nif->read(mTransform.mRotation);
 | |
|         nif->read(mTransform.mTranslation);
 | |
|         nif->read(mTransform.mScale);
 | |
|     }
 | |
| 
 | |
|     void BSConnectPoint::Parents::read(NIFStream* nif)
 | |
|     {
 | |
|         NiExtraData::read(nif);
 | |
| 
 | |
|         mPoints.resize(nif->get<uint32_t>());
 | |
|         for (Point& point : mPoints)
 | |
|             point.read(nif);
 | |
|     }
 | |
| 
 | |
|     void BSConnectPoint::Children::read(NIFStream* nif)
 | |
|     {
 | |
|         NiExtraData::read(nif);
 | |
| 
 | |
|         nif->read(mSkinned);
 | |
|         nif->getSizedStrings(mPointNames, nif->get<uint32_t>());
 | |
|     }
 | |
| 
 | |
|     void BSPackedGeomDataCombined::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->read(mGrayscaleToPaletteScale);
 | |
|         nif->read(mTransform);
 | |
|         nif->read(mBoundingSphere);
 | |
|     }
 | |
| 
 | |
|     void BSPackedGeomObject::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->read(mFileHash);
 | |
|         nif->read(mDataOffset);
 | |
|     }
 | |
| 
 | |
|     void BSPackedSharedGeomData::read(NIFStream* nif)
 | |
|     {
 | |
|         nif->read(mNumVertices);
 | |
|         nif->read(mLODLevels);
 | |
|         nif->read(mLOD0TriCount);
 | |
|         nif->read(mLOD0TriOffset);
 | |
|         nif->read(mLOD1TriCount);
 | |
|         nif->read(mLOD1TriOffset);
 | |
|         nif->read(mLOD2TriCount);
 | |
|         nif->read(mLOD2TriOffset);
 | |
|         mCombined.resize(nif->get<uint32_t>());
 | |
|         for (BSPackedGeomDataCombined& data : mCombined)
 | |
|             data.read(nif);
 | |
|         mVertexDesc.read(nif);
 | |
|     }
 | |
| 
 | |
|     void BSPackedCombinedSharedGeomDataExtra::read(NIFStream* nif)
 | |
|     {
 | |
|         NiExtraData::read(nif);
 | |
| 
 | |
|         mVertexDesc.read(nif);
 | |
|         nif->read(mNumVertices);
 | |
|         nif->read(mNumTriangles);
 | |
|         nif->read(mFlags1);
 | |
|         nif->read(mFlags2);
 | |
|         mObjects.resize(nif->get<uint32_t>());
 | |
|         for (BSPackedGeomObject& object : mObjects)
 | |
|             object.read(nif);
 | |
|         mObjectData.resize(mObjects.size());
 | |
|         for (BSPackedSharedGeomData& objectData : mObjectData)
 | |
|             objectData.read(nif);
 | |
|     }
 | |
| 
 | |
| }
 |