1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-24 18:39:59 +00:00

Read BSMasterParticleSystem, BSParentVelocityModifier, NiLookAtInterpolator

This commit is contained in:
Alexei Kotov 2023-09-23 10:41:24 +03:00
parent 8df8135f1d
commit d048746146
6 changed files with 78 additions and 0 deletions

View File

@ -600,6 +600,26 @@ namespace Nif
mPercentData.post(nif);
}
void NiLookAtInterpolator::read(NIFStream* nif)
{
nif->read(mLookAtFlags);
mLookAt.read(nif);
nif->read(mLookAtName);
if (nif->getVersion() <= NIFStream::generateVersion(20, 4, 0, 12))
nif->read(mTransform);
mTranslation.read(nif);
mRoll.read(nif);
mScale.read(nif);
}
void NiLookAtInterpolator::post(Reader& nif)
{
mLookAt.post(nif);
mTranslation.post(nif);
mRoll.post(nif);
mScale.post(nif);
}
void NiBlendInterpolator::read(NIFStream* nif)
{
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 112))

View File

@ -419,6 +419,21 @@ namespace Nif
void post(Reader& nif) override;
};
struct NiLookAtInterpolator : NiInterpolator
{
// Uses the same flags as NiLookAtController
uint16_t mLookAtFlags{ 0 };
NiAVObjectPtr mLookAt;
std::string mLookAtName;
NiQuatTransform mTransform;
NiInterpolatorPtr mTranslation;
NiInterpolatorPtr mRoll;
NiInterpolatorPtr mScale;
void read(NIFStream* nif) override;
void post(Reader& nif) override;
};
// Abstract
struct NiBlendInterpolator : public NiInterpolator
{

View File

@ -72,6 +72,7 @@ namespace Nif
{ "BSDebrisNode", &construct<BSRangeNode, RC_NiNode> },
{ "BSFadeNode", &construct<NiNode, RC_NiNode> },
{ "BSLeafAnimNode", &construct<NiNode, RC_NiNode> },
{ "BSMasterParticleSystem", &construct<BSMasterParticleSystem, RC_NiNode> },
{ "BSMultiBoundNode", &construct<BSMultiBoundNode, RC_NiNode> },
{ "BSOrderedNode", &construct<BSOrderedNode, RC_NiNode> },
{ "BSRangeNode", &construct<BSRangeNode, RC_NiNode> },
@ -164,6 +165,7 @@ namespace Nif
{ "NiBoolTimelineInterpolator", &construct<NiBoolInterpolator, RC_NiBoolTimelineInterpolator> },
{ "NiColorInterpolator", &construct<NiColorInterpolator, RC_NiColorInterpolator> },
{ "NiFloatInterpolator", &construct<NiFloatInterpolator, RC_NiFloatInterpolator> },
{ "NiLookAtInterpolator", &construct<NiLookAtInterpolator, RC_NiLookAtInterpolator> },
{ "NiPathInterpolator", &construct<NiPathInterpolator, RC_NiPathInterpolator> },
{ "NiPoint3Interpolator", &construct<NiPoint3Interpolator, RC_NiPoint3Interpolator> },
{ "NiTransformInterpolator", &construct<NiTransformInterpolator, RC_NiTransformInterpolator> },
@ -305,6 +307,7 @@ namespace Nif
{ "NiPSysSpawnModifier", &construct<NiPSysSpawnModifier, RC_NiPSysSpawnModifier> },
// Modifiers, Bethesda
{ "BSParentVelocityModifier", &construct<BSParentVelocityModifier, RC_BSParentVelocityModifier> },
{ "BSPSysInheritVelocityModifier",
&construct<BSPSysInheritVelocityModifier, RC_BSPSysInheritVelocityModifier> },
{ "BSPSysLODModifier", &construct<BSPSysLODModifier, RC_BSPSysLODModifier> },

View File

@ -150,6 +150,21 @@ namespace Nif
nif->readVector(mRotations, mNumVertices);
}
void BSMasterParticleSystem::read(NIFStream* nif)
{
NiNode::read(nif);
nif->read(mMaxEmitters);
readRecordList(nif, mParticleSystems);
}
void BSMasterParticleSystem::post(Reader& nif)
{
NiNode::post(nif);
postRecordList(nif, mParticleSystems);
}
void NiParticleSystem::read(NIFStream* nif)
{
// Weird loading to account for inheritance differences starting from SSE
@ -383,6 +398,13 @@ namespace Nif
nif->read(mLifespanVariation);
}
void BSParentVelocityModifier::read(NIFStream* nif)
{
NiPSysModifier::read(nif);
nif->read(mDamping);
}
void BSPSysInheritVelocityModifier::read(NIFStream* nif)
{
NiPSysModifier::read(nif);

View File

@ -115,6 +115,15 @@ namespace Nif
void read(NIFStream* nif) override;
};
struct BSMasterParticleSystem : NiNode
{
uint16_t mMaxEmitters;
NiAVObjectList mParticleSystems;
void read(NIFStream* nif) override;
void post(Reader& nif) override;
};
struct NiParticleSystem : NiParticles
{
osg::BoundingSpheref mBoundingSphere;
@ -279,6 +288,13 @@ namespace Nif
void read(NIFStream* nif) override;
};
struct BSParentVelocityModifier : NiPSysModifier
{
float mDamping;
void read(NIFStream* nif) override;
};
struct BSPSysInheritVelocityModifier : NiPSysModifier
{
NiAVObjectPtr mInheritObject;

View File

@ -94,6 +94,7 @@ namespace Nif
RC_BSMultiBoundSphere,
RC_BSNiAlphaPropertyTestRefController,
RC_BSPackedAdditionalGeometryData,
RC_BSParentVelocityModifier,
RC_BSPSysArrayEmitter,
RC_BSPSysInheritVelocityModifier,
RC_BSPSysLODModifier,
@ -172,6 +173,7 @@ namespace Nif
RC_NiLinesData,
RC_NiLODNode,
RC_NiLookAtController,
RC_NiLookAtInterpolator,
RC_NiMaterialColorController,
RC_NiMaterialProperty,
RC_NiMorphData,