mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-01 17:57:24 -04:00
1a752bbbb9
* start d-a-obj-shmrgrd * mostly matching * constructor * 100% * d-a-obj-shmrgrd equivalent
116 lines
3.0 KiB
C++
116 lines
3.0 KiB
C++
#ifndef D_A_OBJ_SHMRGRD_H
|
|
#define D_A_OBJ_SHMRGRD_H
|
|
|
|
#include "f_op/f_op_actor.h"
|
|
#include "d/d_cc_d.h"
|
|
#include "d/d_a_obj.h"
|
|
#include "d/d_particle.h"
|
|
|
|
class dBgW;
|
|
class J3DNode;
|
|
|
|
class daObjShmrgrd_c : public fopAc_ac_c {
|
|
public:
|
|
enum Mode_e {
|
|
MODE_UPPER = 0,
|
|
MODE_U_L = 1,
|
|
MODE_LOWER = 2
|
|
};
|
|
|
|
enum Prm_e {
|
|
PRM_SWSAVE_W = 0x8,
|
|
PRM_SWSAVE_S = 0x0,
|
|
};
|
|
|
|
Mode_e get_mode() { return mMode; }
|
|
bool is_switch() const {
|
|
if (prm_get_swSave() == 0xFF) {
|
|
return false;
|
|
} else {
|
|
return fopAcM_isSwitch(const_cast<daObjShmrgrd_c*>(this), prm_get_swSave());
|
|
}
|
|
}
|
|
void on_switch() const {
|
|
if (prm_get_swSave() != 0xFF) {
|
|
fopAcM_onSwitch(const_cast<daObjShmrgrd_c*>(this), prm_get_swSave());
|
|
}
|
|
}
|
|
s32 prm_get_swSave() const { return daObj::PrmAbstract(this, PRM_SWSAVE_W, PRM_SWSAVE_S); }
|
|
|
|
daObjShmrgrd_c();
|
|
static BOOL solidHeapCB(fopAc_ac_c*);
|
|
BOOL create_heap();
|
|
cPhs_State _create();
|
|
bool _delete();
|
|
daObjShmrgrd_c* search_target_next(daObjShmrgrd_c*);
|
|
void register_list();
|
|
void leave_list();
|
|
daObjShmrgrd_c* search_gap();
|
|
void set_gap_co();
|
|
void init_mtx();
|
|
void set_mtx();
|
|
BOOL check_player_angle(fopAc_ac_c*);
|
|
void set_damage();
|
|
void vib_start(short, float);
|
|
void vib_proc();
|
|
void crush_start();
|
|
void crush_proc();
|
|
void eff_crush();
|
|
void calc_top_pos();
|
|
static BOOL jnodeCB(J3DNode*, int);
|
|
void mode_upper_init();
|
|
void mode_upper();
|
|
void mode_u_l_init();
|
|
void mode_u_l();
|
|
void mode_lower_init();
|
|
void mode_lower();
|
|
bool _execute();
|
|
bool _draw();
|
|
|
|
virtual ~daObjShmrgrd_c() {}
|
|
|
|
static int M_damage;
|
|
static short M_damage_dir;
|
|
static daObjShmrgrd_c* M_list_p;
|
|
|
|
static const dCcD_SrcCyl M_cyl_src_co;
|
|
static const dCcD_SrcCyl M_cyl_src_at;
|
|
static const dCcD_SrcCyl M_cyl_src_tg;
|
|
static const dCcD_SrcCyl M_cyl_src_gap_co;
|
|
static const char M_arcname[8];
|
|
|
|
public:
|
|
/* 0x290 */ // vtable
|
|
/* 0x294 */ daObjShmrgrd_c* mpNext;
|
|
/* 0x298 */ J3DModel* mpModel;
|
|
/* 0x29C */ request_of_phase_process_class mPhs;
|
|
/* 0x2A4 */ dCcD_Cyl mCylCo;
|
|
/* 0x3D4 */ dCcD_Stts mSttsCo;
|
|
/* 0x410 */ dCcD_Cyl mCylTg;
|
|
/* 0x540 */ dCcD_Stts mSttsTg;
|
|
/* 0x57C */ dCcD_Cyl mCylAt;
|
|
/* 0x6AC */ dCcD_Stts mSttsAt;
|
|
/* 0x6E8 */ dCcD_Cyl mCylGapCo;
|
|
/* 0x818 */ dCcD_Stts mSttsGapCo;
|
|
/* 0x854 */ Mode_e mMode;
|
|
/* 0x858 */ s16 mCrushTimer;
|
|
/* 0x85A */ u8 mCrushState;
|
|
/* 0x85C */ f32 m85C; // unused
|
|
/* 0x860 */ f32 mScaleY;
|
|
/* 0x864 */ f32 mAngleZ;
|
|
/* 0x868 */ f32 mAngleX;
|
|
/* 0x86C */ f32 mAngleSpeedZ;
|
|
/* 0x870 */ f32 mAngleSpeedX;
|
|
/* 0x874 */ f32 mTargetHFrac;
|
|
/* 0x878 */ f32 mCurHFrac;
|
|
/* 0x87C */ f32 mVSpeed;
|
|
/* 0x880 */ f32 mTopPos;
|
|
/* 0x884 */ dPa_smokeEcallBack mSmokeCb;
|
|
/* 0x8A4 */ Mtx mMtx;
|
|
/* 0x2D4 */ dBgW* mpBgW;
|
|
}; // Size: 0x8D8
|
|
|
|
STATIC_ASSERT(sizeof(daObjShmrgrd_c) == 0x8D8);
|
|
|
|
#endif /* D_A_OBJ_SHMRGRD_H */
|