tp/include/d/actor/d_a_obj_Lv5Key.h

94 lines
2.6 KiB
C++

#ifndef D_A_OBJ_LV5KEY_H
#define D_A_OBJ_LV5KEY_H
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "f_op/f_op_actor_mng.h"
/**
* @ingroup actors-objects
* @class daObjLv5Key_c
* @brief Snowpeak Ruins Key Lock
*
* @details
*
*/
class daObjLv5Key_c : public fopAc_ac_c {
public:
typedef void (daObjLv5Key_c::*actionFunc)(int);
enum daObjLv5Key_STATUS {
STATUS_WAIT,
STATUS_SHAKE_START,
STATUS_OPEN_START,
STATUS_OPEN,
};
int CreateHeap();
int Init();
void setBgc();
void initCcSph();
void setCcSph();
void setAction(actionFunc, int);
void Action();
void Wait(int);
void Open(int);
void Fall(int);
void Land(int);
void Shake(int);
void TranslateByNowDirect(f32, f32, f32);
int Execute();
int Draw();
int Delete();
void setBaseMtx();
int create_1st();
void setLocalOffset(f32 x, f32 y, f32 z) { mLocalOffset.set(x, y, z); }
void setRotateSpd(s16 x, s16 y, s16 z) { mRotateSpd.set(x, y, z); }
void setRotateAccel(s16 x, s16 y, s16 z) { mRotateAccel.set(x, y, z); }
void RotateAngle() { shape_angle += mRotateSpd; }
void calcRotateSpd() { mRotateSpd += mRotateAccel; }
void setTimer(s16 timer) { mTimer = timer; }
void setShakeNum(s8 num) { mShakeNum = num; }
void decShakeNum() { mShakeNum--; }
bool countdown() { return --mTimer <= 0; }
void setStatus(s8 status) { mStatus = status; }
void keylock_open_start() { setStatus(STATUS_OPEN_START); }
void keylock_shake_start() { setStatus(STATUS_SHAKE_START); }
bool is_open() { return mStatus == STATUS_OPEN; }
bool is_open_start() { return mStatus == STATUS_OPEN_START; }
bool is_shake_start() { return mStatus == STATUS_SHAKE_START; }
bool is_shake_end() { return mShakeNum <= 0; }
cXyz& getLocalOffset() { return mLocalOffset; }
private:
/* 0x568 */ u8 field_0x568[0x56C - 0x568];
/* 0x56C */ Z2SoundObjSimple mSound;
/* 0x58C */ u8 field_0x58C[0x590 - 0x58C];
/* 0x590 */ J3DModel* mpModel;
/* 0x594 */ mDoExt_bckAnm mBck;
/* 0x5B0 */ request_of_phase_process_class mPhase;
/* 0x5B8 */ dBgS_AcchCir mAcchCir;
/* 0x5F8 */ dBgS_ObjAcch mAcch;
/* 0x7D0 */ dCcD_Stts mCcStts;
/* 0x80C */ dCcD_Sph mCcSph;
/* 0x944 */ u8 field_0x944;
/* 0x945 */ s8 mStatus;
/* 0x948 */ actionFunc mAction;
/* 0x954 */ s16 mMode;
/* 0x956 */ s16 mTimer;
/* 0x958 */ cXyz mLocalOffset;
/* 0x964 */ csXyz mRotateSpd;
/* 0x96A */ csXyz mRotateAccel;
/* 0x970 */ s8 mShakeNum;
/* 0x971 */ u8 field_0x971[0x97c - 0x971];
};
STATIC_ASSERT(sizeof(daObjLv5Key_c) == 0x97c);
#endif /* D_A_OBJ_LV5KEY_H */