From a416d18adf51ef0f97109450ffa53061b7c2ac96 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Fri, 22 Sep 2023 11:32:28 +0300 Subject: [PATCH] Read NiPSysColorModifier, NiPSysGrowFadeModifier, BSPSysArrayEmitter --- components/nif/niffile.cpp | 7 ++++++- components/nif/particle.cpp | 27 +++++++++++++++++++++++++++ components/nif/particle.hpp | 19 +++++++++++++++++++ components/nif/record.hpp | 3 +++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/components/nif/niffile.cpp b/components/nif/niffile.cpp index b0dde04d32..f526c1e3d4 100644 --- a/components/nif/niffile.cpp +++ b/components/nif/niffile.cpp @@ -296,8 +296,10 @@ namespace Nif { "NiPSysAgeDeathModifier", &construct }, { "NiPSysBombModifier", &construct }, { "NiPSysBoundUpdateModifier", &construct }, + { "NiPSysColorModifier", &construct }, { "NiPSysDragModifier", &construct }, { "NiPSysGravityModifier", &construct }, + { "NiPSysGrowFadeModifier", &construct }, { "NiPSysPositionModifier", &construct }, { "NiPSysRotationModifier", &construct }, { "NiPSysSpawnModifier", &construct }, @@ -313,12 +315,15 @@ namespace Nif { "BSPSysSubTexModifier", &construct }, { "BSWindModifier", &construct }, - // Emitters + // Emitters, Gamebryo { "NiPSysBoxEmitter", &construct }, { "NiPSysCylinderEmitter", &construct }, { "NiPSysMeshEmitter", &construct }, { "NiPSysSphereEmitter", &construct }, + // Emitters, Bethesda + { "BSPSysArrayEmitter", &construct }, + // Modifier controllers, Gamebryo { "NiPSysAirFieldAirFrictionCtlr", &construct }, { "NiPSysAirFieldInheritVelocityCtlr", diff --git a/components/nif/particle.cpp b/components/nif/particle.cpp index e9da792e6e..0d3545acd5 100644 --- a/components/nif/particle.cpp +++ b/components/nif/particle.cpp @@ -279,6 +279,20 @@ namespace Nif nif->read(mUpdateSkip); } + void NiPSysColorModifier::read(NIFStream* nif) + { + NiPSysModifier::read(nif); + + mData.read(nif); + } + + void NiPSysColorModifier::post(Reader& nif) + { + NiPSysModifier::post(nif); + + mData.post(nif); + } + void NiPSysDragModifier::read(NIFStream* nif) { NiPSysModifier::read(nif); @@ -320,6 +334,19 @@ namespace Nif mGravityObject.post(nif); } + void NiPSysGrowFadeModifier::read(NIFStream* nif) + { + NiPSysModifier::read(nif); + + nif->read(mGrowTime); + nif->read(mGrowGeneration); + nif->read(mFadeTime); + nif->read(mFadeGeneration); + if (nif->getVersion() == NIFFile::NIFVersion::VER_BGS + && nif->getBethVersion() >= NIFFile::BethVersion::BETHVER_FO3) + nif->read(mBaseScale); + } + void NiPSysRotationModifier::read(NIFStream* nif) { NiPSysModifier::read(nif); diff --git a/components/nif/particle.hpp b/components/nif/particle.hpp index 6c6306701b..f40dac44ce 100644 --- a/components/nif/particle.hpp +++ b/components/nif/particle.hpp @@ -206,6 +206,14 @@ namespace Nif void read(NIFStream* nif) override; }; + struct NiPSysColorModifier : NiPSysModifier + { + NiColorDataPtr mData; + + void read(NIFStream* nif) override; + void post(Reader& nif) override; + }; + struct NiPSysDragModifier : public NiPSysModifier { NiAVObjectPtr mDragObject; @@ -233,6 +241,17 @@ namespace Nif void post(Reader& nif) override; }; + struct NiPSysGrowFadeModifier : NiPSysModifier + { + float mGrowTime; + uint16_t mGrowGeneration; + float mFadeTime; + uint16_t mFadeGeneration; + float mBaseScale; + + void read(NIFStream* nif) override; + }; + struct NiPSysRotationModifier : public NiPSysModifier { float mRotationSpeed; diff --git a/components/nif/record.hpp b/components/nif/record.hpp index ed497323a9..f7bb4fa648 100644 --- a/components/nif/record.hpp +++ b/components/nif/record.hpp @@ -94,6 +94,7 @@ namespace Nif RC_BSMultiBoundSphere, RC_BSNiAlphaPropertyTestRefController, RC_BSPackedAdditionalGeometryData, + RC_BSPSysArrayEmitter, RC_BSPSysInheritVelocityModifier, RC_BSPSysLODModifier, RC_BSPSysRecycleBoundModifier, @@ -198,6 +199,7 @@ namespace Nif RC_NiPSysBoundUpdateModifier, RC_NiPSysBoxEmitter, RC_NiPSysColliderManager, + RC_NiPSysColorModifier, RC_NiPSysCylinderEmitter, RC_NiPSysData, RC_NiPSysDragModifier, @@ -215,6 +217,7 @@ namespace Nif RC_NiPSysFieldMaxDistanceCtlr, RC_NiPSysGravityModifier, RC_NiPSysGravityStrengthCtlr, + RC_NiPSysGrowFadeModifier, RC_NiPSysInitialRotSpeedCtlr, RC_NiPSysInitialRotSpeedVarCtlr, RC_NiPSysInitialRotAngleCtlr,