mirror of https://github.com/OpenMW/openmw.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.7 KiB
C++
69 lines
1.7 KiB
C++
/// This file holds the main classes of NIF Records used by everything else.
|
|
#ifndef OPENMW_COMPONENTS_NIF_BASE_HPP
|
|
#define OPENMW_COMPONENTS_NIF_BASE_HPP
|
|
|
|
#include "recordptr.hpp"
|
|
|
|
namespace Nif
|
|
{
|
|
struct File;
|
|
struct Record;
|
|
struct Stream;
|
|
|
|
// An extra data record. All the extra data connected to an object form a linked list.
|
|
struct Extra : public Record
|
|
{
|
|
std::string mName;
|
|
ExtraPtr mNext; // Next extra data record in the list
|
|
uint32_t mRecordSize{ 0u };
|
|
|
|
void read(NIFStream* nif) override;
|
|
void post(Reader& nif) override { mNext.post(nif); }
|
|
};
|
|
|
|
struct NiTimeController : public Record
|
|
{
|
|
enum Flags
|
|
{
|
|
Flag_Active = 0x8
|
|
};
|
|
|
|
enum ExtrapolationMode
|
|
{
|
|
Cycle = 0,
|
|
Reverse = 2,
|
|
Constant = 4,
|
|
Mask = 6
|
|
};
|
|
|
|
NiTimeControllerPtr mNext;
|
|
uint16_t mFlags;
|
|
float mFrequency, mPhase;
|
|
float mTimeStart, mTimeStop;
|
|
NiObjectNETPtr mTarget;
|
|
|
|
void read(NIFStream* nif) override;
|
|
void post(Reader& nif) override;
|
|
|
|
bool isActive() const { return mFlags & Flag_Active; }
|
|
ExtrapolationMode extrapolationMode() const { return static_cast<ExtrapolationMode>(mFlags & Mask); }
|
|
};
|
|
|
|
/// Abstract object that has a name, extra data and controllers
|
|
struct NiObjectNET : public Record
|
|
{
|
|
std::string mName;
|
|
ExtraPtr mExtra;
|
|
ExtraList mExtraList;
|
|
NiTimeControllerPtr mController;
|
|
|
|
void read(NIFStream* nif) override;
|
|
void post(Reader& nif) override;
|
|
|
|
// Collect extra records attached to the object
|
|
ExtraList getExtraList() const;
|
|
};
|
|
|
|
}
|
|
#endif
|