New Super Mario Bros. U Headers
Loading...
Searching...
No Matches
ActorBgCollisionCheck.h
Go to the documentation of this file.
1#pragma once
2
3#include <actor/ActorUniqueID.h>
4#include <collision/ActorBgHitCheckCallback.h>
5#include <collision/BasicBgCollisionCheck.h>
6#include <collision/BgCollisionCat.h>
7#include <collision/BgUnitCode.h>
8#include <collision/FollowArg.h>
9#include <map/WaterType.h>
10#include <system/LineNodeMgr.h>
11#include <utility/Angle.h>
12#include <utility/Bitfield.h>
13#include <utility/Direction.h>
14
15#include <container/seadPtrArray.h>
16#include <container/seadSafeArray.h>
17#include <math/seadBoundBox.h>
18#include <prim/seadMemUtil.h>
19#include <prim/seadRuntimeTypeInfo.h>
20
21class BgCollision;
22
24{
25public:
26 // Address: 0x0218A4D0
28
29 // Address: 0x0218A5B4
30 void initialize();
31
32 // Address: 0x0218A608
34 // Address: 0x0218A658
36
37private:
48 //u32 _24[4 / sizeof(u32)]; // Alignment???
49 u64 mBgCheckData; // See BgUnitCode
52};
53static_assert(sizeof(ActorBgCollisionCheckResult) == 0x38);
54
55class Actor;
57
58class ActorBgCollisionCheck // vtbl Address: 0x10041364
59{
60 // getRuntimeTypeInfoStatic()::typeInfo initialization guard variable Address: Deleted
61 // getRuntimeTypeInfoStatic()::typeInfo Address: Deleted
63
64public:
65 /**
66 * @brief Defines the classification of terrain slope angles.
67 * @note "Saka" (坂) translates to "slope" in Japanese.
68 */
70 {
71 cSakaType_None = 0, ///< Slope angle (abs): [0 deg, 7.0175 deg)
72 cSakaType_Gentle, ///< Slope angle (abs): [7.0175 deg, 20.3165 deg)
73 cSakaType_Moderate, ///< Slope angle (abs): [20.3165 deg, 35.7990 deg)
74 cSakaType_Steep, ///< Slope angle (abs): [35.7990 deg, 54.2010 deg)
75 cSakaType_VerySteep, ///< Slope angle (abs): >= 54.2010 deg
77 };
78 static_assert(sizeof(SakaType) == 4);
79 static_assert(cSakaType_Num == 5);
80
81 /**
82 * @brief Defines the classification of terrain slope incline directions.
83 * @note "Saka" (坂) translates to "slope" in Japanese.
84 */
90
103
104public:
105 class Output : public Bitfield<32>
106 {
107 public:
108 enum Bit
109 {
112 cBit_OnRide = 2, // If ActorBgCollisionCheckResult._3 is set and is standing
114 cBit_OnHalf = 4, // If standing on surface with BgUnitCode::cHitType_Half
118 cBit_OnQuicksand = 8, // If standing on quicksand
121 cBit_Unk13 = 13, // If ActorBgCollisionCheckResult._3 is set and is hitting head
124 cBit_InQuicksand = 16, // If fully submerged in quicksand (more specifically, head is hitting quicksand)
130 cBit_Unk22 = 22, // Right Wall related
131 cBit_Unk23 = 23, // Left Wall related
135 cBit_Unk28 = 28, // Right Wall related
136 cBit_Unk29 = 29, // Left Wall related
139 };
140
141 public:
142 bool checkFoot() const { return isOnBit(cBit_OnGround); }
143 bool checkHead() const { return isOnBit(cBit_HeadCollision); }
144 bool checkRightWall() const { return isOnBit(cBit_WallRCollision); }
145 bool checkLeftWall() const { return isOnBit(cBit_WallLCollision); }
146
147 bool checkWall(u8 direction) const
148 {
149 switch (direction)
150 {
151 case cDirType_Right: return checkRightWall();
152 case cDirType_Left: return checkLeftWall();
153 default: return false;
154 }
155 }
156
157 bool checkRide() const
158 {
159 return isOnBit(cBit_OnRide);
160 }
161
162 bool isOnQuicksand() const
163 {
164 return isOnBit(cBit_OnQuicksand);
165 }
166
167 bool isInQuicksand() const
168 {
169 return isOnBit(cBit_InQuicksand);
170 }
171
172 bool isQuicksand() const
173 {
175 }
176
177 bool checkHeadEx() const
178 {
179 return checkHead() && !isInQuicksand();
180 }
181
182 bool checkRightWallEx() const
183 {
184 return (checkRightWall() || isOnBit(cBit_Unk22)) && !isOnBit(cBit_Unk28);
185 }
186
187 bool checkLeftWallEx() const
188 {
189 return (checkLeftWall() || isOnBit(cBit_Unk23)) && !isOnBit(cBit_Unk29);
190 }
191
192 bool checkWallEx(DirType direction) const
193 {
194 return (isOnBit(cBit_WallRCollision + direction) || isOnBit(cBit_Unk22 + direction)) && !isOnBit(cBit_Unk28 + direction);
195 }
196
197 bool isOnTrampoline() const
198 {
199 return isOnBit(cBit_OnTrampoline);
200 }
201
202 void setFoot()
203 {
204 setBit(cBit_OnGround);
205 }
206 };
207 static_assert(sizeof(Output) == 4);
208
209 class SensorFlag : public Bitfield<64>
210 {
211 public:
261 };
262 static_assert(sizeof(SensorFlag) == 8);
263
264public:
265 struct Sensor
266 {
267 f32 p1; // Typically -> Horizontal sensors: Left edge of sensor. Vertical sensors: Bottom edge of sensor. Player vine sensor: Top edge of sensor.
268 f32 p2; // Typically -> Horizontal sensors: Right edge of sensor. Vertical sensors: Top edge of sensor. Player vine sensor: Bottom edge of sensor.
269 f32 center_offset; // Typically -> Horizontal sensors: Vertical offset from actor position to sensor center. Vertical sensors & Player vine sensor: Horizontal offset from actor position to sensor center.
270 };
271 static_assert(sizeof(Sensor) == 0xC);
272
273public:
278
280
282
285
287
288public:
289 // Address: 0x0218A6EC
291 // Address: 0x0218ADFC
293
294 // Address: 0x0218D954
295 virtual void checkBg();
296 // Address: 0x0218E060
297 virtual void clearBg();
298 // Address: 0x0218E180
299 virtual void atFrameStart();
300 virtual Actor* getOwnerAtRevCheck(f32 bg_collision_pos_y) const = 0;
301 virtual Actor* getOwnerAtHit(const BgCollision& bg_collision, u8 direction) const = 0; // direction: Which sensor was hit
302 virtual s8* vf4C(f32) const = 0;
303 // Address: 0x0219070C
304 virtual void vf54();
305
306protected:
307 // Address: 0x02190C14
308 virtual void checkFoot_();
309 // Address: 0x02191054
310 virtual void checkHead_();
311 // Address: 0x02191494
312 virtual void checkWall_(u8 direction);
313
314public:
315 /**
316 * @brief Initialize the checker with the owner and sensors.
317 * @param owner The actor which the sensors belong to and will follow.
318 * @param foot The sensor to go below and check for floor collision, or @c nullptr if skipping this sensor.
319 * @param head The sensor to go above and check for ceiling collision, or @c nullptr if skipping this sensor.
320 * @param wall The sensor to go on either side and check for wall collision, or @c nullptr if skipping this sensor.
321 * @par Address: 0x0218AF6C
322 */
323 void set(Actor* owner, const Sensor* foot, const Sensor* head, const Sensor* wall);
324
326 {
327 return mOwner;
328 }
329
330 template <typename T>
331 T* getOwner() const
332 {
333 return sead::DynamicCast<T>(mOwner);
334 }
335
336 // Address: 0x0218AEFC
337 void setSensor(const Sensor* sensor, u8 direction);
338 // Address: 0x0218CE74
339 const Sensor* getSensor(u8 direction) const;
340
341 void setSensorFoot(const Sensor* foot)
342 {
343 setSensor(foot, cDirType_Down);
344 }
345
346 void setSensorHead(const Sensor* head)
347 {
348 setSensor(head, cDirType_Up);
349 }
350
351 void setSensorWall(const Sensor* wall_r)
352 {
353 setSensor(wall_r, cDirType_Right);
354 if (wall_r != nullptr)
355 {
356 Sensor wall_l = *wall_r;
357 wall_l.center_offset *= -1.0f;
358 setSensor(&wall_l, cDirType_Left);
359 }
360 else
361 {
362 setSensor(nullptr, cDirType_Left);
363 }
364 }
365
366 bool isSensor1Set(DirType direction) const
367 {
368 return mIsSensor1Set[direction];
369 }
370
371 bool isSensor1Null(DirType direction) const
372 {
373 return mIsSensor1Null[direction];
374 }
375
376 bool isSensor2Set(DirType direction) const
377 {
378 return mIsSensor2Set[direction];
379 }
380
382 {
383 return mSensor1;
384 }
385
387 {
388 return mSensor2;
389 }
390
391 Sensor* getSensor1(DirType direction)
392 {
393 return &(mSensor1[direction]);
394 }
395
396 const Sensor* getSensor1(DirType direction) const
397 {
398 return &(mSensor1[direction]);
399 }
400
401 Sensor* getSensor2(DirType direction)
402 {
403 return &(mSensor2[direction]);
404 }
405
406 const Sensor* getSensor2(DirType direction) const
407 {
408 return &(mSensor2[direction]);
409 }
410
411 const Sensor* getSensorEffective(DirType direction) const
412 {
413 if (isSensor1Set(direction))
414 {
415 if (!isSensor1Null(direction))
416 return getSensor1(direction);
417 }
418 else if (isSensor2Set(direction))
419 {
420 return getSensor2(direction);
421 }
422 return nullptr;
423 }
424
425 SensorFlag& getSensorFlag(DirType direction)
426 {
427 return mSensorFlag[direction];
428 }
429
430 const SensorFlag& getSensorFlag(DirType direction) const
431 {
432 return mSensorFlag[direction];
433 }
434
436 {
437 return mIgnoreActor;
438 }
439
441 {
442 mIgnoreActor = actor;
443 }
444
445 const FollowArg& getFollowArg() const { return mFollowArg; }
446
447 Output& getOutput() { return mOutput; }
448 const Output& getOutput() const { return mOutput; }
449
450 bool checkFoot() const
451 {
453 }
454
455 bool checkHead() const
456 {
458 }
459
460 bool checkWall(DirType direction) const
461 {
462 return getOutput().checkWallEx(direction);
463 }
464
465 bool checkRide() const
466 {
468 }
469
470 bool isQuicksand() const
471 {
473 }
474
475 bool isOnTrampoline() const
476 {
478 }
479
480 const sead::Vector2f& getBgSpeed() const
481 {
482 return mBgSpeed;
483 }
484
485 bool isHit(u8 hit_dir_flag) const
486 {
487 return mHitDirectionFlag & hit_dir_flag;
488 }
489
490 // Address: 0x0218AC38
492 // Address: 0x0218ACA8
494 // Address: 0x0218AD6C
495 BgCollision* getHitBgCollisionWall(DirType direction) const;
496
497 const u64& getBgCheckData(DirType direction) const
498 {
499 return mBgCheckData[direction];
500 }
501
502 const u64& getBgCheckDataPrev(DirType direction) const
503 {
504 return mBgCheckDataPrev[direction];
505 }
506
507 // Address: 0x0218B214
508 Angle getSakaBaseAngle(); // Angle of the slope surface tangent (only values between -90 deg and 90 deg make sense)
509 // Address: 0x0218B254
511
512 // Address: 0x0218BCA8
513 SakaType getSakaType(Angle saka_base_angle);
514
515 bool isSaka()
516 {
517 return getSakaType(getSakaBaseAngle());
518 }
519
520 // Address: 0x0218E234
521 SakaDir getSakaDir(); // Returns the downhill direction along the slope surface, left if the slope descends leftwards, right if the slope descends rightwards.
522
523 // Address: 0x0218E260
524 Angle getSakaAngle(DirType dir); // Slope tangent angle signed in the move direction: + => moving uphill, - => moving downhill
525 // Address: 0x0218E28C
527
528 // Address: 0x0218E2B8
529 Angle getWallAngle(DirType dir);
530
532 {
533 return mBgCheck;
534 }
535
537 {
538 return mBgCheck;
539 }
540
541 // Address: 0x0218B90C
543
544 // Address: 0x0218F0C0
545 static WaterType checkWater(f32* surface_pos_y, const sead::Vector3f& pos, u8 layer);
546 // Address: 0x0218F72C
547 static WaterType checkWater(f32* surface_pos_y, BgCollisionCheckHitResult* hit_result, const sead::Vector3f& pos, u8 layer);
548 // Address: 0x0219047C
549 static WaterType checkWater(const sead::Vector3f& pos, u8 layer);
550
551 // Address: 0x021905c8
552 static u32 checkWaterDepth(f32 x, f32 y, u8 layer);
553
554protected:
556
565 Actor* mIgnoreActor; // Force mBgCheck to ignore BgCollision owned by this actor
577 u8 mHitDirectionFlag; // lower 4 bits: normal, upper 4 bits: boost block
579 bool _916;
580 bool _917;
581 bool _918;
594 //u32 _a14[4 / sizeof(u32)]; // Alignment???
600};
601static_assert(sizeof(ActorBgCollisionCheck) == 0x14E0);
Definition ActorBgCollisionCheck.h:24
sead::Vector2f _c
Definition ActorBgCollisionCheck.h:44
u8 _2
Definition ActorBgCollisionCheck.h:40
u8 _0
Definition ActorBgCollisionCheck.h:38
u32 _4
Definition ActorBgCollisionCheck.h:42
u8 _3
Definition ActorBgCollisionCheck.h:41
u64 mBgCheckData
Definition ActorBgCollisionCheck.h:49
void setOwner(BgCollision *)
Angle _34
Definition ActorBgCollisionCheck.h:51
BgCollision * mOwner
Definition ActorBgCollisionCheck.h:47
u8 _1
Definition ActorBgCollisionCheck.h:39
f32 _30
Definition ActorBgCollisionCheck.h:50
BgCollision * getOwner() const
ActorUniqueID mActorUniqueID
Definition ActorBgCollisionCheck.h:46
sead::Vector2f _14
Definition ActorBgCollisionCheck.h:45
Angle mAngle
Definition ActorBgCollisionCheck.h:43
Definition ActorBgCollisionCheck.h:106
bool checkRide() const
Definition ActorBgCollisionCheck.h:157
bool checkWall(u8 direction) const
Definition ActorBgCollisionCheck.h:147
bool checkHead() const
Definition ActorBgCollisionCheck.h:143
bool isQuicksand() const
Definition ActorBgCollisionCheck.h:172
bool checkLeftWall() const
Definition ActorBgCollisionCheck.h:145
bool isInQuicksand() const
Definition ActorBgCollisionCheck.h:167
bool isOnTrampoline() const
Definition ActorBgCollisionCheck.h:197
bool checkRightWallEx() const
Definition ActorBgCollisionCheck.h:182
bool checkFoot() const
Definition ActorBgCollisionCheck.h:142
bool checkWallEx(DirType direction) const
Definition ActorBgCollisionCheck.h:192
bool isOnQuicksand() const
Definition ActorBgCollisionCheck.h:162
void setFoot()
Definition ActorBgCollisionCheck.h:202
Bit
Definition ActorBgCollisionCheck.h:109
@ cBit_OnRide
Definition ActorBgCollisionCheck.h:112
@ cBit_Unk15
Definition ActorBgCollisionCheck.h:123
@ cBit_Unk27
Definition ActorBgCollisionCheck.h:134
@ cBit_Unk29
Definition ActorBgCollisionCheck.h:136
@ cBit_Unk14
Definition ActorBgCollisionCheck.h:122
@ cBit_OnGround
Definition ActorBgCollisionCheck.h:110
@ cBit_Unk6
Definition ActorBgCollisionCheck.h:116
@ cBit_Unk31
Definition ActorBgCollisionCheck.h:138
@ cBit_Unk9
Definition ActorBgCollisionCheck.h:119
@ cBit_Unk24
Definition ActorBgCollisionCheck.h:132
@ cBit_WallRCollision
Definition ActorBgCollisionCheck.h:126
@ cBit_Unk28
Definition ActorBgCollisionCheck.h:135
@ cBit_OnHalf
Definition ActorBgCollisionCheck.h:114
@ cBit_InQuicksand
Definition ActorBgCollisionCheck.h:124
@ cBit_OnTrampoline
Definition ActorBgCollisionCheck.h:113
@ cBit_CarryRelatedL
Definition ActorBgCollisionCheck.h:129
@ cBit_WallLCollision
Definition ActorBgCollisionCheck.h:127
@ cBit_OnSlope
Definition ActorBgCollisionCheck.h:111
@ cBit_HeadCollision
Definition ActorBgCollisionCheck.h:120
@ cBit_Unk5
Definition ActorBgCollisionCheck.h:115
@ cBit_Unk17
Definition ActorBgCollisionCheck.h:125
@ cBit_CarryRelatedR
Definition ActorBgCollisionCheck.h:128
@ cBit_OnHorzPipe
Definition ActorBgCollisionCheck.h:117
@ cBit_OnQuicksand
Definition ActorBgCollisionCheck.h:118
@ cBit_Unk22
Definition ActorBgCollisionCheck.h:130
@ cBit_Unk13
Definition ActorBgCollisionCheck.h:121
@ cBit_Unk26
Definition ActorBgCollisionCheck.h:133
@ cBit_Unk23
Definition ActorBgCollisionCheck.h:131
@ cBit_Unk30
Definition ActorBgCollisionCheck.h:137
bool checkRightWall() const
Definition ActorBgCollisionCheck.h:144
bool checkLeftWallEx() const
Definition ActorBgCollisionCheck.h:187
bool checkHeadEx() const
Definition ActorBgCollisionCheck.h:177
Definition ActorBgCollisionCheck.h:210
Bit
Definition ActorBgCollisionCheck.h:213
@ cBit_Inactive
Definition ActorBgCollisionCheck.h:242
@ cBit_24
Definition ActorBgCollisionCheck.h:236
@ cBit_51
Definition ActorBgCollisionCheck.h:254
@ cBit_13
Definition ActorBgCollisionCheck.h:226
@ cBit_4
Definition ActorBgCollisionCheck.h:218
@ cBit_21
Definition ActorBgCollisionCheck.h:233
@ cBit_26
Definition ActorBgCollisionCheck.h:238
@ cBit_54
Definition ActorBgCollisionCheck.h:257
@ cBit_38
Definition ActorBgCollisionCheck.h:246
@ cBit_27
Definition ActorBgCollisionCheck.h:239
@ cBit_46
Definition ActorBgCollisionCheck.h:250
@ cBit_15
Definition ActorBgCollisionCheck.h:228
@ cBit_43
Definition ActorBgCollisionCheck.h:248
@ cBit_18
Definition ActorBgCollisionCheck.h:231
@ cBit_10
Definition ActorBgCollisionCheck.h:224
@ cBit_BreakBlocks
Definition ActorBgCollisionCheck.h:251
@ cBit_28
Definition ActorBgCollisionCheck.h:240
@ cBit_1
Definition ActorBgCollisionCheck.h:215
@ cBit_52
Definition ActorBgCollisionCheck.h:255
@ cBit_9
Definition ActorBgCollisionCheck.h:223
@ cBit_16
Definition ActorBgCollisionCheck.h:229
@ cBit_50
Definition ActorBgCollisionCheck.h:253
@ cBit_8
Definition ActorBgCollisionCheck.h:222
@ cBit_23
Definition ActorBgCollisionCheck.h:235
@ cBit_55
Definition ActorBgCollisionCheck.h:258
@ cBit_5
Definition ActorBgCollisionCheck.h:219
@ cBit_17
Definition ActorBgCollisionCheck.h:230
@ cBit_14
Definition ActorBgCollisionCheck.h:227
@ cBit_6
Definition ActorBgCollisionCheck.h:220
@ cBit_22
Definition ActorBgCollisionCheck.h:234
@ cBit_36
Definition ActorBgCollisionCheck.h:244
@ cBit_56
Definition ActorBgCollisionCheck.h:259
@ cBit_3
Definition ActorBgCollisionCheck.h:217
@ cBit_0
Definition ActorBgCollisionCheck.h:214
Definition ActorBgCollisionCheck.h:59
sead::FixedPtrArray< BgCollision, 512 > _54
Definition ActorBgCollisionCheck.h:559
SensorBgCollisionCatArray mBgCheckResultIdxPrev
Definition ActorBgCollisionCheck.h:593
sead::UnsafeArray< BgCheckResultArray, cDirType_Num > SensorBgCheckResultArray
Definition ActorBgCollisionCheck.h:284
SensorBoolArray mIsSensor2Set
Definition ActorBgCollisionCheck.h:584
bool isSensor2Set(DirType direction) const
Definition ActorBgCollisionCheck.h:376
T * getOwner() const
Definition ActorBgCollisionCheck.h:331
bool isSensor1Null(DirType direction) const
Definition ActorBgCollisionCheck.h:371
const Sensor * getSensorEffective(DirType direction) const
Definition ActorBgCollisionCheck.h:411
bool isSaka()
Definition ActorBgCollisionCheck.h:515
WallSensorArray mSensor4
Definition ActorBgCollisionCheck.h:588
bool mIsInitialized
Definition ActorBgCollisionCheck.h:578
Actor * mOwner
Definition ActorBgCollisionCheck.h:564
virtual void vf54()
SensorFlag & getSensorFlag(DirType direction)
Definition ActorBgCollisionCheck.h:425
SensorBgCheckResultArray mBgCheckResult
Definition ActorBgCollisionCheck.h:595
virtual Actor * getOwnerAtRevCheck(f32 bg_collision_pos_y) const =0
u8 mHitDirectionFlag
Definition ActorBgCollisionCheck.h:577
const u64 & getBgCheckData(DirType direction) const
Definition ActorBgCollisionCheck.h:497
sead::BoundBox2f _8d4
Definition ActorBgCollisionCheck.h:571
HitDirBit
Definition ActorBgCollisionCheck.h:92
@ cHitDirBit_Right
Definition ActorBgCollisionCheck.h:93
@ cHitDirBit_Down
Definition ActorBgCollisionCheck.h:96
@ cHitDirBit_Up
Definition ActorBgCollisionCheck.h:95
@ cHitDirBit_BoostBlock_Down
Definition ActorBgCollisionCheck.h:101
@ cHitDirBit_BoostBlock_Up
Definition ActorBgCollisionCheck.h:100
@ cHitDirBit_Left
Definition ActorBgCollisionCheck.h:94
@ cHitDirBit_BoostBlock_Right
Definition ActorBgCollisionCheck.h:98
@ cHitDirBit_BoostBlock_Left
Definition ActorBgCollisionCheck.h:99
bool isSensor1Set(DirType direction) const
Definition ActorBgCollisionCheck.h:366
sead::Vector2f mBgSpeed
Definition ActorBgCollisionCheck.h:574
static u32 checkWaterDepth(f32 x, f32 y, u8 layer)
SensorBoolArray mIsSensor1Null
Definition ActorBgCollisionCheck.h:583
List::Node mListNodeHead
Definition ActorBgCollisionCheck.h:561
WallSensorBoolArray mIsSensor4Set
Definition ActorBgCollisionCheck.h:589
sead::UnsafeArray< Sensor, cDirType_Num > SensorArray
Definition ActorBgCollisionCheck.h:274
virtual void checkHead_()
ActorBgHitCheckCallback mBgHitCheckCallback
Definition ActorBgCollisionCheck.h:558
bool checkRide() const
Definition ActorBgCollisionCheck.h:465
const Sensor * getSensor1(DirType direction) const
Definition ActorBgCollisionCheck.h:396
Sensor * getSensor1(DirType direction)
Definition ActorBgCollisionCheck.h:391
const Output & getOutput() const
Definition ActorBgCollisionCheck.h:448
Output mOutputPrev
Definition ActorBgCollisionCheck.h:568
virtual void clearBg()
u32 _910
Definition ActorBgCollisionCheck.h:576
SensorArray mSensor2
Definition ActorBgCollisionCheck.h:586
sead::BoundBox2f _8f4
Definition ActorBgCollisionCheck.h:573
Angle getSakaAngle(DirType dir)
bool isOnTrampoline() const
Definition ActorBgCollisionCheck.h:475
void setSensorFoot(const Sensor *foot)
Definition ActorBgCollisionCheck.h:341
sead::BoundBox2f _8c4
Definition ActorBgCollisionCheck.h:570
SakaType getSakaType(Angle saka_base_angle)
const SensorFlag & getSensorFlag(DirType direction) const
Definition ActorBgCollisionCheck.h:430
const Sensor * getSensor(u8 direction) const
BasicBgCollisionCheck mBgCheck
Definition ActorBgCollisionCheck.h:557
virtual void checkFoot_()
u32 _14d8
Definition ActorBgCollisionCheck.h:599
const SensorArray & getSensorArray2() const
Definition ActorBgCollisionCheck.h:386
bool isHit(u8 hit_dir_flag) const
Definition ActorBgCollisionCheck.h:485
virtual void checkBg()
const SensorArray & getSensorArray1() const
Definition ActorBgCollisionCheck.h:381
List::Node mListNodeWallR
Definition ActorBgCollisionCheck.h:562
List::Node mListNodeWallL
Definition ActorBgCollisionCheck.h:563
sead::UnsafeArray< u64, cDirType_Num > SensorHitBgCheckDataArray
Definition ActorBgCollisionCheck.h:286
void set(Actor *owner, const Sensor *foot, const Sensor *head, const Sensor *wall)
Initialize the checker with the owner and sensors.
FollowArg mFollowArg
Definition ActorBgCollisionCheck.h:566
SensorArray mSensor3
Definition ActorBgCollisionCheck.h:587
BgCollision * getHitBgCollisionWall(DirType direction) const
sead::BoundBox2f _8e4
Definition ActorBgCollisionCheck.h:572
sead::UnsafeArray< Sensor, cDirType_NumX > WallSensorArray
Definition ActorBgCollisionCheck.h:276
Angle getWallAngle(DirType dir)
bool isQuicksand() const
Definition ActorBgCollisionCheck.h:470
WallSensorBoolArray mIsSensor4SetPrev
Definition ActorBgCollisionCheck.h:590
sead::UnsafeArray< ActorBgCollisionCheckResult, cBgCollisionCat_Num > BgCheckResultArray
Definition ActorBgCollisionCheck.h:283
SensorBgCollisionCatArray mBgCheckResultIdx
Definition ActorBgCollisionCheck.h:592
Output mOutput
Definition ActorBgCollisionCheck.h:567
SensorHitBgCheckDataArray mBgCheckDataPrev
Definition ActorBgCollisionCheck.h:598
virtual s8 * vf4C(f32) const =0
static WaterType checkWater(f32 *surface_pos_y, BgCollisionCheckHitResult *hit_result, const sead::Vector3f &pos, u8 layer)
f32 _90c
Definition ActorBgCollisionCheck.h:575
BasicBgCollisionCheck & getBgCheck()
Definition ActorBgCollisionCheck.h:531
void setIgnoreActor(Actor *actor)
Definition ActorBgCollisionCheck.h:440
const BasicBgCollisionCheck & getBgCheck() const
Definition ActorBgCollisionCheck.h:536
bool checkFoot() const
Definition ActorBgCollisionCheck.h:450
const sead::Vector2f & getBgSpeed() const
Definition ActorBgCollisionCheck.h:480
SakaDir
Defines the classification of terrain slope incline directions.
Definition ActorBgCollisionCheck.h:86
@ cSakaDir_Left
Definition ActorBgCollisionCheck.h:88
@ cSakaDir_Right
Definition ActorBgCollisionCheck.h:87
const FollowArg & getFollowArg() const
Definition ActorBgCollisionCheck.h:445
virtual void checkWall_(u8 direction)
void setSensorHead(const Sensor *head)
Definition ActorBgCollisionCheck.h:346
sead::UnsafeArray< SensorFlag, cDirType_Num > SensorFlagArray
Definition ActorBgCollisionCheck.h:279
void setSensor(const Sensor *sensor, u8 direction)
virtual ~ActorBgCollisionCheck()
Actor * mIgnoreActor
Definition ActorBgCollisionCheck.h:565
Actor * getOwner() const
Definition ActorBgCollisionCheck.h:325
bool checkHead() const
Definition ActorBgCollisionCheck.h:455
SensorHitBgCheckDataArray mBgCheckData
Definition ActorBgCollisionCheck.h:597
Output & getOutput()
Definition ActorBgCollisionCheck.h:447
LineNodeMgr< ActorBgCollisionCheck > List
Definition ActorBgCollisionCheck.h:555
SensorFlagArray mSensorFlag
Definition ActorBgCollisionCheck.h:591
SensorBgCheckResultArray mBgCheckResultPrev
Definition ActorBgCollisionCheck.h:596
bool _916
Definition ActorBgCollisionCheck.h:579
const Sensor * getSensor2(DirType direction) const
Definition ActorBgCollisionCheck.h:406
BgCollision * getHitBgCollisionHead() const
static WaterType checkWater(f32 *surface_pos_y, const sead::Vector3f &pos, u8 layer)
void setSensorWall(const Sensor *wall_r)
Definition ActorBgCollisionCheck.h:351
Sensor * getSensor2(DirType direction)
Definition ActorBgCollisionCheck.h:401
sead::UnsafeArray< bool, cDirType_Num > SensorBoolArray
Definition ActorBgCollisionCheck.h:275
sead::UnsafeArray< BgCollisionCat, cDirType_Num > SensorBgCollisionCatArray
Definition ActorBgCollisionCheck.h:281
virtual Actor * getOwnerAtHit(const BgCollision &bg_collision, u8 direction) const =0
Angle getHeadSakaAngle(DirType dir)
SensorArray mSensor1
Definition ActorBgCollisionCheck.h:585
bool _917
Definition ActorBgCollisionCheck.h:580
BgCollision * getHitBgCollisionFoot() const
static WaterType checkWater(const sead::Vector3f &pos, u8 layer)
SensorBoolArray mIsSensor1Set
Definition ActorBgCollisionCheck.h:582
bool _918
Definition ActorBgCollisionCheck.h:581
Actor * getIgnoreActor() const
Definition ActorBgCollisionCheck.h:435
sead::BoundBox2f _8b4
Definition ActorBgCollisionCheck.h:569
virtual void atFrameStart()
bool checkWall(DirType direction) const
Definition ActorBgCollisionCheck.h:460
const u64 & getBgCheckDataPrev(DirType direction) const
Definition ActorBgCollisionCheck.h:502
sead::UnsafeArray< bool, cDirType_NumX > WallSensorBoolArray
Definition ActorBgCollisionCheck.h:277
List::Node mListNodeFoot
Definition ActorBgCollisionCheck.h:560
Definition Actor.h:22
Definition BgCollision.h:19
Definition ActorBgCollisionCheck.h:266
f32 p2
Definition ActorBgCollisionCheck.h:268
f32 p1
Definition ActorBgCollisionCheck.h:267
f32 center_offset
Definition ActorBgCollisionCheck.h:269
Definition BgCollisionCheckHitResult.h:6