New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
LineManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <state/FStateMgr.h>
4#include <utility/Angle.h>
5#include <utility/Direction.h>
6#include <prim/seadSafeString.h>
7#include <container/seadSafeArray.h>
8#include <math/seadVector.h>
9
11{
12public:
13 // Address: 0x0200DC14
15
16 /**
17 * @param stop_at_end Whether to stop when reaching the end as opposed to reversing.
18 * @param dir_left Whether to move left instead of right.
19 * @par Address: 0x0200DF60
20 */
21 void initialize(const sead::Vector2f& pos, u32 layer, f32 base_speed = 0.0f, bool stop_at_end = false, bool dir_left = false);
22
23 // Address: Deleted
25
26 // Address: 0x0200DF44
28
29 // Address: 0x0200E0C0
30 void setBaseSpeed(f32 speed);
31
32 // Address: 0x0200E0D8
33 Angle acmAngle() const;
34
35 // Address: 0x0200E0FC
36 u32 getLineUnitNo(f32 x, f32 y) const;
37
38 // Address: 0x0200E178
39 void startLineMove(bool exec_fall_down = false);
40
41 // Address: 0x0200E354
43
44 // Address: Deleted
45 void printInitState(const sead::SafeString&) const;
46
47 // Address: 0x0200E49C
49
50 // Address: 0x0200E4D0
52
53 // Address: 0x0200E504
54 bool lineCrossSlopeCheck(f32*, f32*, const sead::Vector2f&, const sead::Vector2f&);
55
56 // Address: 0x0200E580
58
59 // Address: 0x0200E5C0
60 static bool slopeCrossCheck(sead::Vector2f*, f32, f32, const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
61
62 // Address: 0x0200E740
63 static bool verticalCrossCheck(f32*, f32, const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
64
65 // Address: 0x0200E868
66 static bool circleCrossCheck(f32, const sead::Vector2f&, const sead::Vector2f&);
67
68 // Address: 0x0200E8C8
69 bool slopeCrossSetIfCan(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&, f32, f32);
70
71 // Address: 0x0200E960
72 bool heightCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
73
74 // Address: 0x0200EA6C
75 bool widthCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
76
77 // Address: 0x0200EABC
78 void circleNextPosSet(const sead::Vector3f& pos, f32);
79
80 // Address: 0x0200EB58
81 bool checkTerm();
82
83 // Address: 0x0200ECE8
85
86 // Address: 0x0200EE78
88
89 // Address: 0x0200EEB8
91
92 // Address: 0x0200EEF4
94
95 // Address: 0x0200EF18
97
98 // Address: 0x0200EF38
100
101 // Address: 0x0200EF80
103
104 // Address: 0x0200EFC8
105 bool line0CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
106 // Address: 0x0200F048
107 bool line1CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
108 // Address: 0x0200F0AC
109 bool line3HCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
110 // Address: 0x0200F0FC
111 bool line3VCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
112 // Address: 0x0200F14C
113 bool line4CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
114 // Address: 0x0200F19C
115 bool line5CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
116 // Address: 0x0200F1EC
117 bool line7CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
118 // Address: 0x0200F26C
119 bool line8CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
120 // Address: 0x0200F2F4
121 bool line9CrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
122 // Address: 0x0200F358
123 bool lineACrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
124 // Address: 0x0200F3E0
125 bool lineBCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
126 // Address: 0x0200F474
127 bool lineCCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
128 // Address: 0x0200F4FC
129 bool lineDCrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
130 // Address: 0x0200F57C
131 bool lineECrossCheck(const sead::Vector2f&, const sead::Vector2f&, const sead::Vector2f&);
132 // Address: 0x0200F5E0
133 bool lineFCrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
134
135 // Address: 0x0200F8DC
136 bool circleUL2CrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
137 // Address: 0x0200FBD4
138 bool circleUR2CrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
139 // Address: 0x0200FEB4
140 bool circleDL2CrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
141 // Address: 0x02010194
142 bool circleDR2CrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
143
144 // Address: 0x0201044C
145 bool lineRHURCrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
146 // Address: 0x0201072C
147 bool lineRHULCrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
148 // Address: 0x02010A24
149 bool lineRHLLCrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
150 // Address: 0x02010D04
151 bool lineRHLRCrossCheck(const sead::Vector2f&, sead::Vector2f, sead::Vector2f);
152
153 // Address: 0x02010FBC
155
156 // Address: 0x0201214C
157 bool moveToRightUpper(u32, const sead::Vector2f&, bool);
158 // Address: 0x02011D88
159 bool moveToRightLower(u32, const sead::Vector2f&, bool);
160 // Address: 0x02011904
161 bool moveToLeftUpper(u32, const sead::Vector2f&, bool);
162 // Address: 0x020125EC
163 bool moveToLeftLower(u32, const sead::Vector2f&, bool);
164
165 // Address: 0x02012A90
166 void moveFromRightUpper(const sead::Vector2f&, bool);
167 // Address: 0x02012BC0
168 void moveFromHeightUpper(const sead::Vector2f&);
169 // Address: 0x02012CC0
170 void moveFromLeftLower(const sead::Vector2f&, bool);
171 // Address: 0x02012DD0
172 void moveFromRightLower(const sead::Vector2f&, bool);
173 // Address: 0x02012F00
174 void moveFromHeightLower(const sead::Vector2f&);
175 // Address: 0x02013000
176 void moveFromLeftUpper(const sead::Vector2f&, bool);
177
178 // Address: 0x02013110
180 // Address: 0x02013288
182 // Address: 0x02013418
184 // Address: 0x02013594
186
187 void execute()
188 {
189 mStateMgr.executeState();
190 }
191
192 const sead::Vector2f& getPos() const
193 {
194 return mPos;
195 }
196
197 bool isState(const StateID& state_id) const
198 {
199 return *mStateMgr.getStateID() == state_id;
200 }
201
202 bool isDirLeft() const
203 {
204 return mDirLeft;
205 }
206
207 bool isDirRight() const
208 {
209 return !mDirLeft;
210 }
211
212public:
213 // StateID_Idle Address: Deleted
214 // initializeState_Idle Address: Deleted
215 // executeState_Idle Address: Deleted
216 // finalizeState_Idle Address: Deleted
217 DECLARE_STATE_ID(LineManager, Idle)
218 // StateID_FallDown Address: 0x101ECA8C
219 // initializeState_FallDown Address: 0x0201371C
220 // executeState_FallDown Address: 0x02013730
221 // finalizeState_FallDown Address: 0x020170F4
223 // StateID_Left45 Address: 0x101ECAAC
224 // initializeState_Left45 Address: 0x020137B4
225 // executeState_Left45 Address: 0x02013800
226 // finalizeState_Left45 Address: 0x020170F8
228 // StateID_Right45 Address: 0x101ECACC
229 // initializeState_Right45 Address: 0x02013960
230 // executeState_Right45 Address: 0x020139A0
231 // finalizeState_Right45 Address: 0x020170FC
233 // StateID_Side Address: 0x101ECAEC
234 // initializeState_Side Address: 0x02013AE0
235 // executeState_Side Address: 0x02013B1C
236 // finalizeState_Side Address: 0x02017100
238 // StateID_Height Address: 0x101ECB0C
239 // initializeState_Height Address: 0x02013CE0
240 // executeState_Height Address: 0x02013D1C
241 // finalizeState_Height Address: 0x02017104
243 // StateID_CornerHeightLine Address: 0x101ECB2C
244 // initializeState_CornerHeightLine Address: 0x02013E30
245 // executeState_CornerHeightLine Address: 0x02013E6C
246 // finalizeState_CornerHeightLine Address: 0x02017108
248 // StateID_CornerSideLine Address: Deleted
249 // initializeState_CornerSideLine Address: Deleted
250 // executeState_CornerSideLine Address: Deleted
251 // finalizeState_CornerSideLine Address: Deleted
253 // StateID_Left30Left Address: 0x101ECB6C
254 // initializeState_Left30Left Address: 0x020140DC
255 // executeState_Left30Left Address: 0x0201413C
256 // finalizeState_Left30Left Address: 0x02017110
258 // StateID_Left30Right Address: 0x101ECB8C
259 // initializeState_Left30Right Address: 0x0201438C
260 // executeState_Left30Right Address: 0x020143EC
261 // finalizeState_Left30Right Address: 0x02017114
263 // StateID_Right30Left Address: 0x101ECBAC
264 // initializeState_Right30Left Address: 0x02014610
265 // executeState_Right30Left Address: 0x02014668
266 // finalizeState_Right30Left Address: 0x02017118
268 // StateID_Right30Right Address: 0x101ECBCC
269 // initializeState_Right30Right Address: 0x02014894
270 // executeState_Right30Right Address: 0x020148EC
271 // finalizeState_Right30Right Address: 0x0201711C
273 // StateID_Left60Up Address: 0x101ECBEC
274 // initializeState_Left60Up Address: 0x02014B20
275 // executeState_Left60Up Address: 0x02014B80
276 // finalizeState_Left60Up Address: 0x02017120
278 // StateID_Left60Down Address: 0x101ECC0C
279 // initializeState_Left60Down Address: 0x02014DE0
280 // executeState_Left60Down Address: 0x02014E40
281 // finalizeState_Left60Down Address: 0x02017124
283 // StateID_Right60Down Address: 0x101ECC2C
284 // initializeState_Right60Down Address: 0x02015074
285 // executeState_Right60Down Address: 0x020150D4
286 // finalizeState_Right60Down Address: 0x02017128
288 // StateID_Right60Up Address: 0x101ECC4C
289 // initializeState_Right60Up Address: 0x02015314
290 // executeState_Right60Up Address: 0x0201536C
291 // finalizeState_Right60Up Address: 0x0201712C
293 // StateID_Circle Address: 0x101ECC6C
294 // initializeState_Circle Address: 0x0201559C
295 // executeState_Circle Address: 0x020155D8
296 // finalizeState_Circle Address: 0x02017130
298 // StateID_Circle2x2LeftUp Address: 0x101ECC8C
299 // initializeState_Circle2x2LeftUp Address: 0x02015668
300 // executeState_Circle2x2LeftUp Address: 0x020156A4
301 // finalizeState_Circle2x2LeftUp Address: 0x02017134
303 // StateID_Circle2x2RightUp Address: 0x101ECCAC
304 // initializeState_Circle2x2RightUp Address: 0x020156B8
305 // executeState_Circle2x2RightUp Address: 0x020156FC
306 // finalizeState_Circle2x2RightUp Address: 0x02017138
308 // StateID_Circle2x2LeftDown Address: 0x101ECCCC
309 // initializeState_LeftDown Address: 0x02015710
310 // executeState_LeftDown Address: 0x0201574C
311 // finalizeState_LeftDown Address: 0x0201713C
313 // StateID_Circle2x2RightDown Address: 0x101ECCEC
314 // initializeState_RightDown Address: 0x02015760
315 // executeState_RightDown Address: 0x0201579C
316 // finalizeState_RightDown Address: 0x02017140
318 // StateID_Circle4x4RightUp Address: 0x101ECD0C
319 // initializeState_Circle4x4RightUp Address: 0x020157B0
320 // executeState_Circle4x4RightUp Address: 0x020157F4
321 // finalizeState_Circle4x4RightUp Address: 0x02017144
323
324public:
325 /**
326 * @brief 16.0f
327 * @par Address: 0x10001740
328 */
330
331 /**
332 * @brief 16.0f
333 * @par Address: Deleted
334 */
336
337protected:
350 bool _8f; // Set, but never read
351};
352static_assert(sizeof(LineManager) == 0x90, "LineManager size mismatch");
Definition LineManager.h:11
bool line3HCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool lineRHLRCrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
FStateMgr< LineManager > mStateMgr
Definition LineManager.h:338
void correctPosYUnitOver()
bool line8CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
Angle mAngle
Definition LineManager.h:345
bool isDirRight() const
Definition LineManager.h:207
void calcRotateToCircleRev(Angle, bool)
bool _8f
Definition LineManager.h:350
void moveOnCircle2(f32, f32)
sead::UnsafeArray< sead::Vector2f, 7 > _24
Definition LineManager.h:339
void moveOnCircleSpeedSet(f32, f32)
void moveOnCircle1(f32, f32)
bool lineACrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
sead::Vector2f mPosBlock
Definition LineManager.h:343
Angle acmRotDeltaU2UPrev(Angle)
static bool slopeCrossCheck(sead::Vector2f *, f32, f32, const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
bool slopeCrossSetIfCan(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &, f32, f32)
bool widthCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool lineRHLLCrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
void circleNextPosSet(const sead::Vector3f &pos, f32)
bool mDirLeft
Definition LineManager.h:349
bool line5CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool lineCCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
sead::Vector2f mSpeed
Definition LineManager.h:340
bool circleUR2CrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
bool line9CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
void moveFromLeftLower(const sead::Vector2f &, bool)
bool moveToRightUpper(u32, const sead::Vector2f &, bool)
void moveFromRightUpper(const sead::Vector2f &, bool)
bool lineRHURCrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
void execute()
Definition LineManager.h:187
bool lineDCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool circleUL2CrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
bool circleDL2CrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
bool lineECrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
static f32 cUnitSizeY
16.0f
Definition LineManager.h:335
void fallOnLineCheck()
const sead::Vector2f & getPos() const
Definition LineManager.h:192
bool moveToRightLower(u32, const sead::Vector2f &, bool)
void setBaseSpeed(f32 speed)
void moveFromHeightUpper(const sead::Vector2f &)
bool line0CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool line3VCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
void moveFromLeftUpper(const sead::Vector2f &, bool)
void initialize(const sead::Vector2f &pos, u32 layer, f32 base_speed=0.0f, bool stop_at_end=false, bool dir_left=false)
bool lineCrossRangeCheck(f32, f32, f32)
static bool circleCrossCheck(f32, const sead::Vector2f &, const sead::Vector2f &)
void initTermCheckPos()
void moveOnCircle3(f32, f32)
void moveOnCircle4(f32, f32)
bool lineCrossSlopeCheck(f32 *, f32 *, const sead::Vector2f &, const sead::Vector2f &)
bool checkTerm()
bool isDirLeft() const
Definition LineManager.h:202
bool moveToLeftUpper(u32, const sead::Vector2f &, bool)
bool lineBCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
static bool verticalCrossCheck(f32 *, f32, const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
sead::Vector2f mPos
Definition LineManager.h:341
bool heightCrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool line1CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool isState(const StateID &state_id) const
Definition LineManager.h:197
void moveFromHeightLower(const sead::Vector2f &)
bool lineRHULCrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
void correctPosXUnitOver()
bool line7CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
bool circleDR2CrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
bool line4CrossCheck(const sead::Vector2f &, const sead::Vector2f &, const sead::Vector2f &)
void calcRotateToCirclePrev(Angle, bool)
void startLineMove(bool exec_fall_down=false)
bool moveToLeftLower(u32, const sead::Vector2f &, bool)
f32 mBaseSpeed
Definition LineManager.h:346
void moveFromRightLower(const sead::Vector2f &, bool)
sead::Vector2f mPosPrev
Definition LineManager.h:342
void printInitState(const sead::SafeString &) const
bool lineFCrossCheck(const sead::Vector2f &, sead::Vector2f, sead::Vector2f)
sead::Vector2f _7c
Definition LineManager.h:344
bool mStopAtEnd
Definition LineManager.h:347
Angle acmRotDeltaU2URev(Angle)
bool isUnitCircle4x4(u32)
void changeDirection()
u8 mLayer
Definition LineManager.h:348
bool isUnitCircle2x2(u32)
u32 getLineUnitNo(f32 x, f32 y) const
Angle acmAngle() const
f32 calcAdjustPosY(f32, f32)