tp/include/JSystem/JStudio/fvb.h

164 lines
3.7 KiB
C++

#ifndef JSTUDIO_FVB_H
#define JSTUDIO_FVB_H
#include "JSystem/JGadget/binary.h"
#include "JSystem/JGadget/linklist.h"
#include "JSystem/JStudio/functionvalue.h"
#include "JSystem/JStudio/object-id.h"
#include "global.h"
using namespace JGadget::binary;
namespace JStudio {
namespace fvb {
namespace data {
const int PARAGRAPH_DATA = 1;
typedef enum TEComposite {
NONE = 0,
RAW = 1,
IDX = 2,
PARAM = 3,
ADD = 4,
SUB = 5,
MUL = 6,
DIV = 7,
};
typedef const void* (*CompositeOperation)(TFunctionValue_composite::TData);
struct TBlock {
/* 0x0 */ u32 _0;
/* 0x4 */ u16 _4;
/* 0x6 */ u16 id_size;
};
struct TParse_TBlock : public TParseData_aligned<4> {
TParse_TBlock(const void* content) : TParseData_aligned<4>(content) {}
const TBlock* get() const { return (TBlock*)getRaw(); }
u16 get_IDSize() const { return get()->id_size; }
const void* getBlockEnd_() const { return (u8*)getRaw() + sizeof(TBlock); }
const void* get_ID() const {
const void* ret = 0;
if (get_IDSize())
ret = getBlockEnd_();
return ret;
}
};
struct TParse_TParagraph {
struct TData {
u32 u32Size;
u32 u32Type;
const void* pContent;
};
};
} // namespace data
struct TControl;
struct TObject : object::TObject_ID {
public:
TObject(const data::TParse_TBlock& block);
TObject(void const* id, u32 id_size, TFunctionValue* value);
explicit TObject(const data::TParse_TBlock& block, TFunctionValue* value)
: TObject_ID(block.get_ID(), block.get_IDSize()) {
JUT_ASSERT(pfv_ != NULL);
pfv_ = value;
}
virtual ~TObject();
virtual void prepare_data_(const data::TParse_TParagraph::TData& data, TControl* control) = 0;
void prepare(const data::TParse_TBlock& block, TControl* control);
private:
/* 0x0c */ JGadget::TLinkListNode mNode;
///* 0x10 */ void* _10;
/* 0x14 */ TFunctionValue* pfv_;
};
struct TControl {
TControl();
virtual ~TControl() = 0;
u32 _4;
JGadget::TLinkList<TObject, -12> ocObject_;
};
struct TObject_composite : TObject, TFunctionValue_composite {
TObject_composite(const data::TParse_TBlock& block);
virtual void prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control);
TFunctionValue_composite fnValue;
};
struct TObject_constant : TObject {
TObject_constant(const data::TParse_TBlock& block);
void prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control);
TFunctionValue_constant fnValue;
};
struct TObject_transition : TObject {
TObject_transition(const data::TParse_TBlock& block);
void prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control);
TFunctionValue_transition fnValue;
};
struct TObject_list : TObject {
struct ListData {
f32 _0;
u32 _4;
f32 _8[0];
};
TObject_list(const data::TParse_TBlock& block);
void prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control);
TFunctionValue_list fnValue;
};
struct TObject_list_parameter : TObject {
struct ListData {
u32 _0;
f32 _4[0];
};
TObject_list_parameter(const data::TParse_TBlock& block);
void prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control);
TFunctionValue_list_parameter fnValue;
};
struct TObject_hermite : TObject {
struct ListData {
u32 _0; // u : 28, uSize : 4
f32 _4[0];
};
TObject_hermite(const data::TParse_TBlock& block);
void prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control);
TFunctionValue_hermite fnValue;
};
} // namespace fvb
} // namespace JStudio
#endif // JSTUDIO_FVB_H