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.
openmw-tes3mp/components/nif/base.hpp

74 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 "record.hpp"
#include "niffile.hpp"
#include "recordptr.hpp"
#include "nifstream.hpp"
#include "nifkey.hpp"
namespace Nif
{
// An extra data record. All the extra data connected to an object form a linked list.
struct Extra : public Record
{
std::string name;
ExtraPtr next; // Next extra data record in the list
void read(NIFStream *nif) override
{
if (nif->getVersion() >= NIFStream::generateVersion(10,0,1,0))
name = nif->getString();
else if (nif->getVersion() <= NIFStream::generateVersion(4,2,2,0))
{
next.read(nif);
nif->getUInt(); // Size of the record
}
}
void post(NIFFile *nif) override { next.post(nif); }
};
struct Controller : public Record
{
ControllerPtr next;
int flags;
float frequency, phase;
float timeStart, timeStop;
NamedPtr target;
void read(NIFStream *nif) override;
void post(NIFFile *nif) override;
};
/// Has name, extra-data and controller
struct Named : public Record
{
std::string name;
ExtraPtr extra;
ExtraList extralist;
ControllerPtr controller;
void read(NIFStream *nif) override
{
name = nif->getString();
if (nif->getVersion() < NIFStream::generateVersion(10,0,1,0))
extra.read(nif);
else
extralist.read(nif);
controller.read(nif);
}
void post(NIFFile *nif) override
{
extra.post(nif);
extralist.post(nif);
controller.post(nif);
}
};
using NiSequenceStreamHelper = Named;
} // Namespace
#endif