1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-06 07:15:36 +00:00

Read BSAnimNote/BSAnimNotes

This commit is contained in:
Alexei Kotov 2024-05-13 01:12:09 +03:00
parent c5a11f0c9f
commit 5f4a0c3bf1
7 changed files with 67 additions and 3 deletions

View file

@ -122,11 +122,13 @@ namespace Nif
mStringPalette.read(nif);
else if (nif->getVersion() >= NIFFile::NIFVersion::VER_BGS && nif->getBethVersion() >= 24)
{
uint16_t numAnimNotes = 1;
if (nif->getBethVersion() >= 29)
nif->read(numAnimNotes);
mAnimNotesList.resize(nif->get<uint16_t>());
else
mAnimNotesList.resize(1);
nif->skip(4 * numAnimNotes); // BSAnimNotes links
for (auto& notes : mAnimNotesList)
notes.read(nif);
}
}

View file

@ -56,6 +56,7 @@ namespace Nif
bool mPlayBackwards{ false };
NiControllerManagerPtr mManager;
NiStringPalettePtr mStringPalette;
BSAnimNotesList mAnimNotesList;
void read(NIFStream* nif) override;
void post(Reader& nif) override;

View file

@ -614,4 +614,31 @@ namespace Nif
nif->read(mSphere);
}
void BSAnimNote::read(NIFStream* nif)
{
mType = static_cast<Type>(nif->get<uint32_t>());
nif->read(mTime);
if (mType == Type::GrabIK)
{
nif->read(mArm);
}
else if (mType == Type::LookIK)
{
nif->read(mGain);
nif->read(mState);
}
}
void BSAnimNotes::read(NIFStream* nif)
{
mList.resize(nif->get<uint16_t>());
for (auto& note : mList)
note.read(nif);
}
void BSAnimNotes::post(Reader& nif)
{
postRecordList(nif, mList);
}
} // Namespace

View file

@ -449,5 +449,31 @@ namespace Nif
void read(NIFStream* nif) override;
};
struct BSAnimNote : public Record
{
enum class Type : uint32_t
{
Invalid = 0,
GrabIK = 1,
LookIK = 2,
};
Type mType;
float mTime;
uint32_t mArm;
float mGain;
uint32_t mState;
void read(NIFStream* nif) override;
};
struct BSAnimNotes : public Record
{
BSAnimNoteList mList;
void read(NIFStream* nif) override;
void post(Reader& nif) override;
};
}
#endif

View file

@ -212,6 +212,8 @@ namespace Nif
{ "NiTransformData", &construct<NiKeyframeData, RC_NiKeyframeData> },
// Bethesda
{ "BSAnimNote", &construct<BSAnimNote, RC_BSAnimNote> },
{ "BSAnimNotes", &construct<BSAnimNotes, RC_BSAnimNotes> },
{ "BSPackedAdditionalGeometryData",
&construct<NiAdditionalGeometryData, RC_BSPackedAdditionalGeometryData> },
{ "BSShaderTextureSet", &construct<BSShaderTextureSet, RC_BSShaderTextureSet> },

View file

@ -73,6 +73,8 @@ namespace Nif
RC_bhkSimpleShapePhantom,
RC_bhkSphereShape,
RC_bhkStiffSpringConstraint,
RC_BSAnimNote,
RC_BSAnimNotes,
RC_BSBehaviorGraphExtraData,
RC_BSBound,
RC_BSBoneLODExtraData,

View file

@ -165,6 +165,8 @@ namespace Nif
struct BSMultiBound;
struct BSMultiBoundData;
struct BSSkinBoneData;
struct BSAnimNote;
struct BSAnimNotes;
using NiAVObjectPtr = RecordPtrT<NiAVObject>;
using ExtraPtr = RecordPtrT<Extra>;
@ -231,6 +233,8 @@ namespace Nif
using NiControllerSequenceList = RecordListT<NiControllerSequence>;
using NiPSysModifierList = RecordListT<NiPSysModifier>;
using NiTriBasedGeomList = RecordListT<NiTriBasedGeom>;
using BSAnimNoteList = RecordListT<BSAnimNote>;
using BSAnimNotesList = RecordListT<BSAnimNotes>;
} // Namespace
#endif