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
30protected:
31 friend BgCheckFlag operator|(const BgCheckFlag& lhs, const BgCheckFlag& rhs)
32 {
33 return (BgCheckFlag)((u32)lhs | (u32)rhs);
34 }
35
36 friend BgCheckFlag& operator|=(BgCheckFlag& lhs, const BgCheckFlag& rhs)
37 {
38 lhs = lhs | rhs;
39 return lhs;
40 }
41
42protected:
43 // Address: 0x02002FB8
44 ActorCollision(const ActorCreateParam& param);
45
46 // Address: 0x0200354C
47 void postCreate(MainState state) override;
48
49 // Address: 0x020035FC
51 // Address: 0x020036D8
52 void postExecute(MainState state) override;
53
54 // Address: 0x02003724
55 Result doDelete() override;
56
57 virtual void setWaterFunsui_(bool enable)
58 {
59 mIsWaterFunsui = enable;
60 }
61
62 // Address: Deleted
63 virtual bool isWaterFunsui_() const
64 {
65 return mIsWaterFunsui;
66 }
67
68 virtual void beginFunsui_()
69 {
70 }
71
72 virtual void endFunsui_(f32 speed_y)
73 {
74 }
75
76 virtual bool isFunsui_() const
77 {
78 return false;
79 }
80
81 // Address: Deleted
82 virtual void vf134(f32 speed)
83 {
84 mSpeed.y = speed;
85 }
86
87 // Address: 0x02004008
88 virtual bool vf13C(); // returns false, Determines whether vf144 should be called
89 // Address: 0x0200375C
90 virtual void vf144(s32); // nullsub, parameter is based on the flag bit in Quake (either 0 or 1, can even be 2 in NSMB2 but that was removed here)
91 // Address: 0x02003760
92 virtual void setSmokeDamage_(Actor* actor);
93
94public:
96 {
97 return &mBgCheckObj;
98 }
99
100protected:
101 virtual bool setTouchDrcDamage_(const sead::Vector2f& pos)
102 {
103 return false;
104 }
105
106 virtual void setFunsuiPos_(sead::Vector2f dst)
107 {
108 getPos2D() = dst;
109 }
110
111 virtual void setFunsuiSpeedY_(f32 speed)
112 {
113 mSpeed.y = speed;
114 }
115
116 virtual bool smokeDamageEnable_Yogan_(f32 surface_pos_y)
117 {
118 return true;
119 }
120
121 virtual bool smokeDamageEnable_Poison_(f32 surface_pos_y)
122 {
123 return false;
124 }
125
126 virtual void getBox_(sead::BoundBox2f& box)
127 {
128 box.set(
129 mPos.x - 16.0f, mPos.y,
130 mPos.x + 16.0f, mPos.y + 32.0f
131 );
132 }
133
135 {
136 }
137
138 // Address: 0x020037F4
140 // Address: 0x02003764
141 bool bgCheckFoot_() const; // Must call checkBg() of mBgCheckObj before calling this, or just use bgCheck_()
142 // Address: 0x02003770
143 bool bgCheckWall_() const; // ^^^
144
145 // Address: 0x02003878
146 void clampMoveDistance_(BgCollision& bg_collision);
147
148 // Address: 0x020038D8
149 bool isHitBgCollision_(const BgCollision& bg_collision) const;
150
151 // Address: 0x020039AC
153 // Address: 0x020039F0
155 // Address: 0x02003AE4
156 void posMove_();
157 // Address: 0x02003A70
159 // Address: 0x02003C10
161
162 // Address: 0x02003C58
163 WaterType checkWater_(f32* surface_pos_y);
164 // Address: 0x02003120
166
167 // Address: 0x02003C9C
169
170 // Address: 0x02003E58
171 void checkSnapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor& foot_sensor);
172 // Address: 0x02003EA0
173 void snapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor& foot_sensor, bool extended, bool force);
174
175 // Address: 0x02003EA4
177
178 bool checkForSuitableGround_(const sead::Vector2f& offset) const
179 {
180 BgCollisionCheckParam param = { 0 };
181 param.layer = mLayer;
182 param.collision_mask = mCollisionMask;
183
184 BasicBgCollisionCheck tile_check(param);
185
186 const sead::Vector2f& a = getPos2D();
187 sead::Vector2f b(a + offset);
188
189 return tile_check.checkArea(nullptr, a, b, 1 << cDirType_Down);
190 }
191
192private:
193 // Address: 0x0200339C
195
196 // Address: 0x02003148
197 WaterType checkEnterWater_(f32* surface_pos_y, const sead::Vector3f& check_pos);
198 // Address: 0x020030F4
200
201 // Address: 0x02003590
203
204 // Address: 0x02003A34
205 f32 chaseZero_(f32 value, f32 step) const;
206
207 // Address: 0x02003BDC
208 bool isJump_() const;
209
210 // Address: 0x02003D14
211 void snapToGroundImpl_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor& foot_sensor, bool extended, bool force);
212
213protected:
214 //u32 _27c[4 / sizeof(u32)]; // Alignment???
224 f32 mWaterSpeedMaxY; // Maximum ascension speed
236};
237static_assert(sizeof(ActorCollision) == 0x17A0);
Definition ActorCollision.h:8
void clampMoveDistance_(BgCollision &bg_collision)
virtual void setWaterFunsui_(bool enable)
Definition ActorCollision.h:57
~ActorCollision() override
Definition ActorCollision.h:134
WaterType checkWater_(f32 *surface_pos_y)
virtual void setFunsuiSpeedY_(f32 speed)
Definition ActorCollision.h:111
bool mNoWaterCalc
Definition ActorCollision.h:230
bool mIsSubmerged
Definition ActorCollision.h:229
ActorBgCollisionObjCheck mBgCheckObj
Definition ActorCollision.h:215
virtual void vf144(s32)
bool isJump_() const
bool preExecute() override
Callback invoked before the execute operation.
virtual bool vf13C()
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:224
f32 mJumpSpeedF
Definition ActorCollision.h:216
virtual void vf134(f32 speed)
Definition ActorCollision.h:82
BgCheckFlag bgCheck_()
bool mIsWaterFunsui
Definition ActorCollision.h:233
friend BgCheckFlag & operator|=(BgCheckFlag &lhs, const BgCheckFlag &rhs)
Definition ActorCollision.h:36
f32 _1774
Definition ActorCollision.h:221
f32 mWaterGravity
Definition ActorCollision.h:226
u8 mWaterCalcType
Definition ActorCollision.h:231
sead::Vector2f mBgSpeedPrev
Definition ActorCollision.h:223
WaterType checkEnterWater_(f32 *surface_pos_y, const sead::Vector3f &check_pos)
virtual void setSmokeDamage_(Actor *actor)
virtual bool isFunsui_() const
Definition ActorCollision.h:76
WaterType mWaterTypeOverride
Definition ActorCollision.h:220
void registerInGamescene_()
virtual void getBox_(sead::BoundBox2f &box)
Definition ActorCollision.h:126
void enterWater_()
bool checkForSuitableGround_(const sead::Vector2f &offset) const
Definition ActorCollision.h:178
virtual bool setTouchDrcDamage_(const sead::Vector2f &pos)
Definition ActorCollision.h:101
u32 mJumpFrame
Definition ActorCollision.h:235
u8 mNoLavaSplashTimer
Definition ActorCollision.h:232
virtual bool smokeDamageEnable_Yogan_(f32 surface_pos_y)
Definition ActorCollision.h:116
f32 chaseZero_(f32 value, f32 step) const
bool mIsInQuicksand
Definition ActorCollision.h:228
void clampWaterSpeedY_()
bool bgCheckWall_() const
virtual bool smokeDamageEnable_Poison_(f32 surface_pos_y)
Definition ActorCollision.h:121
bool mCheckWaterNeeded
Definition ActorCollision.h:227
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:31
bool mUseWaterTypeOverride
Definition ActorCollision.h:219
virtual void setFunsuiPos_(sead::Vector2f dst)
Definition ActorCollision.h:106
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:72
void calcJumpSpeedF_()
void calcFallSpeed_()
sead::Vector3f * mWaterCheckPos
Definition ActorCollision.h:218
bool mIsOnGround
Definition ActorCollision.h:234
f32 mJumpAccelF
Definition ActorCollision.h:217
bool hasamareBgCheck_()
f32 mWaterMaxFallSpeed
Definition ActorCollision.h:225
virtual void beginFunsui_()
Definition ActorCollision.h:68
virtual bool isWaterFunsui_() const
Definition ActorCollision.h:63
void checkSnapToGround_(f32 y_check_distance, const ActorBgCollisionCheck::Sensor &foot_sensor)
ActorBgCollisionCheck * getBgCheck() override
Definition ActorCollision.h:95
bool bgCheckFoot_() const
sead::Vector2f mBgSpeed
Definition ActorCollision.h:222
void calcBgSpeed_()