mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-30 07:21:12 +00:00
Read NiMeshPSysData and related modifiers
This commit is contained in:
parent
285eafbf66
commit
7c11d9acbc
@ -19,7 +19,7 @@ namespace Nif
|
||||
switch (recType)
|
||||
{
|
||||
case RC_NiPSysData:
|
||||
// case RC_NiMeshPSysData:
|
||||
case RC_NiMeshPSysData:
|
||||
case RC_BSStripPSysData:
|
||||
isPSysData = true;
|
||||
break;
|
||||
|
@ -287,6 +287,7 @@ namespace Nif
|
||||
{ "NiParticleSystem", &construct<NiParticleSystem, RC_NiParticleSystem> },
|
||||
{ "NiMeshParticleSystem", &construct<NiParticleSystem, RC_NiParticleSystem> },
|
||||
{ "NiPSysData", &construct<NiPSysData, RC_NiPSysData> },
|
||||
{ "NiMeshPSysData", &construct<NiMeshPSysData, RC_NiMeshPSysData> },
|
||||
|
||||
// Geometry, Bethesda
|
||||
{ "BSStripParticleSystem", &construct<NiParticleSystem, RC_BSStripParticleSystem> },
|
||||
@ -309,9 +310,11 @@ namespace Nif
|
||||
{ "NiPSysPositionModifier", &construct<NiPSysModifier, RC_NiPSysPositionModifier> },
|
||||
{ "NiPSysRotationModifier", &construct<NiPSysRotationModifier, RC_NiPSysRotationModifier> },
|
||||
{ "NiPSysSpawnModifier", &construct<NiPSysSpawnModifier, RC_NiPSysSpawnModifier> },
|
||||
{ "NiPSysMeshUpdateModifier", &construct<NiPSysMeshUpdateModifier, RC_NiPSysMeshUpdateModifier> },
|
||||
|
||||
// Modifiers, Bethesda
|
||||
{ "BSParentVelocityModifier", &construct<BSParentVelocityModifier, RC_BSParentVelocityModifier> },
|
||||
{ "BSPSysHavokUpdateModifier", &construct<BSPSysHavokUpdateModifier, RC_BSPSysHavokUpdateModifier> },
|
||||
{ "BSPSysInheritVelocityModifier",
|
||||
&construct<BSPSysInheritVelocityModifier, RC_BSPSysInheritVelocityModifier> },
|
||||
{ "BSPSysLODModifier", &construct<BSPSysLODModifier, RC_BSPSysLODModifier> },
|
||||
|
@ -230,6 +230,26 @@ namespace Nif
|
||||
}
|
||||
}
|
||||
|
||||
void NiMeshPSysData::read(NIFStream* nif)
|
||||
{
|
||||
NiPSysData::read(nif);
|
||||
|
||||
if (nif->getVersion() >= NIFStream::generateVersion(10, 2, 0, 0))
|
||||
{
|
||||
nif->read(mDefaultPoolSize);
|
||||
nif->read(mFillPoolsOnLoad);
|
||||
nif->readVector(mGenerations, nif->get<uint32_t>());
|
||||
}
|
||||
mParticleMeshes.read(nif);
|
||||
}
|
||||
|
||||
void NiMeshPSysData::post(Reader& nif)
|
||||
{
|
||||
NiPSysData::post(nif);
|
||||
|
||||
mParticleMeshes.post(nif);
|
||||
}
|
||||
|
||||
void BSStripPSysData::read(NIFStream* nif)
|
||||
{
|
||||
NiPSysData::read(nif);
|
||||
@ -362,6 +382,20 @@ namespace Nif
|
||||
nif->read(mBaseScale);
|
||||
}
|
||||
|
||||
void NiPSysMeshUpdateModifier::read(NIFStream* nif)
|
||||
{
|
||||
NiPSysModifier::read(nif);
|
||||
|
||||
readRecordList(nif, mMeshes);
|
||||
}
|
||||
|
||||
void NiPSysMeshUpdateModifier::post(Reader& nif)
|
||||
{
|
||||
NiPSysModifier::post(nif);
|
||||
|
||||
postRecordList(nif, mMeshes);
|
||||
}
|
||||
|
||||
void NiPSysRotationModifier::read(NIFStream* nif)
|
||||
{
|
||||
NiPSysModifier::read(nif);
|
||||
@ -405,6 +439,20 @@ namespace Nif
|
||||
nif->read(mDamping);
|
||||
}
|
||||
|
||||
void BSPSysHavokUpdateModifier::read(NIFStream* nif)
|
||||
{
|
||||
NiPSysMeshUpdateModifier::read(nif);
|
||||
|
||||
mModifier.read(nif);
|
||||
}
|
||||
|
||||
void BSPSysHavokUpdateModifier::post(Reader& nif)
|
||||
{
|
||||
NiPSysMeshUpdateModifier::post(nif);
|
||||
|
||||
mModifier.post(nif);
|
||||
}
|
||||
|
||||
void BSPSysInheritVelocityModifier::read(NIFStream* nif)
|
||||
{
|
||||
NiPSysModifier::read(nif);
|
||||
|
@ -147,6 +147,17 @@ namespace Nif
|
||||
void read(NIFStream* nif) override;
|
||||
};
|
||||
|
||||
struct NiMeshPSysData : NiPSysData
|
||||
{
|
||||
uint32_t mDefaultPoolSize;
|
||||
bool mFillPoolsOnLoad;
|
||||
std::vector<uint32_t> mGenerations;
|
||||
NiAVObjectPtr mParticleMeshes;
|
||||
|
||||
void read(NIFStream* nif) override;
|
||||
void post(Reader& nif) override;
|
||||
};
|
||||
|
||||
struct BSStripPSysData : NiPSysData
|
||||
{
|
||||
uint16_t mMaxPointCount;
|
||||
@ -261,6 +272,14 @@ namespace Nif
|
||||
void read(NIFStream* nif) override;
|
||||
};
|
||||
|
||||
struct NiPSysMeshUpdateModifier : NiPSysModifier
|
||||
{
|
||||
NiAVObjectList mMeshes;
|
||||
|
||||
void read(NIFStream* nif) override;
|
||||
void post(Reader& nif) override;
|
||||
};
|
||||
|
||||
struct NiPSysRotationModifier : NiPSysModifier
|
||||
{
|
||||
float mRotationSpeed;
|
||||
@ -295,6 +314,14 @@ namespace Nif
|
||||
void read(NIFStream* nif) override;
|
||||
};
|
||||
|
||||
struct BSPSysHavokUpdateModifier : NiPSysMeshUpdateModifier
|
||||
{
|
||||
NiPSysModifierPtr mModifier;
|
||||
|
||||
void read(NIFStream* nif) override;
|
||||
void post(Reader& nif) override;
|
||||
};
|
||||
|
||||
struct BSPSysInheritVelocityModifier : NiPSysModifier
|
||||
{
|
||||
NiAVObjectPtr mInheritObject;
|
||||
|
@ -101,6 +101,7 @@ namespace Nif
|
||||
RC_BSParentVelocityModifier,
|
||||
RC_BSProceduralLightningController,
|
||||
RC_BSPSysArrayEmitter,
|
||||
RC_BSPSysHavokUpdateModifier,
|
||||
RC_BSPSysInheritVelocityModifier,
|
||||
RC_BSPSysLODModifier,
|
||||
RC_BSPSysMultiTargetEmitterCtlr,
|
||||
@ -183,6 +184,7 @@ namespace Nif
|
||||
RC_NiLookAtInterpolator,
|
||||
RC_NiMaterialColorController,
|
||||
RC_NiMaterialProperty,
|
||||
RC_NiMeshPSysData,
|
||||
RC_NiMorphData,
|
||||
RC_NiMultiTargetTransformController,
|
||||
RC_NiNode,
|
||||
@ -232,6 +234,7 @@ namespace Nif
|
||||
RC_NiPSysInitialRotAngleCtlr,
|
||||
RC_NiPSysInitialRotAngleVarCtlr,
|
||||
RC_NiPSysMeshEmitter,
|
||||
RC_NiPSysMeshUpdateModifier,
|
||||
RC_NiPSysModifierActiveCtlr,
|
||||
RC_NiPSysPlanarCollider,
|
||||
RC_NiPSysPositionModifier,
|
||||
|
@ -185,6 +185,7 @@ namespace Nif
|
||||
using NiPSysColliderPtr = RecordPtrT<NiPSysCollider>;
|
||||
using NiPSysColliderManagerPtr = RecordPtrT<NiPSysColliderManager>;
|
||||
using NiPSysEmitterCtlrDataPtr = RecordPtrT<NiPSysEmitterCtlrData>;
|
||||
using NiPSysModifierPtr = RecordPtrT<NiPSysModifier>;
|
||||
using NiPSysSpawnModifierPtr = RecordPtrT<NiPSysSpawnModifier>;
|
||||
using NiBoolDataPtr = RecordPtrT<NiBoolData>;
|
||||
using NiSkinPartitionPtr = RecordPtrT<NiSkinPartition>;
|
||||
|
Loading…
x
Reference in New Issue
Block a user