1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-10 12:39:53 +00:00
OpenMW/components/nif/base.hpp

67 lines
1.6 KiB
C++
Raw Normal View History

2022-09-22 21:26:05 +03:00
/// 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
{
2022-09-22 21:26:05 +03:00
struct File;
struct Record;
struct Stream;
2022-07-21 15:51:34 +04:00
2022-09-22 21:26:05 +03:00
// 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
unsigned int recordSize{ 0u };
2022-09-22 21:26:05 +03:00
void read(NIFStream* nif) override;
void post(Reader& nif) override { next.post(nif); }
2022-06-22 00:43:16 +03:00
};
2022-09-22 21:26:05 +03:00
struct Controller : public Record
2022-06-22 00:43:16 +03:00
{
2022-09-22 21:26:05 +03:00
enum Flags
{
Flag_Active = 0x8
};
2022-06-22 00:43:16 +03:00
2022-09-22 21:26:05 +03:00
enum ExtrapolationMode
{
Cycle = 0,
Reverse = 2,
Constant = 4,
Mask = 6
};
2022-09-22 21:26:05 +03:00
ControllerPtr next;
int flags;
float frequency, phase;
float timeStart, timeStop;
NamedPtr target;
2022-06-22 00:43:16 +03:00
2022-09-22 21:26:05 +03:00
void read(NIFStream* nif) override;
void post(Reader& nif) override;
2022-09-22 21:26:05 +03:00
bool isActive() const { return flags & Flag_Active; }
ExtrapolationMode extrapolationMode() const { return static_cast<ExtrapolationMode>(flags & Mask); }
};
2022-09-22 21:26:05 +03:00
/// Has name, extra-data and controller
struct Named : public Record
{
std::string name;
ExtraPtr extra;
ExtraList extralist;
ControllerPtr controller;
void read(NIFStream* nif) override;
void post(Reader& nif) override;
2022-09-22 21:26:05 +03:00
};
using NiSequenceStreamHelper = Named;
} // Namespace
#endif