mirror of
https://github.com/OpenMW/openmw.git
synced 2025-04-02 03:36:40 +00:00
Parse BSDistantObjectInstancedNode
This commit is contained in:
parent
7149fbb408
commit
695932d2db
4 changed files with 74 additions and 0 deletions
|
@ -71,6 +71,8 @@ namespace Nif
|
||||||
{ "BSBlastNode", &construct<BSRangeNode, RC_NiNode> },
|
{ "BSBlastNode", &construct<BSRangeNode, RC_NiNode> },
|
||||||
{ "BSDamageStage", &construct<BSRangeNode, RC_NiNode> },
|
{ "BSDamageStage", &construct<BSRangeNode, RC_NiNode> },
|
||||||
{ "BSDebrisNode", &construct<BSRangeNode, RC_NiNode> },
|
{ "BSDebrisNode", &construct<BSRangeNode, RC_NiNode> },
|
||||||
|
{ "BSDistantObjectInstancedNode",
|
||||||
|
&construct<BSDistantObjectInstancedNode, RC_BSDistantObjectInstancedNode> },
|
||||||
{ "BSFadeNode", &construct<NiNode, RC_NiNode> },
|
{ "BSFadeNode", &construct<NiNode, RC_NiNode> },
|
||||||
{ "BSLeafAnimNode", &construct<NiNode, RC_NiNode> },
|
{ "BSLeafAnimNode", &construct<NiNode, RC_NiNode> },
|
||||||
{ "BSMasterParticleSystem", &construct<BSMasterParticleSystem, RC_NiNode> },
|
{ "BSMasterParticleSystem", &construct<BSMasterParticleSystem, RC_NiNode> },
|
||||||
|
|
|
@ -742,4 +742,43 @@ namespace Nif
|
||||||
nif->read(mCurrent);
|
nif->read(mCurrent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BSResourceID::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
nif->read(mFileHash);
|
||||||
|
nif->readArray(mExtension);
|
||||||
|
nif->read(mDirectoryHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BSDistantObjectInstance::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
mResourceID.read(nif);
|
||||||
|
nif->skip(12 * nif->get<uint32_t>()); // Unknown data
|
||||||
|
mTransforms.resize(nif->get<uint32_t>());
|
||||||
|
for (osg::Matrixf& transform : mTransforms)
|
||||||
|
{
|
||||||
|
std::array<float, 16> mat;
|
||||||
|
nif->readArray(mat);
|
||||||
|
transform.set(mat.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BSShaderTextureArray::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
nif->skip(1); // Unknown
|
||||||
|
mTextureArrays.resize(nif->get<uint32_t>());
|
||||||
|
for (std::vector<std::string>& textureArray : mTextureArrays)
|
||||||
|
nif->getSizedStrings(textureArray, nif->get<uint32_t>());
|
||||||
|
}
|
||||||
|
|
||||||
|
void BSDistantObjectInstancedNode::read(NIFStream* nif)
|
||||||
|
{
|
||||||
|
BSMultiBoundNode::read(nif);
|
||||||
|
|
||||||
|
mInstances.resize(nif->get<uint32_t>());
|
||||||
|
for (BSDistantObjectInstance& instance : mInstances)
|
||||||
|
instance.read(nif);
|
||||||
|
for (BSShaderTextureArray& textureArray : mShaderTextureArrays)
|
||||||
|
textureArray.read(nif);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -494,5 +494,37 @@ namespace Nif
|
||||||
void read(NIFStream* nif) override;
|
void read(NIFStream* nif) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct BSResourceID
|
||||||
|
{
|
||||||
|
uint32_t mFileHash;
|
||||||
|
std::array<char, 4> mExtension;
|
||||||
|
uint32_t mDirectoryHash;
|
||||||
|
|
||||||
|
void read(NIFStream* nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BSDistantObjectInstance
|
||||||
|
{
|
||||||
|
BSResourceID mResourceID;
|
||||||
|
std::vector<osg::Matrixf> mTransforms;
|
||||||
|
|
||||||
|
void read(NIFStream* nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BSShaderTextureArray
|
||||||
|
{
|
||||||
|
std::vector<std::vector<std::string>> mTextureArrays;
|
||||||
|
|
||||||
|
void read(NIFStream* nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BSDistantObjectInstancedNode : BSMultiBoundNode
|
||||||
|
{
|
||||||
|
std::vector<BSDistantObjectInstance> mInstances;
|
||||||
|
std::array<BSShaderTextureArray, 3> mShaderTextureArrays;
|
||||||
|
|
||||||
|
void read(NIFStream* nif) override;
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -89,6 +89,7 @@ namespace Nif
|
||||||
RC_BSDynamicTriShape,
|
RC_BSDynamicTriShape,
|
||||||
RC_BSDismemberSkinInstance,
|
RC_BSDismemberSkinInstance,
|
||||||
RC_BSDistantObjectExtraData,
|
RC_BSDistantObjectExtraData,
|
||||||
|
RC_BSDistantObjectInstancedNode,
|
||||||
RC_BSDistantObjectLargeRefExtraData,
|
RC_BSDistantObjectLargeRefExtraData,
|
||||||
RC_BSEffectShaderProperty,
|
RC_BSEffectShaderProperty,
|
||||||
RC_BSEffectShaderPropertyColorController,
|
RC_BSEffectShaderPropertyColorController,
|
||||||
|
|
Loading…
Reference in a new issue