mirror of https://github.com/zeldaret/tp.git
94 lines
2.6 KiB
C++
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 */
|