tp/include/d/actor/d_a_spinner.h

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 */