mirror of https://github.com/zeldaret/tp.git
254 lines
6.0 KiB
C++
254 lines
6.0 KiB
C++
#ifndef D_D_BG_PARTS
|
|
#define D_D_BG_PARTS
|
|
|
|
#include "f_op/f_op_actor.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
|
|
#include "JSystem/J3DGraphBase/J3DPacket.h"
|
|
#include "m_Do/m_Do_ext.h"
|
|
#include "d/d_bg_w.h"
|
|
|
|
class dBgp_c {
|
|
public:
|
|
class material_c {
|
|
public:
|
|
material_c() {}
|
|
|
|
void draw();
|
|
material_c* getNext() { return mpNext; }
|
|
material_c** getNext_p() { return &mpNext; }
|
|
|
|
void setNext(material_c* i_material) {
|
|
mpNext = i_material;
|
|
}
|
|
|
|
virtual void drawSimple() = 0;
|
|
virtual bool isSame(material_c*) { return false; }
|
|
|
|
virtual void addChild(material_c* i_material) {
|
|
UNUSED(i_material);
|
|
JUT_ASSERT(78, FALSE);
|
|
}
|
|
|
|
/* 0x4 */ material_c* mpNext;
|
|
};
|
|
|
|
class modelMaterial_c : public material_c {
|
|
public:
|
|
modelMaterial_c() {}
|
|
|
|
MtxPtr getMtx() {
|
|
return mpMtx;
|
|
}
|
|
|
|
J3DModelData* getModelData() {
|
|
return mpModelData;
|
|
}
|
|
|
|
modelMaterial_c* getChild() {
|
|
return mpChild;
|
|
}
|
|
|
|
J3DMaterial* getMaterial() {
|
|
return mpMaterial;
|
|
}
|
|
|
|
u16 getMaterialID() { return mMaterialID; }
|
|
|
|
void setChild(modelMaterial_c* i_child) {
|
|
mpChild = i_child;
|
|
}
|
|
|
|
void set(J3DModelData*, J3DMaterial*, Mtx);
|
|
|
|
virtual void drawSimple();
|
|
virtual bool isSame(material_c*);
|
|
virtual void addChild(material_c*);
|
|
|
|
/* 0x08 */ u16 mMaterialID;
|
|
/* 0x0C */ J3DModelData* mpModelData;
|
|
/* 0x10 */ J3DMaterial* mpMaterial;
|
|
/* 0x14 */ MtxPtr mpMtx;
|
|
/* 0x18 */ modelMaterial_c* mpChild;
|
|
};
|
|
|
|
class packet_c : public J3DPacket {
|
|
public:
|
|
packet_c();
|
|
~packet_c();
|
|
|
|
void draw();
|
|
s8 getRoomNo() { return mRoomNo; }
|
|
void setRoomNo(s8 i_roomNo) {
|
|
mRoomNo = i_roomNo;
|
|
}
|
|
void reset();
|
|
void entryMaterial(material_c*, u32);
|
|
void entryModel(modelMaterial_c*);
|
|
void entryShare(modelMaterial_c*);
|
|
|
|
static const int MATERIAL_SORT_LEVEL = 2;
|
|
|
|
/* 0x10 */ s8 mRoomNo;
|
|
/* 0x14 */ material_c* mpMaterials[64];
|
|
};
|
|
|
|
class model_c {
|
|
public:
|
|
model_c() {
|
|
mMaterial = NULL;
|
|
}
|
|
|
|
void create(J3DModelData*, Mtx);
|
|
void remove();
|
|
|
|
MtxPtr getBaseTRMtx() {
|
|
return mBaseTRMtx;
|
|
}
|
|
|
|
modelMaterial_c* getMaterial() {
|
|
return mMaterial;
|
|
}
|
|
|
|
/* 0x00 */ u16 mId;
|
|
/* 0x04 */ Mtx mBaseTRMtx;
|
|
/* 0x34 */ modelMaterial_c* mMaterial;
|
|
};
|
|
|
|
class share_c {
|
|
public:
|
|
share_c();
|
|
~share_c() {}
|
|
|
|
void set(u16);
|
|
void reset();
|
|
|
|
const char* getArcName();
|
|
int execute();
|
|
void draw();
|
|
void entry(packet_c*);
|
|
void cbNormal();
|
|
void cbConveyor();
|
|
|
|
u16 getId() { return mId; }
|
|
u16 getCount() { return mCount; }
|
|
bool isUsed() { return mStatus != -1; }
|
|
bool isDraw() { return mStatus == 0; }
|
|
|
|
void setCallback(void (share_c::*i_callback)()) {
|
|
mCallback = i_callback;
|
|
}
|
|
|
|
/* 0x00 */ s8 mStatus;
|
|
/* 0x01 */ u8 field_0x1;
|
|
/* 0x02 */ u16 mId;
|
|
/* 0x04 */ u16 mCount;
|
|
/* 0x08 */ J3DModelData* mModelData;
|
|
/* 0x0C */ mDoExt_btkAnm mBtk;
|
|
/* 0x24 */ mDoExt_brkAnm mBrk;
|
|
/* 0x3C */ modelMaterial_c* mMaterial;
|
|
/* 0x40 */ void (share_c::*mCallback)();
|
|
};
|
|
|
|
// made up names except for `unit_group_class`
|
|
struct unit_class;
|
|
struct unit_group_class;
|
|
|
|
struct stage_map_unit_class {
|
|
/* 0x0 */ int num;
|
|
/* 0x4 */ unit_class* entries;
|
|
};
|
|
|
|
struct unit_unk_data2_class {
|
|
/* 0x00 */ u8 field_0x0[3];
|
|
/* 0x03 */ u8 field_0x3;
|
|
/* 0x04 */ u8 field_0x4;
|
|
/* 0x05 */ u8 field_0x5;
|
|
/* 0x06 */ s16 angle;
|
|
/* 0x08 */ Vec pos;
|
|
/* 0x14 */ u8 field_0x14;
|
|
/* 0x15 */ u8 field_0x15;
|
|
};
|
|
|
|
struct unit_unk_data_class {
|
|
u16 field_0x0;
|
|
u16 field_0x2;
|
|
};
|
|
|
|
struct unit_class {
|
|
/* 0x0 */ int num;
|
|
/* 0x4 */ unit_group_class* groups;
|
|
/* 0x8 */ unit_unk_data_class* unk_0x8;
|
|
/* 0xC */ unit_unk_data2_class* unk_0xc;
|
|
};
|
|
|
|
struct unit_group_class {
|
|
/* 0x0 */ u8 unk_0x0;
|
|
/* 0x1 */ u8 switchNo;
|
|
/* 0x2 */ u16 unk_0x2;
|
|
};
|
|
|
|
dBgp_c();
|
|
~dBgp_c();
|
|
|
|
void create(s8, void*);
|
|
int remove();
|
|
BOOL isSwitch(unit_group_class*);
|
|
void registBg(fopAc_ac_c*);
|
|
void releaseBg();
|
|
int registBg(int, fopAc_ac_c*);
|
|
void releaseBg(int);
|
|
int execute(bool);
|
|
void draw(fopAc_ac_c*);
|
|
|
|
void entryPacket() {
|
|
dComIfGd_getOpaListBG()->entryImm(&mPacket, 0);
|
|
}
|
|
|
|
void entryModel(model_c* i_model) {
|
|
modelMaterial_c* var_30 = i_model->getMaterial();
|
|
for (int i = var_30->getModelData()->getMaterialNum() - 1; i >= 0; i--) {
|
|
mPacket.entryModel(var_30);
|
|
var_30++;
|
|
}
|
|
}
|
|
|
|
static void setPointer(void* i_pointer);
|
|
|
|
static u16 getArg0(u8* param_0) {
|
|
return ((param_0[1] & 0xF) << 8) | (param_0[2]);
|
|
}
|
|
|
|
static u16 getId(u8* param_0) {
|
|
return (param_0[0] << 4) | ((param_0[1] >> 4) & 0xF);
|
|
}
|
|
|
|
static const char* getArcName(u8* param_0) {
|
|
return getArcName(getId(param_0), getArg0(param_0));
|
|
}
|
|
|
|
static const char* getArcName(u16, u16);
|
|
|
|
static void createShare();
|
|
static void removeShare();
|
|
static void addShare(u16);
|
|
static void cutShare(u16);
|
|
static bool executeShare();
|
|
static void drawShare();
|
|
static void entryShare(packet_c*);
|
|
|
|
static JKRSolidHeap* mShareHeap;
|
|
static share_c* mShare;
|
|
|
|
/* 0x000 */ void* mPointer;
|
|
/* 0x004 */ char mArcName[8];
|
|
/* 0x00C */ JKRSolidHeap* mHeap;
|
|
/* 0x010 */ JKRSolidHeap* mHeap2;
|
|
/* 0x014 */ dBgW* mBgWork;
|
|
/* 0x018 */ model_c* mModel;
|
|
/* 0x01C */ packet_c mPacket;
|
|
/* 0x130 */ u16 field_0x130;
|
|
};
|
|
|
|
#endif /* D_D_BG_PARTS */
|