mirror of
https://github.com/OpenMW/openmw.git
synced 2025-10-15 21:16:33 +00:00
Modernize Bethesda Havok records
This commit is contained in:
parent
087114e55b
commit
8a7e8a89ac
2 changed files with 238 additions and 166 deletions
|
@ -12,15 +12,15 @@ namespace Nif
|
||||||
|
|
||||||
void bhkWorldObjCInfoProperty::read(NIFStream* nif)
|
void bhkWorldObjCInfoProperty::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mData = nif->getUInt();
|
nif->read(mData);
|
||||||
mSize = nif->getUInt();
|
nif->read(mSize);
|
||||||
mCapacityAndFlags = nif->getUInt();
|
nif->read(mCapacityAndFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkWorldObjectCInfo::read(NIFStream* nif)
|
void bhkWorldObjectCInfo::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
nif->skip(4); // Unused
|
nif->skip(4); // Unused
|
||||||
mPhaseType = static_cast<BroadPhaseType>(nif->getChar());
|
mPhaseType = static_cast<BroadPhaseType>(nif->get<uint8_t>());
|
||||||
nif->skip(3); // Unused
|
nif->skip(3); // Unused
|
||||||
mProperty.read(nif);
|
mProperty.read(nif);
|
||||||
}
|
}
|
||||||
|
@ -29,47 +29,47 @@ namespace Nif
|
||||||
{
|
{
|
||||||
if (nif->getVersion() <= NIFFile::NIFVersion::VER_OB_OLD)
|
if (nif->getVersion() <= NIFFile::NIFVersion::VER_OB_OLD)
|
||||||
nif->skip(4); // Unknown
|
nif->skip(4); // Unknown
|
||||||
mMaterial = nif->getUInt();
|
nif->read(mMaterial);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HavokFilter::read(NIFStream* nif)
|
void HavokFilter::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mLayer = nif->getChar();
|
nif->read(mLayer);
|
||||||
mFlags = nif->getChar();
|
nif->read(mFlags);
|
||||||
mGroup = nif->getUShort();
|
nif->read(mGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hkSubPartData::read(NIFStream* nif)
|
void hkSubPartData::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mHavokFilter.read(nif);
|
mHavokFilter.read(nif);
|
||||||
mNumVertices = nif->getUInt();
|
nif->read(mNumVertices);
|
||||||
mHavokMaterial.read(nif);
|
mHavokMaterial.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hkpMoppCode::read(NIFStream* nif)
|
|
||||||
{
|
|
||||||
unsigned int size = nif->getUInt();
|
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
|
||||||
mOffset = nif->getVector4();
|
|
||||||
if (nif->getBethVersion() > NIFFile::BethVersion::BETHVER_FO3)
|
|
||||||
nif->getChar(); // MOPP data build type
|
|
||||||
nif->readVector(mData, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
void bhkEntityCInfo::read(NIFStream* nif)
|
void bhkEntityCInfo::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mResponseType = static_cast<hkResponseType>(nif->getChar());
|
mResponseType = static_cast<hkResponseType>(nif->get<uint8_t>());
|
||||||
nif->skip(1); // Unused
|
nif->skip(1); // Unused
|
||||||
mProcessContactDelay = nif->getUShort();
|
nif->read(mProcessContactDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
void hkpMoppCode::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
uint32_t dataSize;
|
||||||
|
nif->read(dataSize);
|
||||||
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
||||||
|
nif->read(mOffset);
|
||||||
|
if (nif->getBethVersion() > NIFFile::BethVersion::BETHVER_FO3)
|
||||||
|
nif->read(mBuildType);
|
||||||
|
nif->readVector(mData, dataSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TriangleData::read(NIFStream* nif)
|
void TriangleData::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 3; i++)
|
nif->readArray(mTriangle);
|
||||||
mTriangle[i] = nif->getUShort();
|
nif->read(mWeldingInfo);
|
||||||
mWeldingInfo = nif->getUShort();
|
|
||||||
if (nif->getVersion() <= NIFFile::NIFVersion::VER_OB)
|
if (nif->getVersion() <= NIFFile::NIFVersion::VER_OB)
|
||||||
mNormal = nif->getVector3();
|
nif->read(mNormal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkMeshMaterial::read(NIFStream* nif)
|
void bhkMeshMaterial::read(NIFStream* nif)
|
||||||
|
@ -80,28 +80,27 @@ namespace Nif
|
||||||
|
|
||||||
void bhkQsTransform::read(NIFStream* nif)
|
void bhkQsTransform::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mTranslation = nif->getVector4();
|
nif->read(mTranslation);
|
||||||
mRotation = nif->getQuaternion();
|
nif->read(mRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkCMSBigTri::read(NIFStream* nif)
|
void bhkCMSBigTri::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 3; i++)
|
nif->readArray(mTriangle);
|
||||||
mTriangle[i] = nif->getUShort();
|
nif->read(mMaterial);
|
||||||
mMaterial = nif->getUInt();
|
nif->read(mWeldingInfo);
|
||||||
mWeldingInfo = nif->getUShort();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkCMSChunk::read(NIFStream* nif)
|
void bhkCMSChunk::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mTranslation = nif->getVector4();
|
nif->read(mTranslation);
|
||||||
mMaterialIndex = nif->getUInt();
|
nif->read(mMaterialIndex);
|
||||||
mReference = nif->getUShort();
|
nif->read(mReference);
|
||||||
mTransformIndex = nif->getUShort();
|
nif->read(mTransformIndex);
|
||||||
nif->readVector(mVertices, nif->getUInt());
|
nif->readVector(mVertices, nif->get<uint32_t>());
|
||||||
nif->readVector(mIndices, nif->getUInt());
|
nif->readVector(mIndices, nif->get<uint32_t>());
|
||||||
nif->readVector(mStrips, nif->getUInt());
|
nif->readVector(mStrips, nif->get<uint32_t>());
|
||||||
nif->readVector(mWeldingInfos, nif->getUInt());
|
nif->readVector(mWeldingInfos, nif->get<uint32_t>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkRigidBodyCInfo::read(NIFStream* nif)
|
void bhkRigidBodyCInfo::read(NIFStream* nif)
|
||||||
|
@ -115,64 +114,67 @@ namespace Nif
|
||||||
{
|
{
|
||||||
if (nif->getBethVersion() >= 83)
|
if (nif->getBethVersion() >= 83)
|
||||||
nif->skip(4); // Unused
|
nif->skip(4); // Unused
|
||||||
mResponseType = static_cast<hkResponseType>(nif->getChar());
|
mResponseType = static_cast<hkResponseType>(nif->get<uint8_t>());
|
||||||
nif->skip(1); // Unused
|
nif->skip(1); // Unused
|
||||||
mProcessContactDelay = nif->getUShort();
|
nif->read(mProcessContactDelay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nif->getBethVersion() < 83)
|
if (nif->getBethVersion() < 83)
|
||||||
nif->skip(4); // Unused
|
nif->skip(4); // Unused
|
||||||
mTranslation = nif->getVector4();
|
nif->read(mTranslation);
|
||||||
mRotation = nif->getQuaternion();
|
nif->read(mRotation);
|
||||||
mLinearVelocity = nif->getVector4();
|
nif->read(mLinearVelocity);
|
||||||
mAngularVelocity = nif->getVector4();
|
nif->read(mAngularVelocity);
|
||||||
|
// A bit hacky, but this is the only instance where a 3x3 matrix has padding.
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
for (int j = 0; j < 4; j++)
|
{
|
||||||
mInertiaTensor[i][j] = nif->getFloat();
|
nif->read(mInertiaTensor.mValues[i], 3);
|
||||||
mCenter = nif->getVector4();
|
nif->skip(4); // Padding
|
||||||
mMass = nif->getFloat();
|
}
|
||||||
mLinearDamping = nif->getFloat();
|
nif->read(mCenter);
|
||||||
mAngularDamping = nif->getFloat();
|
nif->read(mMass);
|
||||||
|
nif->read(mLinearDamping);
|
||||||
|
nif->read(mAngularDamping);
|
||||||
if (nif->getBethVersion() >= 83)
|
if (nif->getBethVersion() >= 83)
|
||||||
{
|
{
|
||||||
if (nif->getBethVersion() != NIFFile::BethVersion::BETHVER_FO4)
|
if (nif->getBethVersion() != NIFFile::BethVersion::BETHVER_FO4)
|
||||||
mTimeFactor = nif->getFloat();
|
nif->read(mTimeFactor);
|
||||||
mGravityFactor = nif->getFloat();
|
nif->read(mGravityFactor);
|
||||||
}
|
}
|
||||||
mFriction = nif->getFloat();
|
nif->read(mFriction);
|
||||||
if (nif->getBethVersion() >= 83)
|
if (nif->getBethVersion() >= 83)
|
||||||
mRollingFrictionMult = nif->getFloat();
|
nif->read(mRollingFrictionMult);
|
||||||
mRestitution = nif->getFloat();
|
nif->read(mRestitution);
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
||||||
{
|
{
|
||||||
mMaxLinearVelocity = nif->getFloat();
|
nif->read(mMaxLinearVelocity);
|
||||||
mMaxAngularVelocity = nif->getFloat();
|
nif->read(mMaxAngularVelocity);
|
||||||
if (nif->getBethVersion() != NIFFile::BethVersion::BETHVER_FO4)
|
if (nif->getBethVersion() != NIFFile::BethVersion::BETHVER_FO4)
|
||||||
mPenetrationDepth = nif->getFloat();
|
nif->read(mPenetrationDepth);
|
||||||
}
|
}
|
||||||
mMotionType = static_cast<hkMotionType>(nif->getChar());
|
mMotionType = static_cast<hkMotionType>(nif->get<uint8_t>());
|
||||||
if (nif->getBethVersion() < 83)
|
if (nif->getBethVersion() < 83)
|
||||||
mDeactivatorType = static_cast<hkDeactivatorType>(nif->getChar());
|
mDeactivatorType = static_cast<hkDeactivatorType>(nif->get<uint8_t>());
|
||||||
else
|
else
|
||||||
mEnableDeactivation = nif->getBoolean();
|
nif->read(mEnableDeactivation);
|
||||||
mSolverDeactivation = static_cast<hkSolverDeactivation>(nif->getChar());
|
mSolverDeactivation = static_cast<hkSolverDeactivation>(nif->get<uint8_t>());
|
||||||
if (nif->getBethVersion() == NIFFile::BethVersion::BETHVER_FO4)
|
if (nif->getBethVersion() == NIFFile::BethVersion::BETHVER_FO4)
|
||||||
{
|
{
|
||||||
nif->skip(1);
|
nif->skip(1);
|
||||||
mPenetrationDepth = nif->getFloat();
|
nif->read(mPenetrationDepth);
|
||||||
mTimeFactor = nif->getFloat();
|
nif->read(mTimeFactor);
|
||||||
nif->skip(4);
|
nif->skip(4);
|
||||||
mResponseType = static_cast<hkResponseType>(nif->getChar());
|
mResponseType = static_cast<hkResponseType>(nif->get<uint8_t>());
|
||||||
nif->skip(1); // Unused
|
nif->skip(1); // Unused
|
||||||
mProcessContactDelay = nif->getUShort();
|
nif->read(mProcessContactDelay);
|
||||||
}
|
}
|
||||||
mQualityType = static_cast<hkQualityType>(nif->getChar());
|
mQualityType = static_cast<hkQualityType>(nif->get<uint8_t>());
|
||||||
if (nif->getBethVersion() >= 83)
|
if (nif->getBethVersion() >= 83)
|
||||||
{
|
{
|
||||||
mAutoRemoveLevel = nif->getChar();
|
nif->read(mAutoRemoveLevel);
|
||||||
mResponseModifierFlags = nif->getChar();
|
nif->read(mResponseModifierFlags);
|
||||||
mNumContactPointShapeKeys = nif->getChar();
|
nif->read(mNumContactPointShapeKeys);
|
||||||
mForceCollidedOntoPPU = nif->getBoolean();
|
nif->read(mForceCollidedOntoPPU);
|
||||||
}
|
}
|
||||||
if (nif->getBethVersion() == NIFFile::BethVersion::BETHVER_FO4)
|
if (nif->getBethVersion() == NIFFile::BethVersion::BETHVER_FO4)
|
||||||
nif->skip(3); // Unused
|
nif->skip(3); // Unused
|
||||||
|
@ -182,7 +184,7 @@ namespace Nif
|
||||||
|
|
||||||
void bhkConstraintCInfo::read(NIFStream* nif)
|
void bhkConstraintCInfo::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
nif->get<unsigned int>(); // Number of entities, unused
|
nif->get<uint32_t>(); // Number of entities, unused
|
||||||
mEntityA.read(nif);
|
mEntityA.read(nif);
|
||||||
mEntityB.read(nif);
|
mEntityB.read(nif);
|
||||||
|
|
||||||
|
@ -203,7 +205,7 @@ namespace Nif
|
||||||
nif->read(mDamping);
|
nif->read(mDamping);
|
||||||
nif->read(mProportionalRecoveryVelocity);
|
nif->read(mProportionalRecoveryVelocity);
|
||||||
nif->read(mConstantRecoveryVelocity);
|
nif->read(mConstantRecoveryVelocity);
|
||||||
mEnabled = nif->getBoolean();
|
nif->read(mEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkVelocityConstraintMotor::read(NIFStream* nif)
|
void bhkVelocityConstraintMotor::read(NIFStream* nif)
|
||||||
|
@ -212,8 +214,8 @@ namespace Nif
|
||||||
nif->read(mMaxForce);
|
nif->read(mMaxForce);
|
||||||
nif->read(mTau);
|
nif->read(mTau);
|
||||||
nif->read(mTargetVelocity);
|
nif->read(mTargetVelocity);
|
||||||
mUseVelocityTarget = nif->getBoolean();
|
nif->read(mUseVelocityTarget);
|
||||||
mEnabled = nif->getBoolean();
|
nif->read(mEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkSpringDamperConstraintMotor::read(NIFStream* nif)
|
void bhkSpringDamperConstraintMotor::read(NIFStream* nif)
|
||||||
|
@ -222,7 +224,7 @@ namespace Nif
|
||||||
nif->read(mMaxForce);
|
nif->read(mMaxForce);
|
||||||
nif->read(mSpringConstant);
|
nif->read(mSpringConstant);
|
||||||
nif->read(mSpringDamping);
|
nif->read(mSpringDamping);
|
||||||
mEnabled = nif->getBoolean();
|
nif->read(mEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkConstraintMotorCInfo::read(NIFStream* nif)
|
void bhkConstraintMotorCInfo::read(NIFStream* nif)
|
||||||
|
@ -335,7 +337,8 @@ namespace Nif
|
||||||
void bhkCollisionObject::read(NIFStream* nif)
|
void bhkCollisionObject::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
NiCollisionObject::read(nif);
|
NiCollisionObject::read(nif);
|
||||||
mFlags = nif->getUShort();
|
|
||||||
|
nif->read(mFlags);
|
||||||
mBody.read(nif);
|
mBody.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,6 +359,7 @@ namespace Nif
|
||||||
void bhkEntity::read(NIFStream* nif)
|
void bhkEntity::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkWorldObject::read(nif);
|
bhkWorldObject::read(nif);
|
||||||
|
|
||||||
mInfo.read(nif);
|
mInfo.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -372,21 +376,26 @@ namespace Nif
|
||||||
void bhkMoppBvTreeShape::read(NIFStream* nif)
|
void bhkMoppBvTreeShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkBvTreeShape::read(nif);
|
bhkBvTreeShape::read(nif);
|
||||||
|
|
||||||
nif->skip(12); // Unused
|
nif->skip(12); // Unused
|
||||||
mScale = nif->getFloat();
|
nif->read(mScale);
|
||||||
mMopp.read(nif);
|
mMopp.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkNiTriStripsShape::read(NIFStream* nif)
|
void bhkNiTriStripsShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mHavokMaterial.read(nif);
|
mHavokMaterial.read(nif);
|
||||||
mRadius = nif->getFloat();
|
nif->read(mRadius);
|
||||||
nif->skip(20); // Unused
|
nif->skip(20); // Unused
|
||||||
mGrowBy = nif->getUInt();
|
nif->read(mGrowBy);
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
||||||
mScale = nif->getVector4();
|
nif->read(mScale);
|
||||||
readRecordList(nif, mData);
|
readRecordList(nif, mData);
|
||||||
nif->readVector(mFilters, nif->getUInt());
|
uint32_t numFilters;
|
||||||
|
nif->read(numFilters);
|
||||||
|
mHavokFilters.resize(numFilters);
|
||||||
|
for (HavokFilter& filter : mHavokFilters)
|
||||||
|
filter.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkNiTriStripsShape::post(Reader& nif)
|
void bhkNiTriStripsShape::post(Reader& nif)
|
||||||
|
@ -398,15 +407,17 @@ namespace Nif
|
||||||
{
|
{
|
||||||
if (nif->getVersion() <= NIFFile::NIFVersion::VER_OB)
|
if (nif->getVersion() <= NIFFile::NIFVersion::VER_OB)
|
||||||
{
|
{
|
||||||
mSubshapes.resize(nif->getUShort());
|
uint16_t numSubshapes;
|
||||||
|
nif->read(numSubshapes);
|
||||||
|
mSubshapes.resize(numSubshapes);
|
||||||
for (hkSubPartData& subshape : mSubshapes)
|
for (hkSubPartData& subshape : mSubshapes)
|
||||||
subshape.read(nif);
|
subshape.read(nif);
|
||||||
}
|
}
|
||||||
mUserData = nif->getUInt();
|
nif->read(mUserData);
|
||||||
nif->skip(4); // Unused
|
nif->skip(4); // Unused
|
||||||
mRadius = nif->getFloat();
|
nif->read(mRadius);
|
||||||
nif->skip(4); // Unused
|
nif->skip(4); // Unused
|
||||||
mScale = nif->getVector4();
|
nif->read(mScale);
|
||||||
nif->skip(20); // Duplicates of the two previous fields
|
nif->skip(20); // Duplicates of the two previous fields
|
||||||
mData.read(nif);
|
mData.read(nif);
|
||||||
}
|
}
|
||||||
|
@ -418,22 +429,26 @@ namespace Nif
|
||||||
|
|
||||||
void hkPackedNiTriStripsData::read(NIFStream* nif)
|
void hkPackedNiTriStripsData::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
unsigned int numTriangles = nif->getUInt();
|
uint32_t numTriangles;
|
||||||
|
nif->read(numTriangles);
|
||||||
mTriangles.resize(numTriangles);
|
mTriangles.resize(numTriangles);
|
||||||
for (unsigned int i = 0; i < numTriangles; i++)
|
for (uint32_t i = 0; i < numTriangles; i++)
|
||||||
mTriangles[i].read(nif);
|
mTriangles[i].read(nif);
|
||||||
|
|
||||||
unsigned int numVertices = nif->getUInt();
|
uint32_t numVertices;
|
||||||
|
nif->read(numVertices);
|
||||||
bool compressed = false;
|
bool compressed = false;
|
||||||
if (nif->getVersion() >= NIFFile::NIFVersion::VER_BGS)
|
if (nif->getVersion() >= NIFFile::NIFVersion::VER_BGS)
|
||||||
compressed = nif->getBoolean();
|
nif->read(compressed);
|
||||||
if (!compressed)
|
if (!compressed)
|
||||||
nif->readVector(mVertices, numVertices);
|
nif->readVector(mVertices, numVertices);
|
||||||
else
|
else
|
||||||
nif->skip(6 * numVertices); // Half-precision vectors are not currently supported
|
nif->skip(6 * numVertices); // Half-precision vectors are not currently supported
|
||||||
if (nif->getVersion() >= NIFFile::NIFVersion::VER_BGS)
|
if (nif->getVersion() >= NIFFile::NIFVersion::VER_BGS)
|
||||||
{
|
{
|
||||||
mSubshapes.resize(nif->getUShort());
|
uint16_t numSubshapes;
|
||||||
|
nif->read(numSubshapes);
|
||||||
|
mSubshapes.resize(numSubshapes);
|
||||||
for (hkSubPartData& subshape : mSubshapes)
|
for (hkSubPartData& subshape : mSubshapes)
|
||||||
subshape.read(nif);
|
subshape.read(nif);
|
||||||
}
|
}
|
||||||
|
@ -447,23 +462,25 @@ namespace Nif
|
||||||
void bhkConvexShape::read(NIFStream* nif)
|
void bhkConvexShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkSphereRepShape::read(nif);
|
bhkSphereRepShape::read(nif);
|
||||||
mRadius = nif->getFloat();
|
|
||||||
|
nif->read(mRadius);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkConvexVerticesShape::read(NIFStream* nif)
|
void bhkConvexVerticesShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkConvexShape::read(nif);
|
bhkConvexShape::read(nif);
|
||||||
|
|
||||||
mVerticesProperty.read(nif);
|
mVerticesProperty.read(nif);
|
||||||
mNormalsProperty.read(nif);
|
mNormalsProperty.read(nif);
|
||||||
nif->readVector(mVertices, nif->getUInt());
|
nif->readVector(mVertices, nif->get<uint32_t>());
|
||||||
nif->readVector(mNormals, nif->getUInt());
|
nif->readVector(mNormals, nif->get<uint32_t>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkConvexTransformShape::read(NIFStream* nif)
|
void bhkConvexTransformShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mShape.read(nif);
|
mShape.read(nif);
|
||||||
mHavokMaterial.read(nif);
|
mHavokMaterial.read(nif);
|
||||||
mRadius = nif->getFloat();
|
nif->read(mRadius);
|
||||||
nif->skip(8); // Unused
|
nif->skip(8); // Unused
|
||||||
std::array<float, 16> mat;
|
std::array<float, 16> mat;
|
||||||
nif->readArray(mat);
|
nif->readArray(mat);
|
||||||
|
@ -478,19 +495,21 @@ namespace Nif
|
||||||
void bhkBoxShape::read(NIFStream* nif)
|
void bhkBoxShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkConvexShape::read(nif);
|
bhkConvexShape::read(nif);
|
||||||
|
|
||||||
nif->skip(8); // Unused
|
nif->skip(8); // Unused
|
||||||
mExtents = nif->getVector3();
|
nif->read(mExtents);
|
||||||
nif->skip(4); // Unused
|
nif->skip(4); // Unused
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkCapsuleShape::read(NIFStream* nif)
|
void bhkCapsuleShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkConvexShape::read(nif);
|
bhkConvexShape::read(nif);
|
||||||
|
|
||||||
nif->skip(8); // Unused
|
nif->skip(8); // Unused
|
||||||
mPoint1 = nif->getVector3();
|
nif->read(mPoint1);
|
||||||
mRadius1 = nif->getFloat();
|
nif->read(mRadius1);
|
||||||
mPoint2 = nif->getVector3();
|
nif->read(mPoint2);
|
||||||
mRadius2 = nif->getFloat();
|
nif->read(mRadius2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkListShape::read(NIFStream* nif)
|
void bhkListShape::read(NIFStream* nif)
|
||||||
|
@ -499,7 +518,8 @@ namespace Nif
|
||||||
mHavokMaterial.read(nif);
|
mHavokMaterial.read(nif);
|
||||||
mChildShapeProperty.read(nif);
|
mChildShapeProperty.read(nif);
|
||||||
mChildFilterProperty.read(nif);
|
mChildFilterProperty.read(nif);
|
||||||
unsigned int numFilters = nif->getUInt();
|
uint32_t numFilters;
|
||||||
|
nif->read(numFilters);
|
||||||
mHavokFilters.resize(numFilters);
|
mHavokFilters.resize(numFilters);
|
||||||
for (HavokFilter& filter : mHavokFilters)
|
for (HavokFilter& filter : mHavokFilters)
|
||||||
filter.read(nif);
|
filter.read(nif);
|
||||||
|
@ -508,12 +528,12 @@ namespace Nif
|
||||||
void bhkCompressedMeshShape::read(NIFStream* nif)
|
void bhkCompressedMeshShape::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mTarget.read(nif);
|
mTarget.read(nif);
|
||||||
mUserData = nif->getUInt();
|
nif->read(mUserData);
|
||||||
mRadius = nif->getFloat();
|
nif->read(mRadius);
|
||||||
nif->getFloat(); // Unknown
|
nif->skip(4); // Unknown
|
||||||
mScale = nif->getVector4();
|
nif->read(mScale);
|
||||||
nif->getFloat(); // Radius
|
nif->skip(4); // Radius
|
||||||
nif->getVector4(); // Scale
|
nif->skip(16); // Scale
|
||||||
mData.read(nif);
|
mData.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -525,60 +545,66 @@ namespace Nif
|
||||||
|
|
||||||
void bhkCompressedMeshShapeData::read(NIFStream* nif)
|
void bhkCompressedMeshShapeData::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
mBitsPerIndex = nif->getUInt();
|
nif->read(mBitsPerIndex);
|
||||||
mBitsPerWIndex = nif->getUInt();
|
nif->read(mBitsPerWIndex);
|
||||||
mMaskWIndex = nif->getUInt();
|
nif->read(mMaskWIndex);
|
||||||
mMaskIndex = nif->getUInt();
|
nif->read(mMaskIndex);
|
||||||
mError = nif->getFloat();
|
nif->read(mError);
|
||||||
mAabbMin = nif->getVector4();
|
nif->read(mAabbMin);
|
||||||
mAabbMax = nif->getVector4();
|
nif->read(mAabbMax);
|
||||||
mWeldingType = nif->getChar();
|
nif->read(mWeldingType);
|
||||||
mMaterialType = nif->getChar();
|
nif->read(mMaterialType);
|
||||||
nif->skip(nif->getUInt() * 4); // Unused
|
nif->skip(nif->get<uint32_t>() * 4); // Unused
|
||||||
nif->skip(nif->getUInt() * 4); // Unused
|
nif->skip(nif->get<uint32_t>() * 4); // Unused
|
||||||
nif->skip(nif->getUInt() * 4); // Unused
|
nif->skip(nif->get<uint32_t>() * 4); // Unused
|
||||||
|
|
||||||
size_t numMaterials = nif->getUInt();
|
uint32_t numMaterials;
|
||||||
|
nif->read(numMaterials);
|
||||||
mMaterials.resize(numMaterials);
|
mMaterials.resize(numMaterials);
|
||||||
for (bhkMeshMaterial& material : mMaterials)
|
for (bhkMeshMaterial& material : mMaterials)
|
||||||
material.read(nif);
|
material.read(nif);
|
||||||
|
|
||||||
nif->getUInt(); // Unused
|
nif->skip(4); // Unused
|
||||||
size_t numTransforms = nif->getUInt();
|
|
||||||
|
|
||||||
|
uint32_t numTransforms;
|
||||||
|
nif->read(numTransforms);
|
||||||
mChunkTransforms.resize(numTransforms);
|
mChunkTransforms.resize(numTransforms);
|
||||||
for (bhkQsTransform& transform : mChunkTransforms)
|
for (bhkQsTransform& transform : mChunkTransforms)
|
||||||
transform.read(nif);
|
transform.read(nif);
|
||||||
|
|
||||||
nif->readVector(mBigVerts, nif->getUInt());
|
nif->readVector(mBigVerts, nif->get<uint32_t>());
|
||||||
|
|
||||||
size_t numBigTriangles = nif->getUInt();
|
uint32_t numBigTriangles;
|
||||||
|
nif->read(numBigTriangles);
|
||||||
mBigTris.resize(numBigTriangles);
|
mBigTris.resize(numBigTriangles);
|
||||||
for (bhkCMSBigTri& tri : mBigTris)
|
for (bhkCMSBigTri& tri : mBigTris)
|
||||||
tri.read(nif);
|
tri.read(nif);
|
||||||
|
|
||||||
size_t numChunks = nif->getUInt();
|
uint32_t numChunks;
|
||||||
|
nif->read(numChunks);
|
||||||
mChunks.resize(numChunks);
|
mChunks.resize(numChunks);
|
||||||
for (bhkCMSChunk& chunk : mChunks)
|
for (bhkCMSChunk& chunk : mChunks)
|
||||||
chunk.read(nif);
|
chunk.read(nif);
|
||||||
|
|
||||||
nif->getUInt(); // Unused
|
nif->skip(4); // Unused
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkRigidBody::read(NIFStream* nif)
|
void bhkRigidBody::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkEntity::read(nif);
|
bhkEntity::read(nif);
|
||||||
|
|
||||||
mInfo.read(nif);
|
mInfo.read(nif);
|
||||||
readRecordList(nif, mConstraints);
|
readRecordList(nif, mConstraints);
|
||||||
if (nif->getBethVersion() < 76)
|
if (nif->getBethVersion() < 76)
|
||||||
mBodyFlags = nif->getUInt();
|
nif->read(mBodyFlags);
|
||||||
else
|
else
|
||||||
mBodyFlags = nif->getUShort();
|
mBodyFlags = nif->get<uint16_t>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkSimpleShapePhantom::read(NIFStream* nif)
|
void bhkSimpleShapePhantom::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkWorldObject::read(nif);
|
bhkWorldObject::read(nif);
|
||||||
|
|
||||||
nif->skip(8); // Unused
|
nif->skip(8); // Unused
|
||||||
std::array<float, 16> mat;
|
std::array<float, 16> mat;
|
||||||
nif->readArray(mat);
|
nif->readArray(mat);
|
||||||
|
@ -598,18 +624,21 @@ namespace Nif
|
||||||
void bhkRagdollConstraint::read(NIFStream* nif)
|
void bhkRagdollConstraint::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkConstraint::read(nif);
|
bhkConstraint::read(nif);
|
||||||
|
|
||||||
mConstraint.read(nif);
|
mConstraint.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkHingeConstraint::read(NIFStream* nif)
|
void bhkHingeConstraint::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkConstraint::read(nif);
|
bhkConstraint::read(nif);
|
||||||
|
|
||||||
mConstraint.read(nif);
|
mConstraint.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bhkLimitedHingeConstraint::read(NIFStream* nif)
|
void bhkLimitedHingeConstraint::read(NIFStream* nif)
|
||||||
{
|
{
|
||||||
bhkConstraint::read(nif);
|
bhkConstraint::read(nif);
|
||||||
|
|
||||||
mConstraint.read(nif);
|
mConstraint.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef OPENMW_COMPONENTS_NIF_PHYSICS_HPP
|
#ifndef OPENMW_COMPONENTS_NIF_PHYSICS_HPP
|
||||||
#define OPENMW_COMPONENTS_NIF_PHYSICS_HPP
|
#define OPENMW_COMPONENTS_NIF_PHYSICS_HPP
|
||||||
|
|
||||||
|
#include "niftypes.hpp"
|
||||||
#include "record.hpp"
|
#include "record.hpp"
|
||||||
#include "recordptr.hpp"
|
#include "recordptr.hpp"
|
||||||
|
|
||||||
|
@ -23,9 +24,10 @@ namespace Nif
|
||||||
|
|
||||||
struct bhkWorldObjCInfoProperty
|
struct bhkWorldObjCInfoProperty
|
||||||
{
|
{
|
||||||
unsigned int mData;
|
uint32_t mData;
|
||||||
unsigned int mSize;
|
uint32_t mSize;
|
||||||
unsigned int mCapacityAndFlags;
|
uint32_t mCapacityAndFlags;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -41,28 +43,32 @@ namespace Nif
|
||||||
{
|
{
|
||||||
BroadPhaseType mPhaseType;
|
BroadPhaseType mPhaseType;
|
||||||
bhkWorldObjCInfoProperty mProperty;
|
bhkWorldObjCInfoProperty mProperty;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HavokMaterial
|
struct HavokMaterial
|
||||||
{
|
{
|
||||||
unsigned int mMaterial;
|
uint32_t mMaterial;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HavokFilter
|
struct HavokFilter
|
||||||
{
|
{
|
||||||
unsigned char mLayer;
|
uint8_t mLayer;
|
||||||
unsigned char mFlags;
|
uint8_t mFlags;
|
||||||
unsigned short mGroup;
|
uint16_t mGroup;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hkSubPartData
|
struct hkSubPartData
|
||||||
{
|
{
|
||||||
HavokMaterial mHavokMaterial;
|
HavokMaterial mHavokMaterial;
|
||||||
unsigned int mNumVertices;
|
uint32_t mNumVertices;
|
||||||
HavokFilter mHavokFilter;
|
HavokFilter mHavokFilter;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,22 +83,26 @@ namespace Nif
|
||||||
struct bhkEntityCInfo
|
struct bhkEntityCInfo
|
||||||
{
|
{
|
||||||
hkResponseType mResponseType;
|
hkResponseType mResponseType;
|
||||||
unsigned short mProcessContactDelay;
|
uint16_t mProcessContactDelay;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hkpMoppCode
|
struct hkpMoppCode
|
||||||
{
|
{
|
||||||
osg::Vec4f mOffset;
|
osg::Vec4f mOffset;
|
||||||
std::vector<char> mData;
|
uint8_t mBuildType;
|
||||||
|
std::vector<uint8_t> mData;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TriangleData
|
struct TriangleData
|
||||||
{
|
{
|
||||||
unsigned short mTriangle[3];
|
std::array<uint16_t, 3> mTriangle;
|
||||||
unsigned short mWeldingInfo;
|
uint16_t mWeldingInfo;
|
||||||
osg::Vec3f mNormal;
|
osg::Vec3f mNormal;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,6 +110,7 @@ namespace Nif
|
||||||
{
|
{
|
||||||
HavokMaterial mHavokMaterial;
|
HavokMaterial mHavokMaterial;
|
||||||
HavokFilter mHavokFilter;
|
HavokFilter mHavokFilter;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -107,27 +118,30 @@ namespace Nif
|
||||||
{
|
{
|
||||||
osg::Vec4f mTranslation;
|
osg::Vec4f mTranslation;
|
||||||
osg::Quat mRotation;
|
osg::Quat mRotation;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bhkCMSBigTri
|
struct bhkCMSBigTri
|
||||||
{
|
{
|
||||||
unsigned short mTriangle[3];
|
std::array<uint16_t, 3> mTriangle;
|
||||||
unsigned int mMaterial;
|
uint32_t mMaterial;
|
||||||
unsigned short mWeldingInfo;
|
uint16_t mWeldingInfo;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bhkCMSChunk
|
struct bhkCMSChunk
|
||||||
{
|
{
|
||||||
osg::Vec4f mTranslation;
|
osg::Vec4f mTranslation;
|
||||||
unsigned int mMaterialIndex;
|
uint32_t mMaterialIndex;
|
||||||
unsigned short mReference;
|
uint16_t mReference;
|
||||||
unsigned short mTransformIndex;
|
uint16_t mTransformIndex;
|
||||||
std::vector<unsigned short> mVertices;
|
std::vector<uint16_t> mVertices;
|
||||||
std::vector<unsigned short> mIndices;
|
std::vector<uint16_t> mIndices;
|
||||||
std::vector<unsigned short> mStrips;
|
std::vector<uint16_t> mStrips;
|
||||||
std::vector<unsigned short> mWeldingInfos;
|
std::vector<uint16_t> mWeldingInfos;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -180,12 +194,12 @@ namespace Nif
|
||||||
{
|
{
|
||||||
HavokFilter mHavokFilter;
|
HavokFilter mHavokFilter;
|
||||||
hkResponseType mResponseType;
|
hkResponseType mResponseType;
|
||||||
unsigned short mProcessContactDelay;
|
uint16_t mProcessContactDelay;
|
||||||
osg::Vec4f mTranslation;
|
osg::Vec4f mTranslation;
|
||||||
osg::Quat mRotation;
|
osg::Quat mRotation;
|
||||||
osg::Vec4f mLinearVelocity;
|
osg::Vec4f mLinearVelocity;
|
||||||
osg::Vec4f mAngularVelocity;
|
osg::Vec4f mAngularVelocity;
|
||||||
float mInertiaTensor[3][4];
|
Matrix3 mInertiaTensor;
|
||||||
osg::Vec4f mCenter;
|
osg::Vec4f mCenter;
|
||||||
float mMass;
|
float mMass;
|
||||||
float mLinearDamping;
|
float mLinearDamping;
|
||||||
|
@ -203,10 +217,11 @@ namespace Nif
|
||||||
bool mEnableDeactivation{ true };
|
bool mEnableDeactivation{ true };
|
||||||
hkSolverDeactivation mSolverDeactivation;
|
hkSolverDeactivation mSolverDeactivation;
|
||||||
hkQualityType mQualityType;
|
hkQualityType mQualityType;
|
||||||
unsigned char mAutoRemoveLevel;
|
uint8_t mAutoRemoveLevel;
|
||||||
unsigned char mResponseModifierFlags;
|
uint8_t mResponseModifierFlags;
|
||||||
unsigned char mNumContactPointShapeKeys;
|
uint8_t mNumContactPointShapeKeys;
|
||||||
bool mForceCollidedOntoPPU;
|
bool mForceCollidedOntoPPU;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -222,6 +237,7 @@ namespace Nif
|
||||||
bhkEntityPtr mEntityA;
|
bhkEntityPtr mEntityA;
|
||||||
bhkEntityPtr mEntityB;
|
bhkEntityPtr mEntityB;
|
||||||
ConstraintPriority mPriority;
|
ConstraintPriority mPriority;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
void post(Reader& nif);
|
void post(Reader& nif);
|
||||||
};
|
};
|
||||||
|
@ -242,6 +258,7 @@ namespace Nif
|
||||||
float mProportionalRecoveryVelocity;
|
float mProportionalRecoveryVelocity;
|
||||||
float mConstantRecoveryVelocity;
|
float mConstantRecoveryVelocity;
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -252,6 +269,7 @@ namespace Nif
|
||||||
float mTargetVelocity;
|
float mTargetVelocity;
|
||||||
bool mUseVelocityTarget;
|
bool mUseVelocityTarget;
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -261,6 +279,7 @@ namespace Nif
|
||||||
float mSpringConstant;
|
float mSpringConstant;
|
||||||
float mSpringDamping;
|
float mSpringDamping;
|
||||||
bool mEnabled;
|
bool mEnabled;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -270,6 +289,7 @@ namespace Nif
|
||||||
bhkPositionConstraintMotor mPositionMotor;
|
bhkPositionConstraintMotor mPositionMotor;
|
||||||
bhkVelocityConstraintMotor mVelocityMotor;
|
bhkVelocityConstraintMotor mVelocityMotor;
|
||||||
bhkSpringDamperConstraintMotor mSpringDamperMotor;
|
bhkSpringDamperConstraintMotor mSpringDamperMotor;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -289,6 +309,7 @@ namespace Nif
|
||||||
float mTwistMinAngle, mTwistMaxAngle;
|
float mTwistMinAngle, mTwistMaxAngle;
|
||||||
float mMaxFriction;
|
float mMaxFriction;
|
||||||
bhkConstraintMotorCInfo mMotor;
|
bhkConstraintMotorCInfo mMotor;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -301,8 +322,10 @@ namespace Nif
|
||||||
osg::Vec4f mPerpAxis1;
|
osg::Vec4f mPerpAxis1;
|
||||||
osg::Vec4f mPerpAxis2;
|
osg::Vec4f mPerpAxis2;
|
||||||
};
|
};
|
||||||
|
|
||||||
HingeData mDataA;
|
HingeData mDataA;
|
||||||
HingeData mDataB;
|
HingeData mDataB;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -315,11 +338,13 @@ namespace Nif
|
||||||
osg::Vec4f mPerpAxis1;
|
osg::Vec4f mPerpAxis1;
|
||||||
osg::Vec4f mPerpAxis2;
|
osg::Vec4f mPerpAxis2;
|
||||||
};
|
};
|
||||||
|
|
||||||
HingeData mDataA;
|
HingeData mDataA;
|
||||||
HingeData mDataB;
|
HingeData mDataB;
|
||||||
float mMinAngle, mMaxAngle;
|
float mMinAngle, mMaxAngle;
|
||||||
float mMaxFriction;
|
float mMaxFriction;
|
||||||
bhkConstraintMotorCInfo mMotor;
|
bhkConstraintMotorCInfo mMotor;
|
||||||
|
|
||||||
void read(NIFStream* nif);
|
void read(NIFStream* nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -358,7 +383,7 @@ namespace Nif
|
||||||
// Bethesda Havok-specific collision object
|
// Bethesda Havok-specific collision object
|
||||||
struct bhkCollisionObject : public NiCollisionObject
|
struct bhkCollisionObject : public NiCollisionObject
|
||||||
{
|
{
|
||||||
unsigned short mFlags;
|
uint16_t mFlags;
|
||||||
bhkWorldObjectPtr mBody;
|
bhkWorldObjectPtr mBody;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
|
@ -375,6 +400,7 @@ namespace Nif
|
||||||
bhkShapePtr mShape;
|
bhkShapePtr mShape;
|
||||||
HavokFilter mHavokFilter;
|
HavokFilter mHavokFilter;
|
||||||
bhkWorldObjectCInfo mWorldObjectInfo;
|
bhkWorldObjectCInfo mWorldObjectInfo;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
@ -383,6 +409,7 @@ namespace Nif
|
||||||
struct bhkEntity : public bhkWorldObject
|
struct bhkEntity : public bhkWorldObject
|
||||||
{
|
{
|
||||||
bhkEntityCInfo mInfo;
|
bhkEntityCInfo mInfo;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -391,6 +418,7 @@ namespace Nif
|
||||||
struct bhkBvTreeShape : public bhkShape
|
struct bhkBvTreeShape : public bhkShape
|
||||||
{
|
{
|
||||||
bhkShapePtr mShape;
|
bhkShapePtr mShape;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
@ -400,6 +428,7 @@ namespace Nif
|
||||||
{
|
{
|
||||||
float mScale;
|
float mScale;
|
||||||
hkpMoppCode mMopp;
|
hkpMoppCode mMopp;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -408,10 +437,11 @@ namespace Nif
|
||||||
{
|
{
|
||||||
HavokMaterial mHavokMaterial;
|
HavokMaterial mHavokMaterial;
|
||||||
float mRadius;
|
float mRadius;
|
||||||
unsigned int mGrowBy;
|
uint32_t mGrowBy;
|
||||||
osg::Vec4f mScale{ 1.f, 1.f, 1.f, 0.f };
|
osg::Vec4f mScale{ 1.f, 1.f, 1.f, 0.f };
|
||||||
NiTriStripsDataList mData;
|
NiTriStripsDataList mData;
|
||||||
std::vector<unsigned int> mFilters;
|
std::vector<HavokFilter> mHavokFilters;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
@ -420,7 +450,7 @@ namespace Nif
|
||||||
struct bhkPackedNiTriStripsShape : public bhkShapeCollection
|
struct bhkPackedNiTriStripsShape : public bhkShapeCollection
|
||||||
{
|
{
|
||||||
std::vector<hkSubPartData> mSubshapes;
|
std::vector<hkSubPartData> mSubshapes;
|
||||||
unsigned int mUserData;
|
uint32_t mUserData;
|
||||||
float mRadius;
|
float mRadius;
|
||||||
osg::Vec4f mScale;
|
osg::Vec4f mScale;
|
||||||
hkPackedNiTriStripsDataPtr mData;
|
hkPackedNiTriStripsDataPtr mData;
|
||||||
|
@ -435,6 +465,7 @@ namespace Nif
|
||||||
std::vector<TriangleData> mTriangles;
|
std::vector<TriangleData> mTriangles;
|
||||||
std::vector<osg::Vec3f> mVertices;
|
std::vector<osg::Vec3f> mVertices;
|
||||||
std::vector<hkSubPartData> mSubshapes;
|
std::vector<hkSubPartData> mSubshapes;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -442,6 +473,7 @@ namespace Nif
|
||||||
struct bhkSphereRepShape : public bhkShape
|
struct bhkSphereRepShape : public bhkShape
|
||||||
{
|
{
|
||||||
HavokMaterial mHavokMaterial;
|
HavokMaterial mHavokMaterial;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -449,6 +481,7 @@ namespace Nif
|
||||||
struct bhkConvexShape : public bhkSphereRepShape
|
struct bhkConvexShape : public bhkSphereRepShape
|
||||||
{
|
{
|
||||||
float mRadius;
|
float mRadius;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -459,6 +492,7 @@ namespace Nif
|
||||||
bhkWorldObjCInfoProperty mNormalsProperty;
|
bhkWorldObjCInfoProperty mNormalsProperty;
|
||||||
std::vector<osg::Vec4f> mVertices;
|
std::vector<osg::Vec4f> mVertices;
|
||||||
std::vector<osg::Vec4f> mNormals;
|
std::vector<osg::Vec4f> mNormals;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -468,6 +502,7 @@ namespace Nif
|
||||||
HavokMaterial mHavokMaterial;
|
HavokMaterial mHavokMaterial;
|
||||||
float mRadius;
|
float mRadius;
|
||||||
osg::Matrixf mTransform;
|
osg::Matrixf mTransform;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
@ -476,6 +511,7 @@ namespace Nif
|
||||||
struct bhkBoxShape : public bhkConvexShape
|
struct bhkBoxShape : public bhkConvexShape
|
||||||
{
|
{
|
||||||
osg::Vec3f mExtents;
|
osg::Vec3f mExtents;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -499,28 +535,30 @@ namespace Nif
|
||||||
bhkWorldObjCInfoProperty mChildShapeProperty;
|
bhkWorldObjCInfoProperty mChildShapeProperty;
|
||||||
bhkWorldObjCInfoProperty mChildFilterProperty;
|
bhkWorldObjCInfoProperty mChildFilterProperty;
|
||||||
std::vector<HavokFilter> mHavokFilters;
|
std::vector<HavokFilter> mHavokFilters;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bhkCompressedMeshShape : public bhkShape
|
struct bhkCompressedMeshShape : public bhkShape
|
||||||
{
|
{
|
||||||
NodePtr mTarget;
|
NodePtr mTarget;
|
||||||
unsigned int mUserData;
|
uint32_t mUserData;
|
||||||
float mRadius;
|
float mRadius;
|
||||||
osg::Vec4f mScale;
|
osg::Vec4f mScale;
|
||||||
bhkCompressedMeshShapeDataPtr mData;
|
bhkCompressedMeshShapeDataPtr mData;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bhkCompressedMeshShapeData : public bhkRefObject
|
struct bhkCompressedMeshShapeData : public bhkRefObject
|
||||||
{
|
{
|
||||||
unsigned int mBitsPerIndex, mBitsPerWIndex;
|
uint32_t mBitsPerIndex, mBitsPerWIndex;
|
||||||
unsigned int mMaskWIndex, mMaskIndex;
|
uint32_t mMaskWIndex, mMaskIndex;
|
||||||
float mError;
|
float mError;
|
||||||
osg::Vec4f mAabbMin, mAabbMax;
|
osg::Vec4f mAabbMin, mAabbMax;
|
||||||
char mWeldingType;
|
uint8_t mWeldingType;
|
||||||
char mMaterialType;
|
uint8_t mMaterialType;
|
||||||
std::vector<bhkMeshMaterial> mMaterials;
|
std::vector<bhkMeshMaterial> mMaterials;
|
||||||
std::vector<bhkQsTransform> mChunkTransforms;
|
std::vector<bhkQsTransform> mChunkTransforms;
|
||||||
std::vector<osg::Vec4f> mBigVerts;
|
std::vector<osg::Vec4f> mBigVerts;
|
||||||
|
@ -534,7 +572,7 @@ namespace Nif
|
||||||
{
|
{
|
||||||
bhkRigidBodyCInfo mInfo;
|
bhkRigidBodyCInfo mInfo;
|
||||||
bhkSerializableList mConstraints;
|
bhkSerializableList mConstraints;
|
||||||
unsigned int mBodyFlags;
|
uint32_t mBodyFlags;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
@ -542,6 +580,7 @@ namespace Nif
|
||||||
struct bhkSimpleShapePhantom : public bhkWorldObject
|
struct bhkSimpleShapePhantom : public bhkWorldObject
|
||||||
{
|
{
|
||||||
osg::Matrixf mTransform;
|
osg::Matrixf mTransform;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -549,6 +588,7 @@ namespace Nif
|
||||||
struct bhkConstraint : public bhkSerializable
|
struct bhkConstraint : public bhkSerializable
|
||||||
{
|
{
|
||||||
bhkConstraintCInfo mInfo;
|
bhkConstraintCInfo mInfo;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
@ -556,18 +596,21 @@ namespace Nif
|
||||||
struct bhkRagdollConstraint : public bhkConstraint
|
struct bhkRagdollConstraint : public bhkConstraint
|
||||||
{
|
{
|
||||||
bhkRagdollConstraintCInfo mConstraint;
|
bhkRagdollConstraintCInfo mConstraint;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bhkHingeConstraint : public bhkConstraint
|
struct bhkHingeConstraint : public bhkConstraint
|
||||||
{
|
{
|
||||||
bhkHingeConstraintCInfo mConstraint;
|
bhkHingeConstraintCInfo mConstraint;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bhkLimitedHingeConstraint : public bhkConstraint
|
struct bhkLimitedHingeConstraint : public bhkConstraint
|
||||||
{
|
{
|
||||||
bhkLimitedHingeConstraintCInfo mConstraint;
|
bhkLimitedHingeConstraintCInfo mConstraint;
|
||||||
|
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue