New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
ActorCollision.h
Go to the documentation of this file.
1#pragma once
2
3#include <actor/Actor.h>
4#include <collision/ActorBgCollisionObjCheck.h>
5#include <collision/BgCollisionCheckParam.h>
6
7// vtbl Address: 0x1000084C
8class ActorCollision : public Actor
9{
10 // getRuntimeTypeInfoStatic()::typeInfo initialization guard variable Address: 0x101E9CD4
11 // getRuntimeTypeInfoStatic()::typeInfo Address: 0x101E9CD8
12 SEAD_RTTI_OVERRIDE(ActorCollision, Actor)
13
14protected:
23
30
32 {
35 cQuakeType_Small // Used in NSMB2, but NSMBU no longer uses it
36 };
37
38 /**
39 * @brief -0.0625f
40 * @par Address: 0x1000081C
41 */
42 static const f32 cWaterGravity;
43 /**
44 * @brief 1.5f
45 * @par Address: 0x10000814
46 */
47 static const f32 cWaterSpeedYMax;
48 /**
49 * @brief -1.5f
50 * @par Address: 0x10000818
51 */
52 static const f32 cWaterFallSpeedMax;
53
54protected:
55 friend BgCheckFlag operator|(const BgCheckFlag& lhs, const BgCheckFlag& rhs)
56 {
57 return (BgCheckFlag)((u32)lhs | (u32)rhs);
58 }
59
60 friend BgCheckFlag& operator|=(BgCheckFlag& lhs, const BgCheckFlag& rhs)
61 {
62 lhs = lhs | rhs;
63 return lhs;
64 }
65
66protected:
67 // Address: 0x02002FB8
68 ActorCollision(const ActorCreateParameter& param);
69
70 // Address: 0x0200354C
71 void postCreate(MainState state) override;
72
73 // Address: 0x020035FC
75 // Address: 0x020036D8
76 void postExecute(MainState state) override;
77
78 // Address: 0x02003724
79 Result destroy() override;
80
81public:
82 virtual void setFunsuiFlag(bool enable)
83 {
84 mFunsuiFlag = enable;
85 }
86
87 // Address: Deleted
88 virtual bool getFunsuiFlag() const
89 {
90 return mFunsuiFlag;
91 }
92
93 virtual void beginFunsui()
94 {
95 }
96
97 virtual void endFunsui(f32 speed_y)
98 {
99 }
100
101 virtual bool isFunsui() const
102 {
103 return false;
104 }
105
106 // Address: Deleted
107 virtual void setFunsuiJump(f32 speed)
108 {
109 mSpeed.y = speed;
110 }
111
112 const ActorBgCollisionCheck* getBcConstPtr() const override
113 {
114 return &mBgCheckObj;
115 }
116
117protected:
118 /**
119 * @brief Determines whether @c setQuake_() should be called.
120 * @details Returns @c false by default.
121 * @par Address: 0x02004008
122 */
123 virtual bool isReactQuake();
124 // Address: 0x0200375C
125 virtual void reactQuake(QuakeType type);
126
127 // Address: 0x02003760
128 virtual void setDeathInfoSmoke(const Actor* actor);
129
130 virtual bool setDrcTouchActorDeath(const sead::Vector3f& pos)
131 {
132 return false;
133 }
134
135public:
136 virtual void setFunsuiPos(const sead::Vector2f& dst)
137 {
138 getPos2D() = dst;
139 }
140
141 virtual void setFunsuiSpeedY(f32 speed)
142 {
143 mSpeed.y = speed;
144 }
145
146protected:
147 virtual bool checkLavaDamage_(f32 surface_pos_y)
148 {
149 return true;
150 }
151
152 virtual bool checkPoisonDamage_(f32 surface_pos_y)
153 {
154 return false;
155 }
156
157 virtual void getDrawRange(sead::BoundBox2f* box)
158 {
159 box->set(
160 mPos.x - 16.0f, mPos.y,
161 mPos.x + 16.0f, mPos.y + 32.0f
162 );
163 }
164
165 // Address: 0x020037F4
167 // Address: 0x02003764
168 bool actorBgNormalCheckFoot() const; // Must call checkBg() of mBgCheckObj before calling this, or just use bgCheck_()
169 // Address: 0x02003770
170 bool actorBgNormalCheckWall() const; // ^^^
171
172 // Address: 0x02003878
173 void resetObjBgPos(BgCollision& bg_collision);
174
175 // Address: 0x020038D8
176 bool checkRideActor(const BgCollision& bg_collision) const;
177
178 // Address: 0x020039AC
180 // Address: 0x020039F0
182 // Address: 0x02003AE4
183 void posMove_();
184 // Address: 0x02003A70
186 // Address: 0x02003C10
188
189 // Address: 0x02003C58
191 // Address: 0x02003120
193
194 // Address: 0x02003C9C
196
197 // Address: 0x02003E58
198 void landFoot(f32 y_check_distance, const ActorBgCollisionCheck::Sensor* foot_sensor);
199 // Address: 0x02003EA0
200 void landFootSimple(f32 y_check_distance, const ActorBgCollisionCheck::Sensor* foot_sensor, bool extended, bool force);
201
202 // Address: 0x02003EA4
204
205 bool checkForSuitableGround_(const sead::Vector2f& offset) const
206 {
207 BgCollisionCheckParam param = { 0 };
208 param.layer = mLayer;
209 param.collision_mask = mCollisionMask;
210
211 BasicBgCollisionCheck tile_check(param);
212
213 const sead::Vector2f& a = getPos2D();
214 sead::Vector2f b(a + offset);
215
216 return tile_check.checkArea(nullptr, a, b, 1 << cDirType_Down);
217 }
218
219private:
220 // Address: 0x0200339C
222
223 // Address: 0x02003148
224 WaterType waterLineProc(f32* surface_pos_y, const sead::Vector3f& check_pos/*, f32 unused? */);
225 // Address: 0x020030F4
227
228 // Address: 0x02003590
230
231 // Address: 0x02003A34
232 f32 generalXSpeedCalc(f32 value, f32 step) const;
233
234 // Address: 0x02003BDC
235 bool checkLiftFoot() const;
236
237 // Address: 0x02003D14
238 void landFoot_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor* foot_sensor, bool extended, bool force);
239
240protected:
241 //u32 _27c[4 / sizeof(u32)]; // Alignment???
251 f32 mWaterSpeedMaxY; // Maximum ascension speed
263};
264static_assert(sizeof(ActorCollision) == 0x17A0, "ActorCollision size mismatch");
Definition ActorCollision.h:9
bool mNoWaterCalc
Definition ActorCollision.h:257
void adjustSpeedYInWater()
bool mIsSubmerged
Definition ActorCollision.h:256
ActorBgCollisionObjCheck mBgCheckObj
Definition ActorCollision.h:242
virtual void reactQuake(QuakeType type)
bool preExecute() override
Callback invoked before the execute operation.
virtual bool isFunsui() const
Definition ActorCollision.h:101
virtual void setFunsuiFlag(bool enable)
Definition ActorCollision.h:82
f32 mWaterSpeedMaxY
Definition ActorCollision.h:251
f32 mJumpSpeedF
Definition ActorCollision.h:243
virtual bool setDrcTouchActorDeath(const sead::Vector3f &pos)
Definition ActorCollision.h:130
static const f32 cWaterGravity
-0.0625f
Definition ActorCollision.h:42
friend BgCheckFlag & operator|=(BgCheckFlag &lhs, const BgCheckFlag &rhs)
Definition ActorCollision.h:60
virtual void endFunsui(f32 speed_y)
Definition ActorCollision.h:97
bool checkPressBg_()
f32 _1774
Definition ActorCollision.h:248
f32 mWaterGravity
Definition ActorCollision.h:253
void resetObjBgPos(BgCollision &bg_collision)
void landFoot(f32 y_check_distance, const ActorBgCollisionCheck::Sensor *foot_sensor)
u8 mWaterCalcType
Definition ActorCollision.h:258
sead::Vector2f mBgSpeedPrev
Definition ActorCollision.h:250
void calcLiftSpeed()
bool checkLiftFoot() const
bool actorBgNormalCheckFoot() const
void calcWaterCheck()
WaterType mWaterTypeOverride
Definition ActorCollision.h:247
void landFoot_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor *foot_sensor, bool extended, bool force)
QuakeType
Definition ActorCollision.h:32
@ cQuakeType_Big
Definition ActorCollision.h:34
@ cQuakeType_Normal
Definition ActorCollision.h:33
@ cQuakeType_Small
Definition ActorCollision.h:35
virtual bool isReactQuake()
Determines whether setQuake_() should be called.
bool checkForSuitableGround_(const sead::Vector2f &offset) const
Definition ActorCollision.h:205
bool actorBgNormalCheckWall() const
const ActorBgCollisionCheck * getBcConstPtr() const override
Definition ActorCollision.h:112
virtual bool checkLavaDamage_(f32 surface_pos_y)
Definition ActorCollision.h:147
u32 mJumpFrame
Definition ActorCollision.h:262
u8 mNoLavaSplashTimer
Definition ActorCollision.h:259
ActorCollision(const ActorCreateParameter &param)
virtual void setFunsuiJump(f32 speed)
Definition ActorCollision.h:107
bool mFunsuiFlag
Definition ActorCollision.h:260
void onWaterFlag()
bool mIsInQuicksand
Definition ActorCollision.h:255
virtual void getDrawRange(sead::BoundBox2f *box)
Definition ActorCollision.h:157
bool mCheckWaterNeeded
Definition ActorCollision.h:254
virtual bool getFunsuiFlag() const
Definition ActorCollision.h:88
f32 generalXSpeedCalc(f32 value, f32 step) const
virtual void setFunsuiPos(const sead::Vector2f &dst)
Definition ActorCollision.h:136
void postExecute(MainState state) override
Callback invoked unconditionally after the execute phase completes. It executes even if preExecute() ...
virtual bool checkPoisonDamage_(f32 surface_pos_y)
Definition ActorCollision.h:152
bool checkRideActor(const BgCollision &bg_collision) const
void calcSpeedY_()
friend BgCheckFlag operator|(const BgCheckFlag &lhs, const BgCheckFlag &rhs)
Definition ActorCollision.h:55
bool mUseWaterTypeOverride
Definition ActorCollision.h:246
WaterCalcType
Definition ActorCollision.h:25
@ cWaterCalcType_ForceOut
Definition ActorCollision.h:28
@ cWaterCalcType_EnablePreCheck
Definition ActorCollision.h:27
@ cWaterCalcType_Normal
Definition ActorCollision.h:26
void postCreate(MainState state) override
Callback invoked unconditionally after the create phase completes. It executes even if preCreate() by...
virtual void setDeathInfoSmoke(const Actor *actor)
static const f32 cWaterSpeedYMax
1.5f
Definition ActorCollision.h:47
static const f32 cWaterFallSpeedMax
-1.5f
Definition ActorCollision.h:52
void landFootSimple(f32 y_check_distance, const ActorBgCollisionCheck::Sensor *foot_sensor, bool extended, bool force)
void checkLiftSpeed()
WaterType checkWaterByWaterCheckPos(f32 *surface_pos_y)
void calcFallSpeed_()
sead::Vector3f * mWaterCheckPos
Definition ActorCollision.h:245
bool mIsOnGround
Definition ActorCollision.h:261
BgCheckFlag actorBgNormalCheck()
f32 mJumpAccelF
Definition ActorCollision.h:244
WaterType waterLineProc(f32 *surface_pos_y, const sead::Vector3f &check_pos)
virtual void setFunsuiSpeedY(f32 speed)
Definition ActorCollision.h:141
virtual void beginFunsui()
Definition ActorCollision.h:93
f32 mWaterMaxFallSpeed
Definition ActorCollision.h:252
Result destroy() override
Main deletion callback for the actor.
sead::Vector2f mBgSpeed
Definition ActorCollision.h:249
void registerAlphaCheckAreaHUD()
void calcBGBeltSpeed()