mirror of https://github.com/zeldaret/tp.git
143 lines
3.9 KiB
C++
143 lines
3.9 KiB
C++
#ifndef D_A_SPINNER_H
|
|
#define D_A_SPINNER_H
|
|
|
|
#include "d/d_path.h"
|
|
#include "d/d_particle_copoly.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
/**
|
|
* @ingroup actors-items
|
|
* @class daSpinner_c
|
|
* @brief Spinner
|
|
*
|
|
* @details Arbiter's Grounds dungeon item.
|
|
*
|
|
*/
|
|
class daSpinner_c : public fopAc_ac_c {
|
|
public:
|
|
enum daSpinner_TAG {
|
|
TAG_NONE,
|
|
TAG_START,
|
|
TAG_2,
|
|
TAG_INTO,
|
|
TAG_INTO_INC_ROT,
|
|
TAG_END,
|
|
};
|
|
|
|
/* 804D198C */ int createHeap();
|
|
/* 804D1A70 */ int create();
|
|
/* 804D1FD0 */ ~daSpinner_c();
|
|
/* 804D21E0 */ void setRoomInfo();
|
|
/* 804D2278 */ void setMatrix();
|
|
/* 804D2320 */ void setEffect();
|
|
/* 804D25F4 */ int posMove();
|
|
/* 804D3090 */ void setReflectAngle();
|
|
/* 804D3174 */ void setWallHit(s16, u32);
|
|
/* 804D34B0 */ void setAnm();
|
|
/* 804D3618 */ int setNextPathNum();
|
|
/* 804D3694 */ Vec* getPathNextPos();
|
|
/* 804D36F4 */ int checkLineWallHit(cXyz*, cXyz*);
|
|
/* 804D3774 */ int checkPathMove();
|
|
/* 804D3D60 */ void setSpreadEffect();
|
|
/* 804D3F14 */ void clearSpreadEffect();
|
|
/* 804D3F8C */ int execute();
|
|
/* 804D4BB4 */ int draw();
|
|
|
|
void onPathForceRemove() { mPathForceRemove = true; }
|
|
|
|
dPath* checkPathMoveNow() { return mpPathMove; }
|
|
|
|
static u32 getWaitArg() { return 0; }
|
|
|
|
BOOL getDeleteFlg() const { return mDeleteFlg; }
|
|
|
|
bool checkSpinnerTagEnd() const { return mSpinnerTag == TAG_END; }
|
|
bool checkSpinnerTagIntoIncRot() const { return mSpinnerTag == TAG_INTO_INC_ROT; }
|
|
bool checkSpinnerTagInto() const { return mSpinnerTag == TAG_INTO; }
|
|
bool checkGroundHit() { return mAcch.ChkGroundHit(); }
|
|
|
|
u8 getButtonJump() const { return mButtonJump; }
|
|
u8 getJumpFlg() const { return mJumpFlg; }
|
|
|
|
void setMove(f32 i_speed, s16 i_moveTime) {
|
|
fopAcM_SetParam(this, 1);
|
|
speedF = i_speed;
|
|
mRideMoveTime = i_moveTime;
|
|
mCyl.OnAtSetBit();
|
|
}
|
|
|
|
void clearPathMove() { mpPathMove = NULL; }
|
|
|
|
void setSpinnerTag(const cXyz& param_0) {
|
|
if (mSpinnerTag == TAG_NONE) {
|
|
mSpinnerTag = TAG_START;
|
|
}
|
|
|
|
clearPathMove();
|
|
field_0xaa4 = param_0;
|
|
}
|
|
|
|
void offSpinnerTag() {
|
|
if (mSpinnerTag != TAG_NONE) {
|
|
mSpinnerTag = TAG_END;
|
|
}
|
|
}
|
|
|
|
bool reflectAccept() {
|
|
bool accept = false;
|
|
if (!mBck.isStop() && mSpinnerTag == TAG_NONE) {
|
|
accept = true;
|
|
}
|
|
|
|
return accept;
|
|
}
|
|
|
|
MtxPtr getModelMtx() { return mpModel->getBaseTRMtx(); }
|
|
|
|
s16 getAngleY() { return shape_angle.y + mRotY; }
|
|
|
|
void forceDelete() { mDeleteFlg = true; }
|
|
|
|
private:
|
|
/* 0x568 */ J3DModel* mpModel;
|
|
/* 0x56C */ mDoExt_bckAnm mBck;
|
|
/* 0x588 */ J3DAnmTransform* mpSpoutBck;
|
|
/* 0x58C */ dBgS_AcchCir mAcchCir[3];
|
|
/* 0x64C */ dBgS_LinkAcch mAcch;
|
|
/* 0x824 */ dBgS_LinkLinChk mLinChk;
|
|
/* 0x894 */ dPaPo_c mPaPo;
|
|
/* 0x8CC */ Z2SoundObjSimple mSound;
|
|
/* 0x8EC */ dCcD_Stts mStts;
|
|
/* 0x928 */ dCcD_Cyl mCyl;
|
|
/* 0xA64 */ dPath* mpPathMove;
|
|
/* 0xA68 */ dPath* field_0xa68;
|
|
/* 0xA6C */ u8 field_0xa6c;
|
|
/* 0xA6D */ u8 mJumpFlg;
|
|
/* 0xA6E */ s8 mReverb;
|
|
/* 0xA6F */ u8 mSpinnerTag;
|
|
/* 0xA70 */ u8 mButtonJump;
|
|
/* 0xA71 */ u8 mDeleteFlg;
|
|
/* 0xA72 */ u8 mPathNo;
|
|
/* 0xA73 */ s8 mPathDirection;
|
|
/* 0xA74 */ u8 field_0xa74;
|
|
/* 0xA75 */ u8 mTrigJump;
|
|
/* 0xA76 */ s8 field_0xa76;
|
|
/* 0xA77 */ u8 mPathForceRemove;
|
|
/* 0xA78 */ u8 field_0xa78;
|
|
/* 0xA79 */ u8 field_0xa79;
|
|
/* 0xA7A */ s16 mRideMoveTime;
|
|
/* 0xA7C */ s16 field_0xa7c;
|
|
/* 0xA7E */ s16 mRotY;
|
|
/* 0xA80 */ s16 field_0xa80;
|
|
/* 0xA82 */ s16 field_0xa82;
|
|
/* 0xA84 */ f32 field_0xa84;
|
|
/* 0xA88 */ f32 field_0xa88;
|
|
/* 0xA8C */ u32 mSpreadEmitterIDs[2];
|
|
/* 0xA94 */ u32 field_0xa94;
|
|
/* 0xA98 */ cXyz field_0xa98;
|
|
/* 0xAA4 */ cXyz field_0xaa4;
|
|
/* 0xAB0 */ cXyz field_0xab0;
|
|
};
|
|
|
|
#endif /* D_A_SPINNER_H */
|