blob: dd5b098e57bbf0e6c132b4218bc89d0e557b67a5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
#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,
};
int createHeap();
int create();
~daSpinner_c();
void setRoomInfo();
void setMatrix();
void setEffect();
int posMove();
void setReflectAngle();
void setWallHit(s16, u32);
void setAnm();
int setNextPathNum();
Vec* getPathNextPos();
int checkLineWallHit(cXyz*, cXyz*);
int checkPathMove();
void setSpreadEffect();
void clearSpreadEffect();
int execute();
int draw();
void onPathForceRemove() { mPathForceRemove = true; }
dPath* checkPathMoveNow() { return mpPathMove; }
static u32 getWaitArg() { return 0; }
static int getWaterSinkLimit() { return 50; }
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 */
|