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