2016-01-19 05:32:34 +00:00
|
|
|
#ifndef _DNAMP1_FRME_HPP_
|
|
|
|
#define _DNAMP1_FRME_HPP_
|
|
|
|
|
|
|
|
#include "../DNACommon/DNACommon.hpp"
|
|
|
|
#include "DNAMP1.hpp"
|
2016-03-04 23:04:53 +00:00
|
|
|
#include <athena/FileWriter.hpp>
|
2016-01-19 05:32:34 +00:00
|
|
|
|
2016-02-13 09:02:47 +00:00
|
|
|
namespace DataSpec
|
2016-01-19 05:32:34 +00:00
|
|
|
{
|
|
|
|
namespace DNAMP1
|
|
|
|
{
|
|
|
|
struct FRME : BigDNA
|
|
|
|
{
|
|
|
|
DECL_EXPLICIT_DNA
|
|
|
|
Value<atUint32> version;
|
|
|
|
Value<atUint32> unk1;
|
|
|
|
Value<atUint32> modelCount; // Matches MODL widgets
|
|
|
|
Value<atUint32> unk3;
|
|
|
|
Value<atUint32> widgetCount;
|
|
|
|
|
|
|
|
struct Widget : BigDNA
|
|
|
|
{
|
|
|
|
DECL_EXPLICIT_DNA
|
|
|
|
FRME* owner;
|
|
|
|
DNAFourCC type;
|
|
|
|
struct WidgetHeader : BigDNA
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
String<-1> name;
|
|
|
|
String<-1> parent;
|
2016-03-16 03:37:51 +00:00
|
|
|
Value<bool> useAnimController;
|
2016-03-15 23:23:45 +00:00
|
|
|
Value<bool> defaultVisible;
|
|
|
|
Value<bool> defaultActive;
|
2016-03-17 02:18:01 +00:00
|
|
|
Value<bool> cullFaces;
|
2016-01-19 05:32:34 +00:00
|
|
|
Value<atVec4f> color;
|
|
|
|
Value<atUint32> modelDrawFlags;
|
|
|
|
} header;
|
|
|
|
|
|
|
|
struct IWidgetInfo : BigDNA
|
|
|
|
{
|
|
|
|
Delete _d;
|
2016-03-04 23:04:53 +00:00
|
|
|
virtual void read(athena::io::IStreamReader&) {}
|
|
|
|
void write(athena::io::IStreamWriter&) const {}
|
2016-01-19 05:32:34 +00:00
|
|
|
size_t binarySize(size_t __isz) const { return __isz; }
|
|
|
|
};
|
|
|
|
|
|
|
|
std::unique_ptr<IWidgetInfo> widgetInfo;
|
2016-03-14 00:58:19 +00:00
|
|
|
Value<bool> isWorker;
|
|
|
|
Value<atUint16> workerId;
|
2016-01-19 05:32:34 +00:00
|
|
|
Value<atVec3f> origin;
|
|
|
|
Value<atVec3f> basis[3];
|
2016-01-19 09:45:30 +00:00
|
|
|
Value<atVec3f> rotationCenter;
|
2016-03-14 00:58:19 +00:00
|
|
|
Value<atInt16> msgCount;
|
|
|
|
Value<atInt16> funcDefCount;
|
|
|
|
Value<atInt16> animControllerCount;
|
2016-01-19 05:32:34 +00:00
|
|
|
|
|
|
|
struct BWIGInfo : IWidgetInfo
|
|
|
|
{ Delete _d; };
|
|
|
|
|
|
|
|
struct HWIGInfo : IWidgetInfo
|
|
|
|
{ Delete _d; };
|
|
|
|
|
|
|
|
struct CAMRInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_EXPLICIT_DNA
|
|
|
|
enum class ProjectionType
|
|
|
|
{
|
|
|
|
Perspective,
|
|
|
|
Orthographic
|
|
|
|
};
|
|
|
|
|
|
|
|
Value<ProjectionType> projectionType;
|
|
|
|
struct IProjection : BigDNA
|
|
|
|
{
|
|
|
|
Delete _d;
|
|
|
|
const ProjectionType type;
|
|
|
|
IProjection(ProjectionType t) : type(t) {}
|
|
|
|
};
|
|
|
|
|
|
|
|
struct PerspectiveProjection : IProjection
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
PerspectiveProjection() : IProjection(ProjectionType::Perspective) {}
|
|
|
|
Value<float> fov;
|
|
|
|
Value<float> aspect;
|
2016-01-19 12:35:55 +00:00
|
|
|
Value<float> znear;
|
|
|
|
Value<float> zfar;
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct OrthographicProjection : IProjection
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
OrthographicProjection() : IProjection(ProjectionType::Orthographic) {}
|
|
|
|
Value<float> left;
|
|
|
|
Value<float> right;
|
|
|
|
Value<float> top;
|
|
|
|
Value<float> bottom;
|
2016-01-19 12:35:55 +00:00
|
|
|
Value<float> znear;
|
|
|
|
Value<float> zfar;
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
std::unique_ptr<IProjection> projection;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct MODLInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
UniqueID32 model;
|
2016-02-02 04:34:46 +00:00
|
|
|
enum class BlendMode
|
|
|
|
{
|
|
|
|
Unknown0,
|
|
|
|
Unknown1,
|
|
|
|
Unknown2,
|
|
|
|
Additive
|
|
|
|
};
|
|
|
|
|
2016-01-19 05:32:34 +00:00
|
|
|
Value<atUint32> blendMode;
|
2016-03-17 02:18:01 +00:00
|
|
|
Value<atUint32> lightMask;
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct LITEInfo : IWidgetInfo
|
|
|
|
{
|
2016-03-16 20:49:35 +00:00
|
|
|
DECL_EXPLICIT_DNA
|
|
|
|
enum class ELightType : atUint32
|
|
|
|
{
|
|
|
|
Spot = 0,
|
|
|
|
Point = 1,
|
|
|
|
Directional = 2,
|
|
|
|
LocalAmbient = 3,
|
|
|
|
Custom = 4,
|
|
|
|
};
|
|
|
|
|
|
|
|
Value<ELightType> type;
|
|
|
|
Value<float> distC;
|
|
|
|
Value<float> distL;
|
|
|
|
Value<float> distQ;
|
|
|
|
Value<float> angC;
|
|
|
|
Value<float> angL;
|
|
|
|
Value<float> angQ;
|
|
|
|
Value<atUint32> loadedIdx;
|
|
|
|
Value<float> cutoff; /* Spot only */
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct ENRGInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
UniqueID32 texture;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct METRInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
Value<atUint16> unk1;
|
|
|
|
Value<atUint32> value1;
|
|
|
|
Value<atUint32> value2;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct GRUPInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
2016-03-17 22:19:25 +00:00
|
|
|
Value<atInt16> defaultWorker;
|
2016-01-19 05:32:34 +00:00
|
|
|
Value<bool> unk3;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct TBGPInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
Value<atUint16> unk1;
|
|
|
|
Value<atUint16> unk2;
|
|
|
|
Value<atUint32> unkEnum;
|
|
|
|
Value<atUint16> unk3;
|
|
|
|
Value<atUint16> un4;
|
|
|
|
Value<bool> unk5;
|
|
|
|
Value<bool> unk6;
|
|
|
|
Value<float> unkFloat1;
|
|
|
|
Value<float> unkFloat2;
|
|
|
|
Value<bool> unk7;
|
|
|
|
Value<float> unkFloat3;
|
|
|
|
Value<atUint16> unk8;
|
|
|
|
Value<atUint16> unk9;
|
|
|
|
Value<atUint16> unk10;
|
|
|
|
Value<atUint16> unk11;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SLGPInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
Value<float> min;
|
|
|
|
Value<float> max;
|
2016-03-17 22:19:25 +00:00
|
|
|
Value<float> cur;
|
|
|
|
Value<float> increment;
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct TXPNInfo : IWidgetInfo
|
|
|
|
{
|
2016-03-16 03:37:51 +00:00
|
|
|
enum class Justification : atUint32
|
2016-03-12 04:58:56 +00:00
|
|
|
{
|
|
|
|
};
|
|
|
|
|
2016-03-16 03:37:51 +00:00
|
|
|
enum class VerticalJustification : atUint32
|
2016-03-12 04:58:56 +00:00
|
|
|
{
|
|
|
|
};
|
|
|
|
|
2016-01-19 05:32:34 +00:00
|
|
|
DECL_EXPLICIT_DNA
|
|
|
|
atUint32 version = 0;
|
|
|
|
TXPNInfo() {}
|
|
|
|
TXPNInfo(atUint32 version)
|
|
|
|
: version(version)
|
|
|
|
{}
|
2016-03-17 22:19:25 +00:00
|
|
|
Value<float> xDim;
|
|
|
|
Value<float> zDim;
|
|
|
|
Value<atVec3f> scaleCenter;
|
2016-01-19 05:32:34 +00:00
|
|
|
UniqueID32 font;
|
|
|
|
Value<bool> unk1;
|
|
|
|
Value<bool> unk2;
|
2016-03-12 04:58:56 +00:00
|
|
|
Value<Justification> justification;
|
|
|
|
Value<VerticalJustification> verticalJustification;
|
2016-01-19 05:32:34 +00:00
|
|
|
Value<atVec4f> fillColor;
|
|
|
|
Value<atVec4f> outlineColor;
|
|
|
|
Value<atVec2f> pointScale;
|
|
|
|
/* The following is only found in V1 */
|
|
|
|
UniqueID32 jpnFont;
|
2016-01-19 09:45:30 +00:00
|
|
|
Value<atInt32> jpnPointScale[2];
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct IMGPInfo : IWidgetInfo
|
|
|
|
{
|
|
|
|
DECL_DNA
|
|
|
|
UniqueID32 texture;
|
|
|
|
Value<atUint32> unk1;
|
|
|
|
Value<atUint32> unk2;
|
|
|
|
Value<atUint32> quadCoordCount;
|
|
|
|
Vector<atVec3f, DNA_COUNT(quadCoordCount)> quadCoords;
|
|
|
|
Value<atUint32> uvCoordCount;
|
|
|
|
Vector<atVec2f, DNA_COUNT(uvCoordCount)> uvCoords;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
Vector<Widget, DNA_COUNT(widgetCount)> widgets;
|
|
|
|
static bool Extract(const SpecBase& dataSpec,
|
|
|
|
PAKEntryReadStream& rs,
|
2016-03-04 23:04:53 +00:00
|
|
|
const hecl::ProjectPath& outPath,
|
2016-01-19 05:32:34 +00:00
|
|
|
PAKRouter<PAKBridge>& pakRouter,
|
|
|
|
const PAK::Entry& entry,
|
|
|
|
bool force,
|
2016-03-04 23:04:53 +00:00
|
|
|
std::function<void(const hecl::SystemChar*)> fileChanged);
|
2016-01-19 05:32:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // _DNAMP1_FRME_HPP_
|