New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
SnakeBlock.h
Go to the documentation of this file.
1#pragma once
2
3#include <collision/ActorBoxBgCollision.h>
4#include <collision/ActorCollisionDrcTouchCallback.h>
5#include <graphics/AnimModel.h>
6#include <enemy/EnemyBoyoMgr.h>
7#include <enemy/Enemy.h>
8
9// vtbl Address: 0x100A6D94
11{
12public:
14 : EnemyBoyoMgr(nullptr)
15 { }
16
17 // Address: 0x0245E5C0
18 sead::Vector3f getBaseScale() const override;
19
20 void setBaseScale(const sead::Vector3f* scale)
21 {
22 mBaseScale = scale;
23 }
24
25protected:
27};
28
29// vtbl Address: 0x100A717C
30class SnakeBlock : public Enemy
31{
32 // No RTTI
33
34public:
40
47
48public:
49 // vtbl Address: 0x100A7124
51 {
52 public:
53 // Address: 0x0245CF04
54 bool bcSetTouchNormal(BgCollision* bg_collision, const sead::Vector2f& pos) override;
55 // Address: 0x0245D018
56 void bcOnTouch(BgCollision* bg_collision, const sead::Vector2f& pos) override;
57 };
58 static_assert(sizeof(DrcTouchCB) == 0x4, "SnakeBlock::DrcTouchCB size mismatch");
59
60 // vtbl Address: 0x100A6F4C
62 {
63 public:
66 , mParent(nullptr)
67 , _2d4(0)
68 , mBoyoMgr()
69 { }
70
71 // Address: 0x0245E5E0
73
75 {
76 return mModel;
77 }
78
80 {
81 return mPathIdx;
82 }
83
84 const sead::Vector3f& getWorldPos() const
85 {
86 return mWorldPos;
87 }
88
89 // Address: 0x0245A074
90 void init(SnakeBlock* parent, const sead::Vector3f& pos, SnakeType type);
91
92 // Address: 0x0245A2D0
93 void drawModel() const;
94
95 public:
96 // Address: 0x024598AC
97 static void callbackFoot(BgCollision* bc_self, ActorBgCollisionCheck* cc_other);
98
99 protected:
114 };
115 static_assert(sizeof(Piece) == 0x310, "SnakeBlock::Piece size mismatch");
116
117 // vtbl Address: 0x100A6F4C
118 class EdgePiece : public Piece
119 {
120 public:
122 : Piece()
123 { }
124
125 // Address: 0x0245E658
127
128 protected:
131 };
132 static_assert(sizeof(EdgePiece) == 0x318, "SnakeBlock::EdgePiece size mismatch");
133
134public:
135 SnakeBlock(const ActorCreateParameter& param)
136 : Enemy(param)
137 , mEdgePiece()
138 , mMiddlePiece()
139 , mPathDirection(nullptr)
140 , mPathLen(0)
141 , _5c04(0)
142 , mRepeatMovement(false)
143 , mRepeatRailNode(0)
144 , _5c28()
146 { }
147
148 ~SnakeBlock() override = default;
149
150protected:
151 // Address: 0x0245B164
152 Result create() override;
153 // Address: 0x0245B6A0
155 // Address: 0x0245B77C
157 // Address: 0x0245B7F8
158 Result doDelete() override;
159
160 // Address: Deleted
161 virtual void vf4E4();
162
163 // Address: 0x0245CE3C
164 virtual bool toDelete_() const;
165
166public:
167 const EdgePiece& getEdgePiece(u32 idx) const
168 {
169 return mEdgePiece[idx];
170 }
171
172 const Piece& getMiddlePiece(u32 idx) const
173 {
174 return mMiddlePiece[idx];
175 }
176
177 // StateID_Wait Address: 0x1020740C
178 // initializeState_Wait Address: 0x0245B818
179 // executeState_Wait Address: 0x0245B940
180 // finalizeState_Wait Address: 0x0245E7A8
181 DECLARE_STATE_ID(SnakeBlock, Wait)
182 // StateID_Moving Address: 0x1020742C
183 // initializeState_Moving Address: 0x0245BBB0
184 // executeState_Moving Address: 0x0245BD54
185 // finalizeState_Moving Address: 0x0245E7AC
187 // StateID_WaitBeforeEndState Address: 0x1020744C
188 // initializeState_WaitBeforeEndState Address: 0x0245C094
189 // executeState_WaitBeforeEndState Address: 0x0245C188
190 // finalizeState_WaitBeforeEndState Address: 0x0245E7B0
192 // StateID_FallThroughFirst Address: 0x1020746C
193 // initializeState_FallThroughFirst Address: 0x0245C270
194 // executeState_FallThroughFirst Address: 0x0245C554
195 // finalizeState_FallThroughFirst Address: 0x0245E7B4
197 // StateID_FallFirstToLast Address: 0x1020748C
198 // initializeState_FallFirstToLast Address: 0x0245C5F4
199 // executeState_FallFirstToLast Address: 0x0245C678
200 // finalizeState_FallFirstToLast Address: 0x0245E7B8
202 // StateID_FallAll Address: 0x102074AC
203 // initializeState_FallAll Address: 0x0245C848
204 // executeState_FallAll Address: 0x0245C8C8
205 // finalizeState_FallAll Address: 0x0245E7BC
207 // StateID_FallLastToFirst Address: 0x102074CC
208 // initializeState_FallLastToFirst Address: 0x0245CA68
209 // executeState_FallLastToFirst Address: 0x0245CB40
210 // finalizeState_FallLastToFirst Address: 0x0245E7C0
212 // StateID_Inactive Address: 0x102074EC
213 // initializeState_Inactive Address: 0x0245CD48
214 // executeState_Inactive Address: 0x0245E7C4
215 // finalizeState_Inactive Address: 0x0245E7C8
217 // StateID_Repeat Address: 0x1020750C
218 // initializeState_Repeat Address: 0x0245E7CC
219 // executeState_Repeat Address: 0x0245E7D0
220 // finalizeState_Repeat Address: 0x0245E7D4
222
223protected:
243};
244static_assert(sizeof(SnakeBlock) == 0x5D58, "SnakeBlock size mismatch");
Definition SnakeBlock.h:11
void setBaseScale(const sead::Vector3f *scale)
Definition SnakeBlock.h:20
const sead::Vector3f * mBaseScale
Definition SnakeBlock.h:26
sead::Vector3f getBaseScale() const override
SnakeBlockBoyoMgr()
Definition SnakeBlock.h:13
Definition SnakeBlock.h:51
void bcOnTouch(BgCollision *bg_collision, const sead::Vector2f &pos) override
bool bcSetTouchNormal(BgCollision *bg_collision, const sead::Vector2f &pos) override
Definition SnakeBlock.h:119
u32 _314
Definition SnakeBlock.h:130
EdgePiece()
Definition SnakeBlock.h:121
u32 _310
Definition SnakeBlock.h:129
Definition SnakeBlock.h:62
AnimModel * mModel
Definition SnakeBlock.h:102
u16 _2d4
Definition SnakeBlock.h:109
static void callbackFoot(BgCollision *bc_self, ActorBgCollisionCheck *cc_other)
SnakeBlockBoyoMgr mBoyoMgr
Definition SnakeBlock.h:111
sead::Vector3f _2b4
Definition SnakeBlock.h:105
void init(SnakeBlock *parent, const sead::Vector3f &pos, SnakeType type)
u32 mPathIdx
Definition SnakeBlock.h:107
Piece()
Definition SnakeBlock.h:64
sead::Vector3f mModelScale
Definition SnakeBlock.h:110
u32 getPathIdx() const
Definition SnakeBlock.h:79
u32 _30c
Definition SnakeBlock.h:113
u32 _308
Definition SnakeBlock.h:112
SnakeBlock * mParent
Definition SnakeBlock.h:108
sead::Vector3f _2c0
Definition SnakeBlock.h:106
const sead::Vector3f & getWorldPos() const
Definition SnakeBlock.h:84
void drawModel() const
AnimModel * getModel() const
Definition SnakeBlock.h:74
sead::Vector3f _2a8
Definition SnakeBlock.h:104
sead::Vector3f mWorldPos
Definition SnakeBlock.h:103
~Piece() override
u32 mPieceIdx
Definition SnakeBlock.h:100
u32 _294
Definition SnakeBlock.h:101
Definition SnakeBlock.h:31
const StateID * mEndState
Definition SnakeBlock.h:232
s32 mFallCascadeTimer
Definition SnakeBlock.h:234
virtual bool toDelete_() const
SnakeType
Definition SnakeBlock.h:36
@ cSnakeType_Normal
Definition SnakeBlock.h:37
@ cSnakeType_Icy
Definition SnakeBlock.h:38
SnakeBlock(const ActorCreateParameter &param)
Definition SnakeBlock.h:135
SnakeType mSnakeType
Definition SnakeBlock.h:233
Result create() override
Main initialization/setup callback for the actor.
Piece mMiddlePiece[20]
Definition SnakeBlock.h:225
f32 mBlockSize
Definition SnakeBlock.h:227
u32 mMiddlePieceCnt
Definition SnakeBlock.h:226
u8 * mPathDirection
Definition SnakeBlock.h:228
virtual void vf4E4()
StartCondition
Definition SnakeBlock.h:42
@ cStartCondition_AlwaysActive
Definition SnakeBlock.h:44
@ cStartCondition_AllPlayers
Definition SnakeBlock.h:45
@ cStartCondition_SinglePlayer
Definition SnakeBlock.h:43
s16 _5c04
Definition SnakeBlock.h:231
~SnakeBlock() override=default
u8 * mPathMarker
Definition SnakeBlock.h:229
bool mPlayerTouching[cPlayerNum]
Definition SnakeBlock.h:239
DrcTouchCB mDrcTouchCallback
Definition SnakeBlock.h:241
const EdgePiece & getEdgePiece(u32 idx) const
Definition SnakeBlock.h:167
u32 mPathLen
Definition SnakeBlock.h:230
const Piece & getMiddlePiece(u32 idx) const
Definition SnakeBlock.h:172
StartCondition mStartCondition
Definition SnakeBlock.h:236
bool draw() override
Main rendering callback for the actor. Called every frame (the game runs at exactly 60 FPS).
u32 mCreateMiddleIdx
Definition SnakeBlock.h:235
bool mRepeatMovement
Definition SnakeBlock.h:237
u32 _5d54
Definition SnakeBlock.h:242
bool execute() override
Main execution/logic callback for the actor. Called every frame (the game runs at exactly 60 FPS).
u32 mRepeatRailNode
Definition SnakeBlock.h:238
Result doDelete() override
ActorCollisionCheck _5c28
Definition SnakeBlock.h:240