mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-01 04:20:20 +00:00
Merge branch 'candles' into 'master'
Read NiBlendInterpolator records, fill in NiControllerManager fields See merge request OpenMW/openmw!2700
This commit is contained in:
commit
a41cbfb349
@ -43,7 +43,7 @@ namespace Nif
|
|||||||
|
|
||||||
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 110))
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 110))
|
||||||
{
|
{
|
||||||
nif->skip(4); // NiBlendInterpolator link
|
mBlendInterpolator.read(nif);
|
||||||
mBlendIndex = nif->getUShort();
|
mBlendIndex = nif->getUShort();
|
||||||
}
|
}
|
||||||
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 106) && nif->getBethVersion() > 0)
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 106) && nif->getBethVersion() > 0)
|
||||||
@ -73,6 +73,7 @@ namespace Nif
|
|||||||
{
|
{
|
||||||
mInterpolator.post(nif);
|
mInterpolator.post(nif);
|
||||||
mController.post(nif);
|
mController.post(nif);
|
||||||
|
mBlendInterpolator.post(nif);
|
||||||
mStringPalette.post(nif);
|
mStringPalette.post(nif);
|
||||||
// TODO: probably should fill the strings with string palette contents here
|
// TODO: probably should fill the strings with string palette contents here
|
||||||
}
|
}
|
||||||
@ -431,9 +432,15 @@ namespace Nif
|
|||||||
{
|
{
|
||||||
Controller::read(nif);
|
Controller::read(nif);
|
||||||
mCumulative = nif->getBoolean();
|
mCumulative = nif->getBoolean();
|
||||||
unsigned int numSequences = nif->getUInt();
|
readRecordList(nif, mSequences);
|
||||||
nif->skip(4 * numSequences); // Controller sequences
|
mObjectPalette.read(nif);
|
||||||
nif->skip(4); // Object palette
|
}
|
||||||
|
|
||||||
|
void NiControllerManager::post(Reader& nif)
|
||||||
|
{
|
||||||
|
Controller::post(nif);
|
||||||
|
postRecordList(nif, mSequences);
|
||||||
|
mObjectPalette.post(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NiPoint3Interpolator::read(NIFStream* nif)
|
void NiPoint3Interpolator::read(NIFStream* nif)
|
||||||
@ -502,4 +509,132 @@ namespace Nif
|
|||||||
data.post(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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ namespace Nif
|
|||||||
std::string mTargetName;
|
std::string mTargetName;
|
||||||
NiInterpolatorPtr mInterpolator;
|
NiInterpolatorPtr mInterpolator;
|
||||||
ControllerPtr mController;
|
ControllerPtr mController;
|
||||||
|
NiBlendInterpolatorPtr mBlendInterpolator;
|
||||||
unsigned short mBlendIndex;
|
unsigned short mBlendIndex;
|
||||||
unsigned char mPriority;
|
unsigned char mPriority;
|
||||||
NiStringPalettePtr mStringPalette;
|
NiStringPalettePtr mStringPalette;
|
||||||
@ -295,7 +296,10 @@ namespace Nif
|
|||||||
struct NiControllerManager : public Controller
|
struct NiControllerManager : public Controller
|
||||||
{
|
{
|
||||||
bool mCumulative;
|
bool mCumulative;
|
||||||
|
NiControllerSequenceList mSequences;
|
||||||
|
NiDefaultAVObjectPalettePtr mObjectPalette;
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NiInterpolator : public Record
|
struct NiInterpolator : public Record
|
||||||
@ -345,5 +349,62 @@ namespace Nif
|
|||||||
void post(Reader& nif) override;
|
void post(Reader& nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Abstract
|
||||||
|
struct NiBlendInterpolator : public NiInterpolator
|
||||||
|
{
|
||||||
|
struct Item
|
||||||
|
{
|
||||||
|
NiInterpolatorPtr mInterpolator;
|
||||||
|
float mWeight, mNormalizedWeight;
|
||||||
|
int mPriority;
|
||||||
|
float mEaseSpinner;
|
||||||
|
|
||||||
|
void read(NIFStream* nif);
|
||||||
|
void post(Reader& nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
bool mManagerControlled{ false };
|
||||||
|
bool mOnlyUseHighestWeight{ false };
|
||||||
|
unsigned short mArrayGrowBy{ 0 };
|
||||||
|
float mWeightThreshold;
|
||||||
|
unsigned short mInterpCount;
|
||||||
|
unsigned short mSingleIndex;
|
||||||
|
int mHighPriority, mNextHighPriority;
|
||||||
|
float mSingleTime;
|
||||||
|
float mHighWeightsSum, mNextHighWeightsSum;
|
||||||
|
float mHighEaseSpinner;
|
||||||
|
std::vector<Item> mItems;
|
||||||
|
NiInterpolatorPtr mSingleInterpolator;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
void post(Reader& nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiBlendBoolInterpolator : public NiBlendInterpolator
|
||||||
|
{
|
||||||
|
char mValue;
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiBlendFloatInterpolator : public NiBlendInterpolator
|
||||||
|
{
|
||||||
|
float mValue;
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiBlendPoint3Interpolator : public NiBlendInterpolator
|
||||||
|
{
|
||||||
|
osg::Vec3f mValue;
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiBlendTransformInterpolator : public NiBlendInterpolator
|
||||||
|
{
|
||||||
|
osg::Vec3f mPosValue;
|
||||||
|
osg::Quat mRotValue;
|
||||||
|
float mScaleValue;
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
} // Namespace
|
} // Namespace
|
||||||
#endif
|
#endif
|
||||||
|
@ -175,6 +175,11 @@ namespace Nif
|
|||||||
{ "NiSequence", &construct<NiSequence, RC_NiSequence> },
|
{ "NiSequence", &construct<NiSequence, RC_NiSequence> },
|
||||||
{ "NiControllerSequence", &construct<NiControllerSequence, RC_NiControllerSequence> },
|
{ "NiControllerSequence", &construct<NiControllerSequence, RC_NiControllerSequence> },
|
||||||
{ "NiDefaultAVObjectPalette", &construct<NiDefaultAVObjectPalette, RC_NiDefaultAVObjectPalette> },
|
{ "NiDefaultAVObjectPalette", &construct<NiDefaultAVObjectPalette, RC_NiDefaultAVObjectPalette> },
|
||||||
|
{ "NiBlendBoolInterpolator", &construct<NiBlendBoolInterpolator, RC_NiBlendBoolInterpolator> },
|
||||||
|
{ "NiBlendFloatInterpolator", &construct<NiBlendFloatInterpolator, RC_NiBlendFloatInterpolator> },
|
||||||
|
{ "NiBlendPoint3Interpolator", &construct<NiBlendPoint3Interpolator, RC_NiBlendPoint3Interpolator> },
|
||||||
|
{ "NiBlendTransformInterpolator",
|
||||||
|
&construct<NiBlendTransformInterpolator, RC_NiBlendTransformInterpolator> },
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,6 +152,10 @@ namespace Nif
|
|||||||
RC_NiSequence,
|
RC_NiSequence,
|
||||||
RC_NiControllerSequence,
|
RC_NiControllerSequence,
|
||||||
RC_NiDefaultAVObjectPalette,
|
RC_NiDefaultAVObjectPalette,
|
||||||
|
RC_NiBlendBoolInterpolator,
|
||||||
|
RC_NiBlendFloatInterpolator,
|
||||||
|
RC_NiBlendPoint3Interpolator,
|
||||||
|
RC_NiBlendTransformInterpolator,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Base class for all records
|
/// Base class for all records
|
||||||
|
@ -142,6 +142,9 @@ namespace Nif
|
|||||||
struct NiInterpolator;
|
struct NiInterpolator;
|
||||||
struct NiStringPalette;
|
struct NiStringPalette;
|
||||||
struct NiControllerManager;
|
struct NiControllerManager;
|
||||||
|
struct NiBlendInterpolator;
|
||||||
|
struct NiDefaultAVObjectPalette;
|
||||||
|
struct NiControllerSequence;
|
||||||
|
|
||||||
using NodePtr = RecordPtrT<Node>;
|
using NodePtr = RecordPtrT<Node>;
|
||||||
using ExtraPtr = RecordPtrT<Extra>;
|
using ExtraPtr = RecordPtrT<Extra>;
|
||||||
@ -174,6 +177,8 @@ namespace Nif
|
|||||||
using NiInterpolatorPtr = RecordPtrT<NiInterpolator>;
|
using NiInterpolatorPtr = RecordPtrT<NiInterpolator>;
|
||||||
using NiStringPalettePtr = RecordPtrT<NiStringPalette>;
|
using NiStringPalettePtr = RecordPtrT<NiStringPalette>;
|
||||||
using NiControllerManagerPtr = RecordPtrT<NiControllerManager>;
|
using NiControllerManagerPtr = RecordPtrT<NiControllerManager>;
|
||||||
|
using NiBlendInterpolatorPtr = RecordPtrT<NiBlendInterpolator>;
|
||||||
|
using NiDefaultAVObjectPalettePtr = RecordPtrT<NiDefaultAVObjectPalette>;
|
||||||
|
|
||||||
using NodeList = RecordListT<Node>;
|
using NodeList = RecordListT<Node>;
|
||||||
using PropertyList = RecordListT<Property>;
|
using PropertyList = RecordListT<Property>;
|
||||||
@ -183,6 +188,7 @@ namespace Nif
|
|||||||
using NiTriStripsDataList = RecordListT<NiTriStripsData>;
|
using NiTriStripsDataList = RecordListT<NiTriStripsData>;
|
||||||
using bhkShapeList = RecordListT<bhkShape>;
|
using bhkShapeList = RecordListT<bhkShape>;
|
||||||
using bhkSerializableList = RecordListT<bhkSerializable>;
|
using bhkSerializableList = RecordListT<bhkSerializable>;
|
||||||
|
using NiControllerSequenceList = RecordListT<NiControllerSequence>;
|
||||||
|
|
||||||
} // Namespace
|
} // Namespace
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user