#ifndef D_A_OBJ_ZRAMARK_H #define D_A_OBJ_ZRAMARK_H #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "d/actor/d_a_npc.h" #include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" class daNpc_Hoz_c; class _ZraMark_Hahen_c { public: ~_ZraMark_Hahen_c() {} _ZraMark_Hahen_c() { mpModel = NULL; setColor(0); } /* 80D4347C */ int create(cXyz const&, s8, s8, s8, s8); /* 80D434F8 */ BOOL loadModel(); /* 80D4357C */ void init(cXyz const&, s8, s8, s8); /* 80D43808 */ void calcSpeed(); /* 80D43864 */ void setMtx(); /* 80D438C8 */ void draw(); inline void setColor(const s8& i_color) { mColor = i_color; } s8 getColor() { return mColor; } void setPos(const cXyz& i_pos) { mPos = i_pos; } void setSpeed(const cXyz& i_speed) { mSpeed = i_speed; } void calcAngle() { mAngle += field_0x3aa; } void posMove() { mPos += mSpeed; } void fall() { calcAngle(); calcSpeed(); posMove(); } /* 0x000 */ J3DModel* mpModel; /* 0x004 */ dKy_tevstr_c mTevstr; /* 0x38C */ cXyz mPos; /* 0x398 */ cXyz mSpeed; /* 0x3A4 */ csXyz mAngle; /* 0x3AA */ csXyz field_0x3aa; /* 0x3B0 */ cXyz field_0x3b0; /* 0x3BC */ s16 field_0x3bc; /* 0x3C0 */ f32 field_0x3c0; /* 0x3C4 */ u8 field_0x3C4[0x3C8 - 0x3C4]; /* 0x3C8 */ s8 mColor; /* 0x3CC */ Z2SoundObjSimple mSound; }; class _ZraMark_Hahen_Mng_c { public: _ZraMark_Hahen_Mng_c() : field_0x2(0) {} /* 80D43968 */ int create(cXyz const&, s8, s8, s8, s8); /* 80D439F8 */ void calc(); /* 80D43A74 */ void draw(); s16 getTimer() { return mTimer; } void setTimer(s16 i_timer) { mTimer = i_timer; } void decTimer() { if (mTimer > 0) { mTimer--; } } /* 0x0 */ s16 mTimer; /* 0x2 */ u8 field_0x2; /* 0x4 */ _ZraMark_Hahen_c mHahen[14]; }; /** * @ingroup actors-objects * @class daObjZraMark_c * @brief Iza's River Ride Destructible Buoy * * @details * */ class daObjZraMark_c : public fopAc_ac_c { public: enum TYPE_e { TYPE_BRANCH_GREEN, TYPE_GREEN, TYPE_BRANCH_RED, TYPE_RED, }; /* 80D42678 */ int Create(); /* 80D4287C */ int CreateHeap(); /* 80D42A7C */ int Execute(); /* 80D42B0C */ int Draw(); /* 80D42C98 */ int Delete(); /* 80D42CE0 */ int getType(); /* 80D42D2C */ void setBaseMtx(); /* 80D42EE0 */ void col_init(); /* 80D42F5C */ void col_set(); /* 80D432C8 */ daNpc_Hoz_c* schHoz(); /* 80D43314 */ bool entryPointer(fopAc_ac_c*); /* 80D43370 */ void informBlast(); u8 getMarkNo() { return fopAcM_GetParam(this) & 0xff; } void initBlastFlag() { mBlastFlag = false; } void onBlastFlag() { mBlastFlag = true; } bool is_blasted() { return mBlastFlag == true; } bool is_branch_pat() { return mType == 0 || mType == 2; } int get_MarkType() { u8 type = fopAcM_GetParam(this) >> 0x10; if (type == 0xFF) { type = 0; } return type; } void _Disp_Vase() { _Material_On(0); _Material_On(2); } void _Vanish_Vase() { _Material_Off(0); _Material_Off(2); } void _Material_On(u16 i_jointNo) { mpModel->getModelData()->getMaterialNodePointer(i_jointNo)->getShape()->show(); } void _Material_Off(u16 i_jointNo) { mpModel->getModelData()->getMaterialNodePointer(i_jointNo)->getShape()->hide(); } BOOL checkHitAt(cCcD_Obj* i_hitobj) { if (is_blasted()) { return false; } if (get_MarkType() != 0) { return i_hitobj->ChkAtType(AT_TYPE_IRON_BALL | AT_TYPE_BOMB); } else { return i_hitobj->ChkAtType(AT_TYPE_BOMB); } } /* 0x0568 */ request_of_phase_process_class mPhase[1]; /* 0x0570 */ J3DModel* mpModel; /* 0x0574 */ Mtx field_0x574; /* 0x05A4 */ dCcD_Stts mCcStts; /* 0x05E0 */ dCcD_Cyl mCcCyl; /* 0x071C */ daNpcF_ActorMngr_c mActorMngr[2]; /* 0x072C */ u8 field_0x72c; /* 0x072D */ u8 mType; /* 0x072E */ u8 mBlastFlag; /* 0x0730 */ daNpc_Hoz_c* mpHoz; /* 0x0734 */ Z2SoundObjSimple mSound; /* 0x0754 */ _ZraMark_Hahen_Mng_c mHahenMngr; }; STATIC_ASSERT(sizeof(daObjZraMark_c) == 0x3e40); class daObjZraMark_Hio_Param_c { public: /* 0x00 */ f32 mMarkSize; /* 0x04 */ f32 mInteriorMarkSize; /* 0x08 */ f32 field_0x8; /* 0x0C */ f32 mMarkCollisionRadius; /* 0x10 */ f32 mMarkCollisionHeight; }; #endif /* D_A_OBJ_ZRAMARK_H */