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
7class ActorCollision : public Actor // vtbl Address: 0x1000084C
8{
9 // getRuntimeTypeInfoStatic()::typeInfo initialization guard variable Address: 0x101E9CD4
10 // getRuntimeTypeInfoStatic()::typeInfo Address: 0x101E9CD8
11 SEAD_RTTI_OVERRIDE(ActorCollision, Actor)
12
13protected:
22
29
31 {
34 cQuakeType_Small // Used in NSMB2, but NSMBU no longer uses it
35 };
36
37protected:
38 friend BgCheckFlag operator|(const BgCheckFlag& lhs, const BgCheckFlag& rhs)
39 {
40 return (BgCheckFlag)((u32)lhs | (u32)rhs);
41 }
42
43 friend BgCheckFlag& operator|=(BgCheckFlag& lhs, const BgCheckFlag& rhs)
44 {
45 lhs = lhs | rhs;
46 return lhs;
47 }
48
49protected:
50 // Address: 0x02002FB8
51 ActorCollision(const ActorCreateParam& param);
52
53 // Address: 0x0200354C
54 void postCreate(MainState state) override;
55
56 // Address: 0x020035FC
58 // Address: 0x020036D8
59 void postExecute(MainState state) override;
60
61 // Address: 0x02003724
62 Result doDelete() override;
63
64 virtual void setWaterFunsui_(bool enable)
65 {
66 mIsWaterFunsui = enable;
67 }
68
69 // Address: Deleted
70 virtual bool isWaterFunsui_() const
71 {
72 return mIsWaterFunsui;
73 }
74
75 virtual void beginFunsui_()
76 {
77 }
78
79 virtual void endFunsui_(f32 speed_y)
80 {
81 }
82
83 virtual bool isFunsui_() const
84 {
85 return false;
86 }
87
88 // Address: Deleted
89 virtual void vf134(f32 speed)
90 {
91 mSpeed.y = speed;
92 }
93
94 /**
95 * @brief Determines whether @c setQuake_() should be called.
96 * @details Returns @c false by default.
97 * @par Address: 0x02004008
98 */
99 virtual bool isQuakeEnable_();
100 // Address: 0x0200375C
101 virtual void setQuake_(QuakeType type);
102
103 // Address: 0x02003760
104 virtual void setSmokeDamage_(Actor* actor);
105
106public:
108 {
109 return &mBgCheckObj;
110 }
111
112protected:
113 virtual bool setTouchDrcDamage_(const sead::Vector3f& pos)
114 {
115 return false;
116 }
117
118 virtual void setFunsuiPos_(sead::Vector2f dst)
119 {
120 getPos2D() = dst;
121 }
122
123 virtual void setFunsuiSpeedY_(f32 speed)
124 {
125 mSpeed.y = speed;
126 }
127
128 virtual bool smokeDamageEnable_Yogan_(f32 surface_pos_y)
129 {
130 return true;
131 }
132
133 virtual bool smokeDamageEnable_Poison_(f32 surface_pos_y)
134 {
135 return false;
136 }
137
138 virtual void getBox_(sead::BoundBox2f& box)
139 {
140 box.set(
141 mPos.x - 16.0f, mPos.y,
142 mPos.x + 16.0f, mPos.y + 32.0f
143 );
144 }
145
147 {
148 }
149
150 // Address: 0x020037F4
152 // Address: 0x02003764
153 bool bgCheckFoot_() const; // Must call checkBg() of mBgCheckObj before calling this, or just use bgCheck_()
154 // Address: 0x02003770
155 bool bgCheckWall_() const; // ^^^
156
157 // Address: 0x02003878
158 void clampMoveDistance_(BgCollision& bg_collision);
159
160 // Address: 0x020038D8
161 bool isHitBgCollision_(const BgCollision& bg_collision) const;
162
163 // Address: 0x020039AC
165 // Address: 0x020039F0
167 // Address: 0x02003AE4
168 void posMove_();
169 // Address: 0x02003A70
171 // Address: 0x02003C10
173
174 // Address: 0x02003C58
175 WaterType checkWater_(f32* surface_pos_y);
176 // Address: 0x02003120
178
179 // Address: 0x02003C9C
181
182 // Address: 0x02003E58
183 void checkSnapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor& foot_sensor);
184 // Address: 0x02003EA0
185 void snapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor& foot_sensor, bool extended, bool force);
186
187 // Address: 0x02003EA4
189
190 bool checkForSuitableGround_(const sead::Vector2f& offset) const
191 {
192 BgCollisionCheckParam param = { 0 };
193 param.layer = mLayer;
194 param.collision_mask = mCollisionMask;
195
196 BasicBgCollisionCheck tile_check(param);
197
198 const sead::Vector2f& a = getPos2D();
199 sead::Vector2f b(a + offset);
200
201 return tile_check.checkArea(nullptr, a, b, 1 << cDirType_Down);
202 }
203
204private:
205 // Address: 0x0200339C
207
208 // Address: 0x02003148
209 WaterType checkEnterWater_(f32* surface_pos_y, const sead::Vector3f& check_pos);
210 // Address: 0x020030F4
212
213 // Address: 0x02003590
215
216 // Address: 0x02003A34
217 f32 chaseZero_(f32 value, f32 step) const;
218
219 // Address: 0x02003BDC
220 bool isJump_() const;
221
222 // Address: 0x02003D14
223 void snapToGroundImpl_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor& foot_sensor, bool extended, bool force);
224
225protected:
226 //u32 _27c[4 / sizeof(u32)]; // Alignment???
236 f32 mWaterSpeedMaxY; // Maximum ascension speed
248};
249static_assert(sizeof(ActorCollision) == 0x17A0);
Definition ActorCollision.h:8
void clampMoveDistance_(BgCollision &bg_collision)
virtual bool setTouchDrcDamage_(const sead::Vector3f &pos)
Definition ActorCollision.h:113
virtual void setWaterFunsui_(bool enable)
Definition ActorCollision.h:64
~ActorCollision() override
Definition ActorCollision.h:146
WaterType checkWater_(f32 *surface_pos_y)
virtual void setFunsuiSpeedY_(f32 speed)
Definition ActorCollision.h:123
bool mNoWaterCalc
Definition ActorCollision.h:242
bool mIsSubmerged
Definition ActorCollision.h:241
ActorBgCollisionObjCheck mBgCheckObj
Definition ActorCollision.h:227
bool isJump_() const
bool preExecute() override
Callback invoked before the execute operation.
bool isHitBgCollision_(const BgCollision &bg_collision) const
void snapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor &foot_sensor, bool extended, bool force)
f32 mWaterSpeedMaxY
Definition ActorCollision.h:236
f32 mJumpSpeedF
Definition ActorCollision.h:228
virtual void vf134(f32 speed)
Definition ActorCollision.h:89
BgCheckFlag bgCheck_()
bool mIsWaterFunsui
Definition ActorCollision.h:245
friend BgCheckFlag & operator|=(BgCheckFlag &lhs, const BgCheckFlag &rhs)
Definition ActorCollision.h:43
f32 _1774
Definition ActorCollision.h:233
f32 mWaterGravity
Definition ActorCollision.h:238
u8 mWaterCalcType
Definition ActorCollision.h:243
sead::Vector2f mBgSpeedPrev
Definition ActorCollision.h:235
WaterType checkEnterWater_(f32 *surface_pos_y, const sead::Vector3f &check_pos)
virtual void setSmokeDamage_(Actor *actor)
virtual bool isFunsui_() const
Definition ActorCollision.h:83
WaterType mWaterTypeOverride
Definition ActorCollision.h:232
void registerInGamescene_()
virtual void getBox_(sead::BoundBox2f &box)
Definition ActorCollision.h:138
void enterWater_()
QuakeType
Definition ActorCollision.h:31
@ cQuakeType_Big
Definition ActorCollision.h:33
@ cQuakeType_Normal
Definition ActorCollision.h:32
@ cQuakeType_Small
Definition ActorCollision.h:34
bool checkForSuitableGround_(const sead::Vector2f &offset) const
Definition ActorCollision.h:190
u32 mJumpFrame
Definition ActorCollision.h:247
u8 mNoLavaSplashTimer
Definition ActorCollision.h:244
virtual void setQuake_(QuakeType type)
virtual bool smokeDamageEnable_Yogan_(f32 surface_pos_y)
Definition ActorCollision.h:128
f32 chaseZero_(f32 value, f32 step) const
bool mIsInQuicksand
Definition ActorCollision.h:240
void clampWaterSpeedY_()
bool bgCheckWall_() const
virtual bool smokeDamageEnable_Poison_(f32 surface_pos_y)
Definition ActorCollision.h:133
bool mCheckWaterNeeded
Definition ActorCollision.h:239
void snapToGroundImpl_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor &foot_sensor, bool extended, bool force)
ActorCollision(const ActorCreateParam &param)
void postExecute(MainState state) override
Callback invoked unconditionally after the execute phase completes. It executes even if preExecute() ...
void calcSpeedY_()
friend BgCheckFlag operator|(const BgCheckFlag &lhs, const BgCheckFlag &rhs)
Definition ActorCollision.h:38
bool mUseWaterTypeOverride
Definition ActorCollision.h:231
virtual void setFunsuiPos_(sead::Vector2f dst)
Definition ActorCollision.h:118
WaterCalcType
Definition ActorCollision.h:24
@ cWaterCalcType_ForceOut
Definition ActorCollision.h:27
@ cWaterCalcType_EnablePreCheck
Definition ActorCollision.h:26
@ cWaterCalcType_Normal
Definition ActorCollision.h:25
void postCreate(MainState state) override
Callback invoked unconditionally after the create phase completes. It executes even if preCreate() by...
Result doDelete() override
Main deletion callback for the actor.
void posMoveCalcJump_()
virtual void endFunsui_(f32 speed_y)
Definition ActorCollision.h:79
void calcJumpSpeedF_()
void calcFallSpeed_()
sead::Vector3f * mWaterCheckPos
Definition ActorCollision.h:230
bool mIsOnGround
Definition ActorCollision.h:246
f32 mJumpAccelF
Definition ActorCollision.h:229
virtual bool isQuakeEnable_()
Determines whether setQuake_() should be called.
bool hasamareBgCheck_()
f32 mWaterMaxFallSpeed
Definition ActorCollision.h:237
virtual void beginFunsui_()
Definition ActorCollision.h:75
virtual bool isWaterFunsui_() const
Definition ActorCollision.h:70
void checkSnapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor &foot_sensor)
ActorBgCollisionCheck * getBgCheck() override
Definition ActorCollision.h:107
bool bgCheckFoot_() const
sead::Vector2f mBgSpeed
Definition ActorCollision.h:234
void calcBgSpeed_()