|
|
|
@ -43,7 +43,7 @@ namespace Nif
|
|
|
|
|
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 110))
|
|
|
|
|
{
|
|
|
|
|
nif->skip(4); // NiBlendInterpolator link
|
|
|
|
|
mBlendInterpolator.read(nif);
|
|
|
|
|
mBlendIndex = nif->getUShort();
|
|
|
|
|
}
|
|
|
|
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 106) && nif->getBethVersion() > 0)
|
|
|
|
@ -73,6 +73,7 @@ namespace Nif
|
|
|
|
|
{
|
|
|
|
|
mInterpolator.post(nif);
|
|
|
|
|
mController.post(nif);
|
|
|
|
|
mBlendInterpolator.post(nif);
|
|
|
|
|
mStringPalette.post(nif);
|
|
|
|
|
// TODO: probably should fill the strings with string palette contents here
|
|
|
|
|
}
|
|
|
|
@ -431,9 +432,15 @@ namespace Nif
|
|
|
|
|
{
|
|
|
|
|
Controller::read(nif);
|
|
|
|
|
mCumulative = nif->getBoolean();
|
|
|
|
|
unsigned int numSequences = nif->getUInt();
|
|
|
|
|
nif->skip(4 * numSequences); // Controller sequences
|
|
|
|
|
nif->skip(4); // Object palette
|
|
|
|
|
readRecordList(nif, mSequences);
|
|
|
|
|
mObjectPalette.read(nif);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiControllerManager::post(Reader& nif)
|
|
|
|
|
{
|
|
|
|
|
Controller::post(nif);
|
|
|
|
|
postRecordList(nif, mSequences);
|
|
|
|
|
mObjectPalette.post(nif);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiPoint3Interpolator::read(NIFStream* nif)
|
|
|
|
@ -502,4 +509,132 @@ namespace Nif
|
|
|
|
|
data.post(nif);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendInterpolator::read(NIFStream* nif)
|
|
|
|
|
{
|
|
|
|
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 112))
|
|
|
|
|
mManagerControlled = nif->getChar() & 1;
|
|
|
|
|
size_t numInterps = 0;
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 109))
|
|
|
|
|
{
|
|
|
|
|
numInterps = nif->getUShort();
|
|
|
|
|
mArrayGrowBy = nif->getUShort();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
numInterps = nif->getChar();
|
|
|
|
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 112))
|
|
|
|
|
{
|
|
|
|
|
mWeightThreshold = nif->getFloat();
|
|
|
|
|
if (!mManagerControlled)
|
|
|
|
|
{
|
|
|
|
|
mInterpCount = nif->getChar();
|
|
|
|
|
mSingleIndex = nif->getChar();
|
|
|
|
|
mHighPriority = nif->getChar();
|
|
|
|
|
mNextHighPriority = nif->getChar();
|
|
|
|
|
mSingleTime = nif->getFloat();
|
|
|
|
|
mHighWeightsSum = nif->getFloat();
|
|
|
|
|
mNextHighWeightsSum = nif->getFloat();
|
|
|
|
|
mHighEaseSpinner = nif->getFloat();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!mManagerControlled)
|
|
|
|
|
{
|
|
|
|
|
mItems.resize(numInterps);
|
|
|
|
|
for (Item& item : mItems)
|
|
|
|
|
item.read(nif);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 111))
|
|
|
|
|
{
|
|
|
|
|
mManagerControlled = nif->getBoolean();
|
|
|
|
|
mWeightThreshold = nif->getFloat();
|
|
|
|
|
mOnlyUseHighestWeight = nif->getBoolean();
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 109))
|
|
|
|
|
{
|
|
|
|
|
mInterpCount = nif->getUShort();
|
|
|
|
|
mSingleIndex = nif->getUShort();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mInterpCount = nif->getChar();
|
|
|
|
|
mSingleIndex = nif->getChar();
|
|
|
|
|
}
|
|
|
|
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 108))
|
|
|
|
|
{
|
|
|
|
|
mSingleInterpolator.read(nif);
|
|
|
|
|
mSingleTime = nif->getFloat();
|
|
|
|
|
}
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 109))
|
|
|
|
|
{
|
|
|
|
|
mHighPriority = nif->getInt();
|
|
|
|
|
mNextHighPriority = nif->getInt();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
mHighPriority = nif->getChar();
|
|
|
|
|
mNextHighPriority = nif->getChar();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendInterpolator::post(Reader& nif)
|
|
|
|
|
{
|
|
|
|
|
for (Item& item : mItems)
|
|
|
|
|
item.post(nif);
|
|
|
|
|
mSingleInterpolator.post(nif);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendInterpolator::Item::read(NIFStream* nif)
|
|
|
|
|
{
|
|
|
|
|
mInterpolator.read(nif);
|
|
|
|
|
mWeight = nif->getFloat();
|
|
|
|
|
mNormalizedWeight = nif->getFloat();
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 109))
|
|
|
|
|
mPriority = nif->getInt();
|
|
|
|
|
else
|
|
|
|
|
mPriority = nif->getChar();
|
|
|
|
|
mEaseSpinner = nif->getFloat();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendInterpolator::Item::post(Reader& nif)
|
|
|
|
|
{
|
|
|
|
|
mInterpolator.post(nif);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendBoolInterpolator::read(NIFStream* nif)
|
|
|
|
|
{
|
|
|
|
|
NiBlendInterpolator::read(nif);
|
|
|
|
|
mValue = nif->getChar() != 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendFloatInterpolator::read(NIFStream* nif)
|
|
|
|
|
{
|
|
|
|
|
NiBlendInterpolator::read(nif);
|
|
|
|
|
mValue = nif->getFloat();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendPoint3Interpolator::read(NIFStream* nif)
|
|
|
|
|
{
|
|
|
|
|
NiBlendInterpolator::read(nif);
|
|
|
|
|
mValue = nif->getVector3();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NiBlendTransformInterpolator::read(NIFStream* nif)
|
|
|
|
|
{
|
|
|
|
|
NiBlendInterpolator::read(nif);
|
|
|
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 109))
|
|
|
|
|
{
|
|
|
|
|
mPosValue = nif->getVector3();
|
|
|
|
|
mRotValue = nif->getQuaternion();
|
|
|
|
|
mScaleValue = nif->getFloat();
|
|
|
|
|
if (!nif->getBoolean())
|
|
|
|
|
mPosValue = osg::Vec3f();
|
|
|
|
|
if (!nif->getBoolean())
|
|
|
|
|
mRotValue = osg::Quat();
|
|
|
|
|
if (!nif->getBoolean())
|
|
|
|
|
mScaleValue = 1.f;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|