mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-01 01:39:03 -04:00
171 lines
4.7 KiB
C++
171 lines
4.7 KiB
C++
#ifndef D_A_OBJ_HHA_H
|
|
#define D_A_OBJ_HHA_H
|
|
|
|
#include "d/d_bg_w.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_particle.h"
|
|
#include "f_op/f_op_actor.h"
|
|
|
|
class daObjHha_c;
|
|
|
|
class daObjHhaPart_c {
|
|
public:
|
|
typedef void(daObjHhaPart_c::*daObjHhaPartCallBack)(daObjHha_c*);
|
|
public:
|
|
void draw(daObjHha_c* arg) { if(mCbDraw) (this->*mCbDraw)(arg); }
|
|
void execute(daObjHha_c* arg) { if(mCbExec) (this->*mCbExec)(arg); }
|
|
void setExeProc(daObjHhaPartCallBack newCb) { mCbExec = newCb; }
|
|
void start_move() { setExeProc(&daObjHhaPart_c::exe_move);}
|
|
|
|
void init_data(float, float, u16, u8, u8);
|
|
BOOL set_mdl_area(const char*, int);
|
|
BOOL set_bgw(const char*, int);
|
|
void init_mtx(cXyz, csXyz, cXyz);
|
|
void exe_normal(daObjHha_c*);
|
|
void exe_move(daObjHha_c*);
|
|
void draw_normal(daObjHha_c*);
|
|
public:
|
|
/* 0x00 */ J3DModel* mpModel;
|
|
/* 0x04 */ dBgW* mpBgw;
|
|
/* 0x08 */ cXyz mPos; // Position offset from current.pos
|
|
/* 0x14 */ cXyz mPosTarget;
|
|
/* 0x20 */ cXyz mPosDeltaDir;
|
|
/* 0x2C */ float mDeltaY;
|
|
/* 0x30 */ u8 mPartIdx;
|
|
/* 0x31 */ u8 mbMid;
|
|
/* 0x34 */ daObjHhaPartCallBack mCbExec;
|
|
/* 0x40 */ daObjHhaPartCallBack mCbDraw;
|
|
|
|
}; // Size : 0x4C
|
|
|
|
class daObjHhaSplash_c {
|
|
public:
|
|
daObjHhaSplash_c() {}
|
|
~daObjHhaSplash_c() {}
|
|
cXyz get_base_pos() { return mBasePos; };
|
|
cXyz get_pos() { return mPos; };
|
|
|
|
f32 get_pos_y() { return mPos.y; }
|
|
void set_pos(cXyz& pos) { mPos.set(pos); }
|
|
void set_pos_y(float y) { mPos.y = y; }
|
|
bool chk_stop() { return mbIsActive == false; }
|
|
|
|
void delete_s() {
|
|
if(mSplashCb.getEmitter() != NULL){
|
|
mSplashCb.remove();
|
|
mbIsActive = false;
|
|
}
|
|
}
|
|
|
|
void play_particle() {
|
|
JPABaseEmitter* pSplashEmitter = mSplashCb.getEmitter();
|
|
if(pSplashEmitter != NULL){
|
|
pSplashEmitter->playCreateParticle();
|
|
mbIsActive = true;
|
|
}
|
|
}
|
|
|
|
void stop_particle() {
|
|
JPABaseEmitter* pSplashEmitter = mSplashCb.getEmitter();
|
|
if(pSplashEmitter != NULL){
|
|
pSplashEmitter->stopCreateParticle();
|
|
mbIsActive = false;
|
|
}
|
|
}
|
|
|
|
void create_s(u16, cXyz*, float, float, csXyz*);
|
|
|
|
public:
|
|
/* 0x00 */ dPa_followEcallBack mSplashCb;
|
|
/* 0x14 */ cXyz mBasePos;
|
|
/* 0x20 */ cXyz mPos;
|
|
/* 0x2C */ csXyz mAngle;
|
|
/* 0x32 */ bool mbIsActive;
|
|
|
|
}; // Size : 0x34
|
|
|
|
class daObjHhaYgush_c {
|
|
public:
|
|
void anm_play(cXyz& pos) {
|
|
set_pos(pos);
|
|
mBtk.play();
|
|
mBck.play();
|
|
init_mtx();
|
|
}
|
|
BOOL check_draw() { return mbVisible; }
|
|
void disp_off() { mbVisible = false; }
|
|
void disp_on() { mbVisible = true; }
|
|
cXyz get_base_pos() { return mBasePos; }
|
|
void set_pos(cXyz newpos) { mPos = newpos; }
|
|
|
|
BOOL create_area(const char*);
|
|
void init_data(cXyz*, f32, csXyz*, cXyz*, dKy_tevstr_c*, u8);
|
|
void init_mtx();
|
|
void draw();
|
|
|
|
public:
|
|
/* 0x000 */ J3DModel* M_mdl;
|
|
/* 0x004 */ mDoExt_btkAnm mBtk;
|
|
/* 0x018 */ mDoExt_bckAnm mBck;
|
|
/* 0x028 */ dKy_tevstr_c mTev;
|
|
/* 0x0D8 */ cXyz mBasePos;
|
|
/* 0x0E4 */ cXyz mPos;
|
|
/* 0x0F0 */ cXyz mScale;
|
|
/* 0x0FC */ csXyz mRot;
|
|
/* 0x102 */ u8 mbVisible;
|
|
|
|
}; // Size : 0x104
|
|
|
|
class daObjHha_c : public fopAc_ac_c {
|
|
public:
|
|
inline BOOL check_sw(); // weak but not inlined
|
|
|
|
static int solidHeapCB(fopAc_ac_c*);
|
|
BOOL create_heap();
|
|
cPhs_State _create();
|
|
bool _delete();
|
|
void set_tex(float, float, int);
|
|
void init_mtx();
|
|
void init_co();
|
|
float get_water_h();
|
|
void set_splash_bottom_h();
|
|
void set_splash_bottom_r();
|
|
void set_splash_bottom_stop_r();
|
|
void water_manager();
|
|
void part_manager();
|
|
void ygush_manager();
|
|
bool _execute();
|
|
bool _draw();
|
|
|
|
public:
|
|
static const dCcD_SrcCyl M_cyl_data;
|
|
static const dCcD_SrcSph M_sph_data;
|
|
static const char M_arcname[4];
|
|
enum State_t {State_OPEN = 0, State_SWITCHING = 1, State_CLOSED = 2};
|
|
|
|
/* 0x290 */ J3DModel* mpModel;
|
|
/* 0x294 */ mDoExt_btkAnm mBtkA[2];
|
|
/* 0x2BC */ request_of_phase_process_class mPhs;
|
|
/* 0x2C4 */ dCcD_Stts mCylStts;
|
|
/* 0x300 */ dCcD_Cyl mCyl;
|
|
/* 0x430 */ bool mHitboxActive;
|
|
/* 0x434 */ dCcD_Stts mSphStts;
|
|
/* 0x470 */ dCcD_Sph mSph;
|
|
/* 0x59C */ daObjHhaYgush_c mYgush;
|
|
/* 0x6A0 */ daObjHhaPart_c mPartA[2];
|
|
/* 0x738 */ daObjHhaSplash_c mSplashA[2];
|
|
/* 0x7A0 */ cXyz mPosOffset;
|
|
/* 0x7AC */ u32 mSwitchNo;
|
|
/* 0x7B0 */ u8 mIsMiddle;
|
|
/* 0x7B2 */ short mPartTimer;
|
|
/* 0x7B4 */ float mWtrScale;
|
|
/* 0x7B8 */ float mWtrScaleMin;
|
|
/* 0x7BC */ u16 mWtrTimer;
|
|
/* 0X7BE */ u8 mWtrState;
|
|
/* 0x7C0 */ short mEventIdx;
|
|
/* 0x7C2 */ u8 mState;
|
|
/* 0x7C3 */ bool mWaterSound;
|
|
};
|
|
|
|
#endif /* D_A_OBJ_HHA_H */
|