mirror of https://github.com/zeldaret/tp.git
172 lines
4.6 KiB
C++
172 lines
4.6 KiB
C++
#ifndef D_A_OBJ_FLAG_H
|
|
#define D_A_OBJ_FLAG_H
|
|
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/actor/d_a_set_bgobj.h"
|
|
|
|
static int createSolidHeap(fopAc_ac_c*);
|
|
static int nodeCallBack(J3DJoint*, int);
|
|
|
|
class FlagJoint_c {
|
|
public:
|
|
/* 80BEC3BC */ ~FlagJoint_c();
|
|
/* 80BEC4E0 */ FlagJoint_c();
|
|
|
|
csXyz mJoint1;
|
|
csXyz mJoint2;
|
|
csXyz mJoint3;
|
|
s16 mRv;
|
|
};
|
|
|
|
/**
|
|
* @ingroup actors-objects
|
|
* @class daObjFlag_c
|
|
* @brief Flag 1
|
|
*
|
|
* @details
|
|
*
|
|
*/
|
|
class daObjFlag_c : public fopAc_ac_c {
|
|
private:
|
|
/* 0x568 */ J3DModel* mpModel1;
|
|
/* 0x56c */ J3DModel* mpModel2;
|
|
/* 0x570 */ request_of_phase_process_class mPhase;
|
|
/* 0x578 */ request_of_phase_process_class mPhase2;
|
|
/* 0x580 */ FlagJoint_c mFlagJoints[4];
|
|
/* 0x5d0 */ cXyz mPos;
|
|
/* 0x5dc */ f32 field_0x5dc;
|
|
/* 0x5e0 */ s16 field_0x5e0;
|
|
/* 0x5e2 */ s16 field_0x5e2;
|
|
/* 0x5e4 */ s16 field_0x5e4;
|
|
/* 0x5e6 */ s16 field_0x5e6;
|
|
/* 0x5e8 */ s16 field_0x5e8;
|
|
/* 0x5ea */ u8 field_0x568[0x5ec - 0x5ea];
|
|
|
|
public:
|
|
/* 80BEB778 */ void create_init();
|
|
/* 80BEB8F0 */ void initBaseMtx();
|
|
/* 80BEB984 */ void getJointAngle(csXyz*, int);
|
|
/* 80BEB9AC */ void calcJointAngle();
|
|
/* 80BEBC58 */ void calcAngleSwingZ(FlagJoint_c*, f32);
|
|
/* 80BEBDAC */ void calcAngleSwingX(FlagJoint_c*, f32);
|
|
/* 80BEBE64 */ f32 getSwingY(f32);
|
|
|
|
~daObjFlag_c() {
|
|
dComIfG_resDelete(&this->mPhase, "FlagObj");
|
|
dComIfG_resDelete(&this->mPhase2, daSetBgObj_c::getArcName(this));
|
|
}
|
|
|
|
int create() {
|
|
fopAcM_SetupActor(this, daObjFlag_c);
|
|
|
|
int phase_state = dComIfG_resLoad(&mPhase, "FlagObj");
|
|
if (phase_state != cPhs_COMPLEATE_e) {
|
|
return phase_state;
|
|
}
|
|
|
|
phase_state = dComIfG_resLoad(&mPhase2, daSetBgObj_c::getArcName(this));
|
|
if(phase_state == cPhs_COMPLEATE_e) {
|
|
if(!fopAcM_entrySolidHeap(this, createSolidHeap, 0x4000)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
create_init();
|
|
}
|
|
|
|
return phase_state;
|
|
}
|
|
|
|
int execute() {
|
|
if (mpModel1 == NULL) {
|
|
return 1;
|
|
}
|
|
|
|
calcJointAngle();
|
|
return 1;
|
|
}
|
|
|
|
int draw() {
|
|
g_env_light.settingTevStruct(0x10, ¤t.pos, &tevStr);
|
|
dComIfGd_setListBG();
|
|
g_env_light.setLightTevColorType_MAJI(mpModel2, &tevStr);
|
|
mDoExt_modelUpdateDL(mpModel2);
|
|
|
|
if(mpModel1 != NULL) {
|
|
g_env_light.setLightTevColorType_MAJI(mpModel1, &tevStr);
|
|
mDoExt_modelUpdateDL(mpModel1);
|
|
}
|
|
|
|
dComIfGd_setList();
|
|
|
|
return 1;
|
|
}
|
|
|
|
int createHeap() {
|
|
bool tmp = 0;
|
|
s8 angle = (u8)shape_angle.x;
|
|
if(angle <= -1 || angle > 99) {
|
|
tmp = false;
|
|
}
|
|
else {
|
|
tmp = true;
|
|
|
|
char resName[12];
|
|
sprintf(resName, "flag%02d.bmd");
|
|
|
|
shape_angle.setall(0);
|
|
current.angle.setall(0);
|
|
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("FlagObj", resName);
|
|
mpModel1 = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
|
|
|
|
for(u8 i = 0; i < 5; i += 1) {
|
|
J3DJoint* nodePtr = (J3DJoint*)((u64)mpModel1->getModelData()->getJointNodePointer(i));
|
|
if(nodePtr != NULL) {
|
|
nodePtr->setCallBack(nodeCallBack);
|
|
mpModel1->setUserArea((u64)this);
|
|
}
|
|
}
|
|
}
|
|
|
|
mpModel2 = mDoExt_J3DModel__create((J3DModelData *)dComIfG_getObjectRes(daSetBgObj_c::getArcName(this), "model0.bmd"), 0x80000, 0x11000084);
|
|
if(mpModel2 == NULL && tmp && mpModel1 == NULL) {
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
struct M_attrs {
|
|
/* 0x00 */ f32 field_0x00;
|
|
/* 0x04 */ f32 field_0x04;
|
|
/* 0x08 */ f32 field_0x08;
|
|
/* 0x0c */ s16 field_0x0c;
|
|
/* 0x0e */ s16 field_0x0e;
|
|
/* 0x10 */ s16 fielx_0x10;
|
|
/* 0x12 */ s16 fielx_0x12;
|
|
/* 0x14 */ s16 field_0x14;
|
|
/* 0x16 */ s16 field_0x16;
|
|
/* 0x18 */ s16 field_0x18;
|
|
/* 0x1a */ s16 field_0x1a;
|
|
/* 0x1c */ s16 field_0x1c;
|
|
/* 0x1e */ s16 field_0x1e;
|
|
/* 0x20 */ s16 field_0x20;
|
|
/* 0x22 */ s16 field_0x22;
|
|
/* 0x24 */ u8 field_0x24;
|
|
/* 0x25 */ u8 field_0x25;
|
|
/* 0x26 */ u8 field_0x26;
|
|
/* 0x28 */ f32 field_0x28;
|
|
/* 0x2c */ f32 field_0x2c;
|
|
/* 0x30 */ f32 field_0x30;
|
|
};
|
|
|
|
static M_attrs const M_attr;
|
|
static M_attrs const& attr() { return M_attr; }
|
|
};
|
|
|
|
STATIC_ASSERT(sizeof(daObjFlag_c) == 0x5ec);
|
|
|
|
|
|
#endif /* D_A_OBJ_FLAG_H */
|