1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-04-01 23:06:41 +00:00

Read NiMeshPSysData and related modifiers

This commit is contained in:
Alexei Kotov 2023-09-23 14:52:48 +03:00
parent 285eafbf66
commit 7c11d9acbc
6 changed files with 83 additions and 1 deletions

View file

@ -19,7 +19,7 @@ namespace Nif
switch (recType) switch (recType)
{ {
case RC_NiPSysData: case RC_NiPSysData:
// case RC_NiMeshPSysData: case RC_NiMeshPSysData:
case RC_BSStripPSysData: case RC_BSStripPSysData:
isPSysData = true; isPSysData = true;
break; break;

View file

@ -287,6 +287,7 @@ namespace Nif
{ "NiParticleSystem", &construct<NiParticleSystem, RC_NiParticleSystem> }, { "NiParticleSystem", &construct<NiParticleSystem, RC_NiParticleSystem> },
{ "NiMeshParticleSystem", &construct<NiParticleSystem, RC_NiParticleSystem> }, { "NiMeshParticleSystem", &construct<NiParticleSystem, RC_NiParticleSystem> },
{ "NiPSysData", &construct<NiPSysData, RC_NiPSysData> }, { "NiPSysData", &construct<NiPSysData, RC_NiPSysData> },
{ "NiMeshPSysData", &construct<NiMeshPSysData, RC_NiMeshPSysData> },
// Geometry, Bethesda // Geometry, Bethesda
{ "BSStripParticleSystem", &construct<NiParticleSystem, RC_BSStripParticleSystem> }, { "BSStripParticleSystem", &construct<NiParticleSystem, RC_BSStripParticleSystem> },
@ -309,9 +310,11 @@ namespace Nif
{ "NiPSysPositionModifier", &construct<NiPSysModifier, RC_NiPSysPositionModifier> }, { "NiPSysPositionModifier", &construct<NiPSysModifier, RC_NiPSysPositionModifier> },
{ "NiPSysRotationModifier", &construct<NiPSysRotationModifier, RC_NiPSysRotationModifier> }, { "NiPSysRotationModifier", &construct<NiPSysRotationModifier, RC_NiPSysRotationModifier> },
{ "NiPSysSpawnModifier", &construct<NiPSysSpawnModifier, RC_NiPSysSpawnModifier> }, { "NiPSysSpawnModifier", &construct<NiPSysSpawnModifier, RC_NiPSysSpawnModifier> },
{ "NiPSysMeshUpdateModifier", &construct<NiPSysMeshUpdateModifier, RC_NiPSysMeshUpdateModifier> },
// Modifiers, Bethesda // Modifiers, Bethesda
{ "BSParentVelocityModifier", &construct<BSParentVelocityModifier, RC_BSParentVelocityModifier> }, { "BSParentVelocityModifier", &construct<BSParentVelocityModifier, RC_BSParentVelocityModifier> },
{ "BSPSysHavokUpdateModifier", &construct<BSPSysHavokUpdateModifier, RC_BSPSysHavokUpdateModifier> },
{ "BSPSysInheritVelocityModifier", { "BSPSysInheritVelocityModifier",
&construct<BSPSysInheritVelocityModifier, RC_BSPSysInheritVelocityModifier> }, &construct<BSPSysInheritVelocityModifier, RC_BSPSysInheritVelocityModifier> },
{ "BSPSysLODModifier", &construct<BSPSysLODModifier, RC_BSPSysLODModifier> }, { "BSPSysLODModifier", &construct<BSPSysLODModifier, RC_BSPSysLODModifier> },

View file

@ -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) void BSStripPSysData::read(NIFStream* nif)
{ {
NiPSysData::read(nif); NiPSysData::read(nif);
@ -362,6 +382,20 @@ namespace Nif
nif->read(mBaseScale); 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) void NiPSysRotationModifier::read(NIFStream* nif)
{ {
NiPSysModifier::read(nif); NiPSysModifier::read(nif);
@ -405,6 +439,20 @@ namespace Nif
nif->read(mDamping); 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) void BSPSysInheritVelocityModifier::read(NIFStream* nif)
{ {
NiPSysModifier::read(nif); NiPSysModifier::read(nif);

View file

@ -147,6 +147,17 @@ namespace Nif
void read(NIFStream* nif) override; 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 struct BSStripPSysData : NiPSysData
{ {
uint16_t mMaxPointCount; uint16_t mMaxPointCount;
@ -261,6 +272,14 @@ namespace Nif
void read(NIFStream* nif) override; void read(NIFStream* nif) override;
}; };
struct NiPSysMeshUpdateModifier : NiPSysModifier
{
NiAVObjectList mMeshes;
void read(NIFStream* nif) override;
void post(Reader& nif) override;
};
struct NiPSysRotationModifier : NiPSysModifier struct NiPSysRotationModifier : NiPSysModifier
{ {
float mRotationSpeed; float mRotationSpeed;
@ -295,6 +314,14 @@ namespace Nif
void read(NIFStream* nif) override; void read(NIFStream* nif) override;
}; };
struct BSPSysHavokUpdateModifier : NiPSysMeshUpdateModifier
{
NiPSysModifierPtr mModifier;
void read(NIFStream* nif) override;
void post(Reader& nif) override;
};
struct BSPSysInheritVelocityModifier : NiPSysModifier struct BSPSysInheritVelocityModifier : NiPSysModifier
{ {
NiAVObjectPtr mInheritObject; NiAVObjectPtr mInheritObject;

View file

@ -101,6 +101,7 @@ namespace Nif
RC_BSParentVelocityModifier, RC_BSParentVelocityModifier,
RC_BSProceduralLightningController, RC_BSProceduralLightningController,
RC_BSPSysArrayEmitter, RC_BSPSysArrayEmitter,
RC_BSPSysHavokUpdateModifier,
RC_BSPSysInheritVelocityModifier, RC_BSPSysInheritVelocityModifier,
RC_BSPSysLODModifier, RC_BSPSysLODModifier,
RC_BSPSysMultiTargetEmitterCtlr, RC_BSPSysMultiTargetEmitterCtlr,
@ -183,6 +184,7 @@ namespace Nif
RC_NiLookAtInterpolator, RC_NiLookAtInterpolator,
RC_NiMaterialColorController, RC_NiMaterialColorController,
RC_NiMaterialProperty, RC_NiMaterialProperty,
RC_NiMeshPSysData,
RC_NiMorphData, RC_NiMorphData,
RC_NiMultiTargetTransformController, RC_NiMultiTargetTransformController,
RC_NiNode, RC_NiNode,
@ -232,6 +234,7 @@ namespace Nif
RC_NiPSysInitialRotAngleCtlr, RC_NiPSysInitialRotAngleCtlr,
RC_NiPSysInitialRotAngleVarCtlr, RC_NiPSysInitialRotAngleVarCtlr,
RC_NiPSysMeshEmitter, RC_NiPSysMeshEmitter,
RC_NiPSysMeshUpdateModifier,
RC_NiPSysModifierActiveCtlr, RC_NiPSysModifierActiveCtlr,
RC_NiPSysPlanarCollider, RC_NiPSysPlanarCollider,
RC_NiPSysPositionModifier, RC_NiPSysPositionModifier,

View file

@ -185,6 +185,7 @@ namespace Nif
using NiPSysColliderPtr = RecordPtrT<NiPSysCollider>; using NiPSysColliderPtr = RecordPtrT<NiPSysCollider>;
using NiPSysColliderManagerPtr = RecordPtrT<NiPSysColliderManager>; using NiPSysColliderManagerPtr = RecordPtrT<NiPSysColliderManager>;
using NiPSysEmitterCtlrDataPtr = RecordPtrT<NiPSysEmitterCtlrData>; using NiPSysEmitterCtlrDataPtr = RecordPtrT<NiPSysEmitterCtlrData>;
using NiPSysModifierPtr = RecordPtrT<NiPSysModifier>;
using NiPSysSpawnModifierPtr = RecordPtrT<NiPSysSpawnModifier>; using NiPSysSpawnModifierPtr = RecordPtrT<NiPSysSpawnModifier>;
using NiBoolDataPtr = RecordPtrT<NiBoolData>; using NiBoolDataPtr = RecordPtrT<NiBoolData>;
using NiSkinPartitionPtr = RecordPtrT<NiSkinPartition>; using NiSkinPartitionPtr = RecordPtrT<NiSkinPartition>;